diff --git a/website/docs/.vuepress/config/nav.js b/website/docs/.vuepress/config/nav.js index ac850fe4b70b613fe22fea2796989639c50f6a16..28b458030af8d74d08c766052c0f991d08afa64a 100644 --- a/website/docs/.vuepress/config/nav.js +++ b/website/docs/.vuepress/config/nav.js @@ -35,7 +35,7 @@ module.exports = [ items: [ { text: '文档', - link: '/pages/000000/', + link: '/pages/010101/', }, { text: '知识图谱', diff --git a/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle-callbacks.png b/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle-callbacks.png new file mode 100644 index 0000000000000000000000000000000000000000..4c94556b5c2516ad2978a9a31d833cfb2cf3dd01 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle-callbacks.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle.png b/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..30160c8129c6556c2784a3bb893ad4cc67332339 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ability/figures/page-ability-lifecycle.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/background-agent-scheduled-reminder/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/application-dev/background-agent-scheduled-reminder/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/background-agent-scheduled-reminder/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/background-task-management/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/application-dev/background-task-management/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/background-task-management/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/database/figures/zh-cn_image_0000001183386164.png b/website/docs/.vuepress/public/images/application-dev/database/figures/zh-cn_image_0000001183386164.png new file mode 100644 index 0000000000000000000000000000000000000000..0538c11963b2e54fccc57d560831d41ceab82446 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/database/figures/zh-cn_image_0000001183386164.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/database/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/application-dev/database/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/database/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/media/figures/zh-ch_image_20220117.jpg b/website/docs/.vuepress/public/images/application-dev/media/figures/zh-ch_image_20220117.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc56b9d8395873193bbad2b3faf7340c6728af60 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/media/figures/zh-ch_image_20220117.jpg differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png new file mode 100644 index 0000000000000000000000000000000000000000..85345789b60927729e9243798fe122c64ca92687 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117479776.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117479776.png new file mode 100644 index 0000000000000000000000000000000000000000..9250f90cf1e377c8bb33adf9965436ed7ddbadbf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117479776.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117639668.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117639668.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3923fef0ad89fa38fa170d2680931d1eb1ea55 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001117639668.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001119560738.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001119560738.png new file mode 100644 index 0000000000000000000000000000000000000000..9a84c3f66275c8ea2a50b9ba9ab0ead3842274cc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001119560738.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001152674854.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001152674854.png new file mode 100644 index 0000000000000000000000000000000000000000..6bef885f7c487473ca1b329d41c6414735555b42 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001152674854.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001163839541.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001163839541.png new file mode 100644 index 0000000000000000000000000000000000000000..f278f73fb4cd0dba70cae1835dd7a45d2686038b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001163839541.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png new file mode 100644 index 0000000000000000000000000000000000000000..cb05a7cb0fa33a9d9074f4424a3851478935ff33 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png new file mode 100644 index 0000000000000000000000000000000000000000..469ca774dde99530329d5e7bd62a5a40fb16237b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png new file mode 100644 index 0000000000000000000000000000000000000000..b62a4291cbe98e250fd9dcc65e9f91ba67445575 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png new file mode 100644 index 0000000000000000000000000000000000000000..c44bd561803aa0dc4cafcf0db68bf38f5ba43013 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001196050928.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001196050928.png new file mode 100644 index 0000000000000000000000000000000000000000..dd75ea8e2b874aae201ecab3254fac3a7bce8fbc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001196050928.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png new file mode 100644 index 0000000000000000000000000000000000000000..afdab82267fcd7d5eacae76eba500baa3bbecd40 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png new file mode 100644 index 0000000000000000000000000000000000000000..7f99945dc6e30516a6084896b3f146af89dc2f23 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8dd786a91b784794a19f8b2975616912586286 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png new file mode 100644 index 0000000000000000000000000000000000000000..37736ed10ff7cd16907684dfe2c1d6bb19c61d50 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf1ed8cb6d6b6d88b57e533f9efe840afee95b5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001239855207.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001239855207.png new file mode 100644 index 0000000000000000000000000000000000000000..83ef94f222a2cc30f036057908960badedd4aeca Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001239855207.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001247125297.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001247125297.png new file mode 100644 index 0000000000000000000000000000000000000000..32771bf5f9639aa8ebdd1922f8088965404674ca Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001247125297.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001248045243.png b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001248045243.png new file mode 100644 index 0000000000000000000000000000000000000000..61535cb2fe6b4197e95cff8691fe27973c5ecde8 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/quick-start/figures/zh-cn_image_0000001248045243.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/001.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/001.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5bac4f696cc84f6e3116483209f51c08e0ad532 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/001.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/111.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/111.png new file mode 100644 index 0000000000000000000000000000000000000000..e0517663d25f8f857ac08dd4bd1c36ad76190663 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/111.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/222.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/222.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ec48b52853bc5eddff3eee7978ef9c313e99aa Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/222.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/333.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/333.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5ee3a87580dd9f485988467163d3a3ea7e95b6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/333.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/444.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/444.png new file mode 100644 index 0000000000000000000000000000000000000000..da8624b6dbff497762753fe8b5786c3d552c78ed Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/444.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/grid.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d2387c6db849678ae8897878fe3117170ea42a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/grid.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/list.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/list.png new file mode 100644 index 0000000000000000000000000000000000000000..7933730b5753d05a6f5734cb3d7ebb39aeb5f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/list.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/mmmm.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/mmmm.gif new file mode 100644 index 0000000000000000000000000000000000000000..5959ae695322f2e1eda3364d7603ec9d2ca10819 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/mmmm.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png new file mode 100644 index 0000000000000000000000000000000000000000..9be62c4f9a5b1ad4b6a1d647c3b0e2d6ac57a33e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc5fef8ddb3f1af9d6b231f9183f5094faf5434 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png new file mode 100644 index 0000000000000000000000000000000000000000..13b38a17af260f22ef850403d9351cff1860bb9c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/1.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6e9c72046d14a46ed93a1075ee580510e64f92 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/1.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111-5.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111-5.png new file mode 100644 index 0000000000000000000000000000000000000000..5da42e3e14d601745274cb62d914c6600620bb25 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111-5.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111.png new file mode 100644 index 0000000000000000000000000000000000000000..5da42e3e14d601745274cb62d914c6600620bb25 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/11111.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/2-01.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/2-01.png new file mode 100644 index 0000000000000000000000000000000000000000..e766d36181c3d1fbd96bb0acab1b3eb670e14cd4 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/2-01.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/5.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..587269a1e0647be0acb21deced4722037bb07013 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/5.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/66666.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/66666.gif new file mode 100644 index 0000000000000000000000000000000000000000..b40f786a2f583af59e9f63d35ab1d503f51525da Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/66666.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank1.gif new file mode 100644 index 0000000000000000000000000000000000000000..2547cd4af312ee9a2cfc6c3c61b630fdcd7426f9 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank2.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank2.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe04e9611135b8d8cd4f9ace0acf1d1a5797bf6c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Blank2.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Column.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Column.png new file mode 100644 index 0000000000000000000000000000000000000000..90bb7a5557e42ccc9b6509f96f54328d7a27eea1 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Column.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/F.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/F.gif new file mode 100644 index 0000000000000000000000000000000000000000..070ae9d042d5211b2ccc6c187ec0f87a90d2c963 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/F.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Flex04-2.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Flex04-2.gif new file mode 100644 index 0000000000000000000000000000000000000000..18e5eef8f04c15625f4e3ae3ab050083b3acc962 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Flex04-2.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-0.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-0.gif new file mode 100644 index 0000000000000000000000000000000000000000..23a03cf07feddcb9866e7ab141c212ebf01bf8b2 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-0.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..52fed39eeae057043dbd00abce9ff29d2c35a56a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-4.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-4.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bcc79b53b227b6bd0484045d20743d9686c8e08 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF-4.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF.gif new file mode 100644 index 0000000000000000000000000000000000000000..8eceb3bf5313485a1fedda5768e70cdb5febc464 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF1.gif new file mode 100644 index 0000000000000000000000000000000000000000..e97b2a2406059ce3af77ade27bb634845d807726 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF2.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF2.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0a6fc0df420fa15f8a0e476da5fa8592bbc751b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF2.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF4.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF4.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7532ed87726ac7591901514a7396b617daa10f0 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/GIF4.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image1.gif index 6bc2dfa331eb3b39fc32aa6c1fa131684dff3220..21391680f6080b39cced050c88087a0d241952d9 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image1.gif and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image2.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image2.png new file mode 100644 index 0000000000000000000000000000000000000000..085d31e9bf7c5740ac3c46d04c4098e64eb3a544 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image2.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image3.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image3.gif index 209112f1e4c14478df3f44390732d4b2c70755f4..ecbaeb8cc1a3ec9e1ecfd253b605be50836b1f46 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image3.gif and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/Image3.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/datapanel.jpg b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/datapanel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b12c5fb6563c7ee9d8dfa7e6af1cfe1dcfa1361c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/datapanel.jpg differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/divider.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/divider.png index f2deeb8445fe0f3b66d2b0facbf9e0f0ed9911ca..857e773f72d0cd7cd9ae13f50aa843a11aae4f97 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/divider.png and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/divider.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/duande.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/duande.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ed4e908925042a11312dd27aa1c28e8c91d8d8c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/duande.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/ellipse.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/ellipse.png new file mode 100644 index 0000000000000000000000000000000000000000..b85ac72fcec0f4b2eb752307d4abe05ef4795ef2 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/ellipse.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/gauge.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb96b00f11e597fcc3e3d5ef32701e0a4ef5f5b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/gauge.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/grid-3.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/grid-3.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ead4d671531532629b2fbf2f411ce4008dde3ba Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/grid-3.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif new file mode 100644 index 0000000000000000000000000000000000000000..e22d25b7aa139409766723e4ed0fd6172b85b6cf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/overlay.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8194c14b5ca1ea743782db95027035370ead7e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/overlay.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/popup.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/popup.gif index 3bbb23f623eb1163af382d30bc32c1c4cbe524dd..7631bb0d995839d59a9d3876f91fd7e688c35758 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/popup.gif and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/popup.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/progress.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/progress.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff7595bc619e62c05376cd7b57a473dde3e9386 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/progress.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/row.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/row.png index 3b44b9a41cb0fa78afcde81f82e0ad63c90de58d..6bf426a5f019e76b7b3a0953643988690eb67b1e 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/row.png and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/row.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/select.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/select.png new file mode 100644 index 0000000000000000000000000000000000000000..2672d45f3ed5685aa6f350c2cade469c065a13af Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/select.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/slider.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/slider.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1724791e4acb31d193a0dce267e42c99288c6bd Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/slider.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/stepper.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/stepper.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b44b6a2adc2528e13e95bc10d2a67874226a63b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/stepper.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/swiper.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/swiper.gif index bf8d1335752f51258920d0cfc1b65190e2f53011..5db399f79a02f496aea43ff72e55e29a0bb05a9a 100644 Binary files a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/swiper.gif and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/swiper.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textarea1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textarea1.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c888d43eeb0d0d3ab08e0c2922f136ed0b3d142 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textarea1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textinput1.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textinput1.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fa5c075ecc4f157f1e66316f4b56f28ffa2007d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/textinput1.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/toggle.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/toggle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6b7ae5ac2bf443574de54cd4df472a8f0cd1aba Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/toggle.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(3).png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(3).png new file mode 100644 index 0000000000000000000000000000000000000000..293ead152f1cde4757f85101d9c8c96bdec4dee7 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(3).png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(4).png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(4).png new file mode 100644 index 0000000000000000000000000000000000000000..e2a8cf9cf4fc88e27e7adb0ad9caf2df9ca978c6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/unnaming-(4).png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png new file mode 100644 index 0000000000000000000000000000000000000000..348499bc3787a833ab3da5f87500b11c9c93773e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png new file mode 100644 index 0000000000000000000000000000000000000000..e544a2958b969018ff6bfe8b44bb8758c2aea61a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png new file mode 100644 index 0000000000000000000000000000000000000000..f410f22c1dd0ba7e1c9718eb3995de5f5033c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed5759714b99dc039faab67acdfe6d67bfc6ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png new file mode 100644 index 0000000000000000000000000000000000000000..72a515c8b425037a4307ef1b16def3e528aab4a0 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png new file mode 100644 index 0000000000000000000000000000000000000000..92a309337be0e2f4c49d0484dab0ffd19584b534 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fd4aff2fb6b7a32fcb8af41a84fbf57c26d035 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png new file mode 100644 index 0000000000000000000000000000000000000000..160278c82fcdf310c796609d5ee29a2a4869af9e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ddc678b5a74f1e5ae78ba6a9c35618f31a589 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png new file mode 100644 index 0000000000000000000000000000000000000000..d3db21e0e3da6d8663f59b2ddabd9e50d6eb1e6a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png new file mode 100644 index 0000000000000000000000000000000000000000..5869f7cdc9a81adc7f03d07ab121c6b8433637d9 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png new file mode 100644 index 0000000000000000000000000000000000000000..adb4986f7f26047e65e552c570e3f9e62a2037ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png new file mode 100644 index 0000000000000000000000000000000000000000..801bf97495213f41c2b196b2f170af85b156dd5b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb651372a67eca9de3848baa6b66cac0ee9f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9cf4d6e06b96da9b93608e7a050af71eaa5032 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png new file mode 100644 index 0000000000000000000000000000000000000000..cb250dfc130cc329ae9dc74ddb861e8753d419c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png new file mode 100644 index 0000000000000000000000000000000000000000..4608132f8e4292a3fe0174a65a9a3f2fc428c0e7 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png new file mode 100644 index 0000000000000000000000000000000000000000..f36078d6d832fa757378b72fa0739f66fe781c64 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png new file mode 100644 index 0000000000000000000000000000000000000000..d8bdc2d4a59d0b3c5de0f8c020d30ffc5b2ead7a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1808e80a0e4d055d54b886ecca3ddc8efa64b9a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png new file mode 100644 index 0000000000000000000000000000000000000000..7dafd299b8e48ead7d6f783e5a370e31257e341c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1d5493dd38de810cbfe5e41e54d507b839e9c9 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif new file mode 100644 index 0000000000000000000000000000000000000000..b26dc8bf409987fa624f6dc0cec1c56043e7b37a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png new file mode 100644 index 0000000000000000000000000000000000000000..241fe8546ea2acfdb7baf2c5e66a8af2f0d7b593 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png new file mode 100644 index 0000000000000000000000000000000000000000..8c06945a1790bb0a741b330fe0a9170dd2a3a92d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png new file mode 100644 index 0000000000000000000000000000000000000000..45be809bdb14e8badfaac2dc8e2486864d29f763 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7fc25c17990998ba263a8525e6a110794c0d87 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png new file mode 100644 index 0000000000000000000000000000000000000000..5eecca641660f12e3ad2ba7b97b97eca253a4acf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png new file mode 100644 index 0000000000000000000000000000000000000000..241fe8546ea2acfdb7baf2c5e66a8af2f0d7b593 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png new file mode 100644 index 0000000000000000000000000000000000000000..5d649492978121a484c2a7a55d4548384c919149 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png new file mode 100644 index 0000000000000000000000000000000000000000..4f115a17e671fa21da2d44cd82bf7b0f3c70c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbe07731306eff949ff7ced4dd7eb4a374c8310 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png new file mode 100644 index 0000000000000000000000000000000000000000..72a515c8b425037a4307ef1b16def3e528aab4a0 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7fc25c17990998ba263a8525e6a110794c0d87 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png new file mode 100644 index 0000000000000000000000000000000000000000..657eee10e270eb448fc7f7f4b24b18134a42d5dc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbe07731306eff949ff7ced4dd7eb4a374c8310 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png new file mode 100644 index 0000000000000000000000000000000000000000..e764c43599592d821c403aac0d3fa40d9edd22e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed5759714b99dc039faab67acdfe6d67bfc6ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png new file mode 100644 index 0000000000000000000000000000000000000000..138e011909c2d4738f3cd9671a79ea0c37cb5b87 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png new file mode 100644 index 0000000000000000000000000000000000000000..defc3c9eb037c06b894ee2e30563facb8c8375ab Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png new file mode 100644 index 0000000000000000000000000000000000000000..45be809bdb14e8badfaac2dc8e2486864d29f763 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png new file mode 100644 index 0000000000000000000000000000000000000000..5eecca641660f12e3ad2ba7b97b97eca253a4acf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png new file mode 100644 index 0000000000000000000000000000000000000000..563ce2878d24a7fa46044f201433d759c3fa9001 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png new file mode 100644 index 0000000000000000000000000000000000000000..801bf97495213f41c2b196b2f170af85b156dd5b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png new file mode 100644 index 0000000000000000000000000000000000000000..160278c82fcdf310c796609d5ee29a2a4869af9e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png new file mode 100644 index 0000000000000000000000000000000000000000..83b7a51accdda21d21a39e5e9d917d75811cb496 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b4b42aecaef72ed4a08b3566a895b3f9b12343 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b8bdc7fc7cd417340bbcda6845fd7de0098930 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png new file mode 100644 index 0000000000000000000000000000000000000000..92a309337be0e2f4c49d0484dab0ffd19584b534 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fd4aff2fb6b7a32fcb8af41a84fbf57c26d035 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png new file mode 100644 index 0000000000000000000000000000000000000000..c1803b711d45a86552a2be4099424206a1561534 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8582f58ed05f9ac3b8962f82d8565d1f580f6c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif new file mode 100644 index 0000000000000000000000000000000000000000..38502c83c52aa9229da69d638e4b9b1f5a35009b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png new file mode 100644 index 0000000000000000000000000000000000000000..e764c43599592d821c403aac0d3fa40d9edd22e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png new file mode 100644 index 0000000000000000000000000000000000000000..138e011909c2d4738f3cd9671a79ea0c37cb5b87 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png new file mode 100644 index 0000000000000000000000000000000000000000..088d5a479cc188332bb7295b31aea277897faca8 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png new file mode 100644 index 0000000000000000000000000000000000000000..10059591af349daced4bf7abeb009209a3e90f1d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png new file mode 100644 index 0000000000000000000000000000000000000000..83b7a51accdda21d21a39e5e9d917d75811cb496 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3966d0abb39044241ee174a126fcf919f402d98 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png new file mode 100644 index 0000000000000000000000000000000000000000..84d835e7feeac31e42c1a53670ef6c999ea4bfe2 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b4b42aecaef72ed4a08b3566a895b3f9b12343 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e245a5c576e92810baacaa09af99f108a010a9 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png new file mode 100644 index 0000000000000000000000000000000000000000..defc3c9eb037c06b894ee2e30563facb8c8375ab Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb1361bd9aded6d58d51ae771558989977a0608 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png new file mode 100644 index 0000000000000000000000000000000000000000..1330e2e2a6395703f9c3747252c1e0a69ae6f4f0 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png new file mode 100644 index 0000000000000000000000000000000000000000..071919ed3a638630f33a337f920ae2e60c9c21bc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png new file mode 100644 index 0000000000000000000000000000000000000000..26fb5384338291f3eb372abd526f0727ce759bdc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png new file mode 100644 index 0000000000000000000000000000000000000000..50726d3e461d7a5dbfec674899fee603aaf41bee Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png new file mode 100644 index 0000000000000000000000000000000000000000..af02181de0d07d5311b09c8d05c2a018e6e5b4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png new file mode 100644 index 0000000000000000000000000000000000000000..657eee10e270eb448fc7f7f4b24b18134a42d5dc Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png new file mode 100644 index 0000000000000000000000000000000000000000..cb250dfc130cc329ae9dc74ddb861e8753d419c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png new file mode 100644 index 0000000000000000000000000000000000000000..b2728fd1b4e050edddf499398b44a7e3aa634109 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png new file mode 100644 index 0000000000000000000000000000000000000000..c1803b711d45a86552a2be4099424206a1561534 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b8bdc7fc7cd417340bbcda6845fd7de0098930 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png new file mode 100644 index 0000000000000000000000000000000000000000..22e84d1b8951b163748a079b6d1d302148d3b6bb Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png new file mode 100644 index 0000000000000000000000000000000000000000..945862898489d8e008e94abbcd691aa307b18d06 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7218eb57566d86457a9fbd4a8ed0f0dd490c3f Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cd637e5bf9db13e3334ca00413e3a91412c813 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png new file mode 100644 index 0000000000000000000000000000000000000000..22e84d1b8951b163748a079b6d1d302148d3b6bb Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png new file mode 100644 index 0000000000000000000000000000000000000000..088d5a479cc188332bb7295b31aea277897faca8 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png new file mode 100644 index 0000000000000000000000000000000000000000..10059591af349daced4bf7abeb009209a3e90f1d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png new file mode 100644 index 0000000000000000000000000000000000000000..b2728fd1b4e050edddf499398b44a7e3aa634109 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e446b213816e4db8d67a9898da1afa7b8226ad Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png new file mode 100644 index 0000000000000000000000000000000000000000..d3db21e0e3da6d8663f59b2ddabd9e50d6eb1e6a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png new file mode 100644 index 0000000000000000000000000000000000000000..4608132f8e4292a3fe0174a65a9a3f2fc428c0e7 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cd637e5bf9db13e3334ca00413e3a91412c813 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb651372a67eca9de3848baa6b66cac0ee9f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png new file mode 100644 index 0000000000000000000000000000000000000000..5d649492978121a484c2a7a55d4548384c919149 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png new file mode 100644 index 0000000000000000000000000000000000000000..af02181de0d07d5311b09c8d05c2a018e6e5b4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7218eb57566d86457a9fbd4a8ed0f0dd490c3f Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png new file mode 100644 index 0000000000000000000000000000000000000000..4f115a17e671fa21da2d44cd82bf7b0f3c70c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png new file mode 100644 index 0000000000000000000000000000000000000000..bc093379e122dcac29c4c8d04560d26bfc23d472 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png new file mode 100644 index 0000000000000000000000000000000000000000..50726d3e461d7a5dbfec674899fee603aaf41bee Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png new file mode 100644 index 0000000000000000000000000000000000000000..294b32cf04462b04243afb828199be9b95e6dd17 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png new file mode 100644 index 0000000000000000000000000000000000000000..945862898489d8e008e94abbcd691aa307b18d06 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ddc678b5a74f1e5ae78ba6a9c35618f31a589 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb1361bd9aded6d58d51ae771558989977a0608 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680230.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680230.png new file mode 100644 index 0000000000000000000000000000000000000000..58293d5e874f2aa36ecaf7282ca9e4736318092f Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680230.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680236.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680236.png new file mode 100644 index 0000000000000000000000000000000000000000..bc28f5056c679e189543c8ad6fba67fb56db7655 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680236.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680240.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680240.png new file mode 100644 index 0000000000000000000000000000000000000000..56d32d4cd371c5374b133cb81c9c077aaf7b110d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111680240.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840132.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840132.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcb0c5e259b3f8d7375c21712249c1e847edd67 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840132.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840136.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840136.png new file mode 100644 index 0000000000000000000000000000000000000000..309d1c46f8bc396df5eaed381a5ffa2f0389d602 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001111840136.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127125270.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127125270.png new file mode 100644 index 0000000000000000000000000000000000000000..43c345e521bd9c87a9fb6da469548716cd20f918 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127125270.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127284926.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127284926.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa7ed21c03b072e182249f928b9929d0869cd5d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001127284926.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001147417424.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001147417424.png new file mode 100644 index 0000000000000000000000000000000000000000..66d73108f4d5721cfc46ad9062d4b77387e67796 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001147417424.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240091.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240091.png new file mode 100644 index 0000000000000000000000000000000000000000..e370a44cf043fc34bd8891f57faad2cd2ca05707 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240091.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240095.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240095.png new file mode 100644 index 0000000000000000000000000000000000000000..9c43caf5fdfd466eafc37b793f509a6bde2b885d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240095.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240097.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240097.png new file mode 100644 index 0000000000000000000000000000000000000000..b54dbc2391d1a8f16312dd02dc3d65a35ea2626f Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158240097.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360079.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360079.png new file mode 100644 index 0000000000000000000000000000000000000000..0d22570503febc7a7dcba0d1e870f49f32fe489a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360079.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360085.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360085.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5e360f249a2002ba68ad9b94bd7f66f5d6aab1 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001158360085.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001169582302.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001169582302.gif new file mode 100644 index 0000000000000000000000000000000000000000..391353977d32956cde03890e501d11766dae2648 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001169582302.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001173164777.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001173164777.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4322d20ad887573ad85958bc181a1be0f85f1c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001173164777.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756438.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756438.gif new file mode 100644 index 0000000000000000000000000000000000000000..5eb149620499c0d1d363d274ad88a741095fc922 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756438.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756580.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756580.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a297661641d1714ebc95116592a97a693293e0a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756580.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756776.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756776.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1038b5da74612ac1911e1dae9d3a1de24ee46c7 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756776.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756860.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756860.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1288776a8086fbb9e66691b0e882784db243aba Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174756860.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174916742.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174916742.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7779b378c80842817091bedf62d74378bfff055 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001174916742.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175075286.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175075286.gif new file mode 100644 index 0000000000000000000000000000000000000000..90898288928277467db40c5eb11b4ff7ae082e6e Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175075286.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175235138.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175235138.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cfb969baf3a36e231a311ca11ca538c248f6da1 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001175235138.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001182200571.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001182200571.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bd96de03ca927b9d168cdbe99fa7f3f96472f3 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001182200571.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001183709904.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001183709904.png new file mode 100644 index 0000000000000000000000000000000000000000..fb34869ae9a78d655a30e62e1936840d0aa6bb4d Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001183709904.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771358.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771358.gif new file mode 100644 index 0000000000000000000000000000000000000000..c76bef26e0b11311f02233ff17ca476ef470798a Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771358.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771430.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771430.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a815c6f3db9654b71cc1d11821eab521ca7aeee Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188771430.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188931396.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188931396.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5e2ed34cf960792ca65ce6d9197ac0fc5d49f8c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001188931396.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189088264.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189088264.gif new file mode 100644 index 0000000000000000000000000000000000000000..688faa61583561ccb4e54daa04a3ac6a466245ac Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189088264.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189089950.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189089950.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb0c760faaf917a6935af461e0094fd8e7b8e85b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189089950.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189098638.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189098638.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ba578c8480834de8798cd311444c0499e1f0da5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189098638.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189248178.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189248178.gif new file mode 100644 index 0000000000000000000000000000000000000000..74ac9966962b430a0a03e68cf4f39bcfae4cc280 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189248178.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189249862.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189249862.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1839308d0fdde50aefd4c818d30ea82c49b6ca6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001189249862.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214437889.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214437889.png new file mode 100644 index 0000000000000000000000000000000000000000..fde616c73000d3f58fd98eea59088177221127a5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214437889.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214948035.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214948035.png new file mode 100644 index 0000000000000000000000000000000000000000..37ae5324808a0ab50f210907ca65a09e4456a371 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001214948035.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217008255.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217008255.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e38a4068976c9b5e298ff33ad4cfc711de4b2a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217008255.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217168141.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217168141.gif new file mode 100644 index 0000000000000000000000000000000000000000..f470f5261becb6c2d7b30f691a0794db2b1feb93 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001217168141.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316305.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316305.gif new file mode 100644 index 0000000000000000000000000000000000000000..365dbc42e583335f32de863120fd80ae0e7d59e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316305.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316655.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316655.gif new file mode 100644 index 0000000000000000000000000000000000000000..16a2d3f912b23349a5c416e5c5b74f4fd05a12aa Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220316655.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396251.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396251.gif new file mode 100644 index 0000000000000000000000000000000000000000..b7808565202cf12474f1282e67fde3a9c85d0e9c Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396251.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396499.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396499.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff991f2899c847c433e41ccafd6798a386540369 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220396499.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220554911.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220554911.gif new file mode 100644 index 0000000000000000000000000000000000000000..3fe0cd60d60a0c5d29c2625ebade3d8b0bd0cdf8 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220554911.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220634677.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220634677.png new file mode 100644 index 0000000000000000000000000000000000000000..664e50e404e5e7f6e4c4823bf1099391bfa45e33 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220634677.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635011.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635011.gif new file mode 100644 index 0000000000000000000000000000000000000000..d669cf40b97891ba3853be28574dceae172fe138 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635011.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635059.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635059.gif new file mode 100644 index 0000000000000000000000000000000000000000..27f8177c1c626565ce53f409bbf5a4e2f7cdba01 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220635059.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220778205.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220778205.png new file mode 100644 index 0000000000000000000000000000000000000000..62c786d7dacd69bae17ebe4074a2d429cd7f6851 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220778205.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220856725.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220856725.png new file mode 100644 index 0000000000000000000000000000000000000000..cc39aec87bb14a36eb6214a2ef39d45c631d4a2b Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001220856725.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234009343.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234009343.gif new file mode 100644 index 0000000000000000000000000000000000000000..20b525e82ccdead4414f89e2e226992bc85e13c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234009343.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234011019.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234011019.gif new file mode 100644 index 0000000000000000000000000000000000000000..24f00c9f1aa6ec431a355f5dd2d88b920607cd05 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234011019.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234129289.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234129289.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dff7c90963c2e9a76aa63dbb434b9c55a747fba Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234129289.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234130975.png b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234130975.png new file mode 100644 index 0000000000000000000000000000000000000000..21d56ef14b92d136e304c4bae6ab8b1f447557bb Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234130975.png differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234287779.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234287779.gif new file mode 100644 index 0000000000000000000000000000000000000000..2398192bc5df690246dad3edfb82afe618b35dfd Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234287779.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289455.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289455.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6296483cbe2994e36e97d422588f3a9156b56eb Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289455.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289465.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289465.gif new file mode 100644 index 0000000000000000000000000000000000000000..b374c821e0e426b0e50e33910f33582e8b283ac9 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234289465.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234327855.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234327855.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0e9d88f7ccf69a208bdf59ab5bd9a3dee2426f6 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234327855.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329527.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329527.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ea0034e22041bd7fe8c5f73e655ddf367a8d5d5 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329527.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329539.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329539.gif new file mode 100644 index 0000000000000000000000000000000000000000..f3e6017b6daddc0be529486e0bfaf8b39749e38f Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234329539.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234342189.gif b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234342189.gif new file mode 100644 index 0000000000000000000000000000000000000000..61571b390492f0116ceec215b03d261d2ce41139 Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/ui/figures/zh-cn_image_0000001234342189.gif differ diff --git a/website/docs/.vuepress/public/images/application-dev/usb/figures/zh-cn_image_0000001237821727.png b/website/docs/.vuepress/public/images/application-dev/usb/figures/zh-cn_image_0000001237821727.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bc068e8edca56fafa47648f6db797120d71fad Binary files /dev/null and b/website/docs/.vuepress/public/images/application-dev/usb/figures/zh-cn_image_0000001237821727.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure1.png b/website/docs/.vuepress/public/images/contribute/figures/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0eac3c0daa1660c3c1847035b0ad8ea9d45720 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure1.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure10.png b/website/docs/.vuepress/public/images/contribute/figures/figure10.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5824cd5b98886582f53f395316bdbd9c27ffc6 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure10.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure11.png b/website/docs/.vuepress/public/images/contribute/figures/figure11.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1a67252e6301e48fc9b576f560e4d850df9aec Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure11.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure12.png b/website/docs/.vuepress/public/images/contribute/figures/figure12.png new file mode 100644 index 0000000000000000000000000000000000000000..6859a80da3ff1375f28f42c2a51c975e9cce5384 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure12.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure2.png b/website/docs/.vuepress/public/images/contribute/figures/figure2.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d353faede88c88691655cf64830d21dbaf83d8 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure2.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure3.png b/website/docs/.vuepress/public/images/contribute/figures/figure3.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd920a13ebb4d7855986628b42d1c2888287132 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure3.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure4.png b/website/docs/.vuepress/public/images/contribute/figures/figure4.png new file mode 100644 index 0000000000000000000000000000000000000000..6c78ea5fbd890e99244ec966e0e73705cd0d2f73 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure4.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure5.png b/website/docs/.vuepress/public/images/contribute/figures/figure5.png new file mode 100644 index 0000000000000000000000000000000000000000..882998e48ed988005dd36b06a65b7d3fd87340e9 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure5.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure7.png b/website/docs/.vuepress/public/images/contribute/figures/figure7.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5d50743d17890279cea71061708c2122f933ab Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure7.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure8.png b/website/docs/.vuepress/public/images/contribute/figures/figure8.png new file mode 100644 index 0000000000000000000000000000000000000000..56e09890a0bb839ab66ca59dea9f6289bdd1061e Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure8.png differ diff --git a/website/docs/.vuepress/public/images/contribute/figures/figure9.png b/website/docs/.vuepress/public/images/contribute/figures/figure9.png new file mode 100644 index 0000000000000000000000000000000000000000..3663b39f63fe77bbf23e41786853eb30a25619d4 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/figures/figure9.png differ diff --git a/website/docs/.vuepress/public/images/contribute/template/figures/figure01.png b/website/docs/.vuepress/public/images/contribute/template/figures/figure01.png new file mode 100644 index 0000000000000000000000000000000000000000..62e5ec7c6248ed9219503c85b076dc9a22da6c78 Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/template/figures/figure01.png differ diff --git a/website/docs/.vuepress/public/images/contribute/template/figures/figure02.png b/website/docs/.vuepress/public/images/contribute/template/figures/figure02.png new file mode 100644 index 0000000000000000000000000000000000000000..37b1f5215e362c156ca5de27145c3711cc14083b Binary files /dev/null and b/website/docs/.vuepress/public/images/contribute/template/figures/figure02.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..9b140042ffdfff77a76cc69814a0217af2ddc5df Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..da94f3b486edb6b269ef341b12b1816f23036c32 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADC\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\345\220\257\345\212\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\345\220\257\345\212\250\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa9044c2e0d345da6f52ac4209d8dba8bf357f79 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\345\220\257\345\212\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\216\247\345\210\266\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\216\247\345\210\266\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f43c4f6510359d84d11c056ec7b0bcde705cf3c Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\216\247\345\210\266\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\222\255\346\224\276\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\222\255\346\224\276\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..66891974d7202a641a268b611066b1ee988fe162 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/ADM\346\222\255\346\224\276\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/Audio\346\241\206\346\236\266\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/Audio\346\241\206\346\236\266\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..07b4c54a4100620f2d469922c6979ba03acea654 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/Audio\346\241\206\346\236\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/CSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/CSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" new file mode 100755 index 0000000000000000000000000000000000000000..1407bc0ced6942501039f8fe041efc722882fbaa Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/CSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/HAL\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HAL\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..eb3cc69a0d77910e74f38403cfd0ec3b1e727994 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HAL\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..fa578f83d99f47e868312dad99d6b38fa960e794 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..9c1618562e33dd6fd08d2ec7f48454a43c1e1541 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/HDMI\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..40c7088de596e771921861c727d4813f686eda40 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..08942f92cdc1c9fa6c0442537525cfcba90254a7 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/I3C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/MIPI-CSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/MIPI-CSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..1e5945dde90c375947137d8b5e9161018c0700f9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/MIPI-CSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/device-dev/driver/figures/logic-view-of-camera-hal-zh.png b/website/docs/.vuepress/public/images/device-dev/driver/figures/logic-view-of-camera-hal-zh.png new file mode 100755 index 0000000000000000000000000000000000000000..772356a3efede5b1b8b45b27270ed79fcf9e9d01 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/driver/figures/logic-view-of-camera-hal-zh.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2761.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2761.png" new file mode 100644 index 0000000000000000000000000000000000000000..37afe238749f8f77174cb84951f14f4862a3b49e Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2761.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2762.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2762.png" new file mode 100644 index 0000000000000000000000000000000000000000..713903a37d72853cb7b487772ff71454df9abe5d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\345\274\200\345\217\221\346\265\201\347\250\213\345\233\2762.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..d75a35cfb12f998856d266f1d8ff0d2e5d9cea75 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..f0ddcee70022751a43b9ef1da145c68094da0eab Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..b5b755cf9753512eb3d3805334a9a30b5e05c90d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/driver/figures/\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\345\212\240\350\275\275\350\277\207\347\250\213.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\345\212\240\350\275\275\350\277\207\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..23bc27b7de00aeb9d1ff9fa349c1be4fe4559b18 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\345\212\240\350\275\275\350\277\207\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\351\223\276\346\216\245\350\277\207\347\250\213.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\351\223\276\346\216\245\350\277\207\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..dc43aa951c78b8c9d495ab3aa6d8799309e103c9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/ELF\346\226\207\344\273\266\347\232\204\351\223\276\346\216\245\350\277\207\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/LiteOS-M\345\206\205\346\240\270\345\212\250\346\200\201\345\212\240\350\275\275\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/LiteOS-M\345\206\205\346\240\270\345\212\250\346\200\201\345\212\240\350\275\275\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..a460e8dbf1953929bb31be3323fc716f2cdaf9ad Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/LiteOS-M\345\206\205\346\240\270\345\212\250\346\200\201\345\212\240\350\275\275\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8920829c4f329643974a00a47775aac7de4ce25 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/\345\257\274\345\207\272\347\232\204\347\254\246\345\217\267\350\241\250\344\277\241\346\201\257.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\345\257\274\345\207\272\347\232\204\347\254\246\345\217\267\350\241\250\344\277\241\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..87d6aaf4a5f1d7f25c2ee2c964931c71388b043d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\345\257\274\345\207\272\347\232\204\347\254\246\345\217\267\350\241\250\344\277\241\346\201\257.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/kernel/figure/\346\226\207\344\273\266\347\263\273\347\273\237\347\232\204\346\200\273\344\275\223\347\273\223\346\236\204.png" "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\346\226\207\344\273\266\347\263\273\347\273\237\347\232\204\346\200\273\344\275\223\347\273\223\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..d24ef3ce327be6ce5f6c685a7f27fb354b732778 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/kernel/figure/\346\226\207\344\273\266\347\263\273\347\273\237\347\232\204\346\200\273\344\275\223\347\273\223\346\236\204.png" differ diff --git a/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_board_make_menuconfig.png b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_board_make_menuconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..4269a1c86e1662fb4ddd54cd85ab5608bf3e6202 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_board_make_menuconfig.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_env.png b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_env.png new file mode 100644 index 0000000000000000000000000000000000000000..10fa486ec6f56f490a19d5021cb7b309b372ddb9 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_env.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_set.png b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_set.png new file mode 100644 index 0000000000000000000000000000000000000000..6cadca71b5dac5a945c16754085631dab3f9a626 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_hb_set.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_newlib_make_menuconfig.png b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_newlib_make_menuconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..2b844544b987abcb8346e56a27098ff150707705 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/porting/figure/bes2600_newlib_make_menuconfig.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1-11.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1-11.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed1535a6bc23dc5bd02fbd5a3f1392f46ad8d83 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1-11.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..791dfeae272070b7e285ea3070ebd3b1e9100eb5 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/1.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/10.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7f6f4766c54f6ca1e0057fc8f869785cc63e56 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/10.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/2021-01-27_170334-10.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/2021-01-27_170334-10.png new file mode 100644 index 0000000000000000000000000000000000000000..5b573a4ddfe89fe25cb1b567736823244fdb9e97 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/2021-01-27_170334-10.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3-0.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3-0.png new file mode 100644 index 0000000000000000000000000000000000000000..f354b2d27ce06bd5af6a8702c0894bf5c50a97bb Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3-0.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..91f3fa22153f501e308fab46f92f2e95995f1917 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..6975fb5fef92e35dec2de84b7e7035a39794bdf4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/4.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5fa2829949e59d498da9dd5ff1f48fa0647cf1 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/4.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/5.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a76a6922315fe595ae4214331ce322766b3b48 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/5.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..edb1711f3c1fa906940d8cbb8d8fcdeb2badd2b6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..3e0ff2fdbfbaca179f1320b5d53ebf755d1c84a3 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..ffdeca24f4b017d7a35fc96999d04faaa09972e5 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..5086d2b4518cfea4040f3cc243abb2e6087af350 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..9e53432ce41e67ee3e93e96d78262a6ace41d383 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap22.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap22.png new file mode 100644 index 0000000000000000000000000000000000000000..d94579cb7ff78a40cef6cf5d1945e742a9551e8b Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap22.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap23.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap23.png new file mode 100644 index 0000000000000000000000000000000000000000..92e51762a2dcd636135f6e7856073a5b8aecd1d6 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap23.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap24.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap24.png new file mode 100644 index 0000000000000000000000000000000000000000..d4996e347660921fc3f723e5b48942f1fd6636f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/Snap24.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1-4.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1-4.png new file mode 100644 index 0000000000000000000000000000000000000000..208a4fbace342514f59f0000c4d50f5dc9321f0f Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1-4.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1.png new file mode 100644 index 0000000000000000000000000000000000000000..208a4fbace342514f59f0000c4d50f5dc9321f0f Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/changjian1.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3516-import-projects.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3516-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..6c575b3495a0503e463a71f2b50766bc2f3e1b94 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3516-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3518-import-projects.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3518-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..d54cd737e32311492dc2058251e7cb8acf905fb5 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3518-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3861-import-projects.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3861-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..6eaa9eb2450ef15e7124df610712fc797c548351 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/hi3861-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project-confirm.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..27fe1d133a31b275a2788cab1f5b37dd3450a7df Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project-confirm.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba534eaf39165891a31c7837ae7ff4126f6414c Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/import-project.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/record-the-serial-port-number.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/record-the-serial-port-number.png new file mode 100644 index 0000000000000000000000000000000000000000..09f33e3992c0c1d78713eea949e4b9a19f5802ec Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/record-the-serial-port-number.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-helloworld.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..da22f3989b1daa362c7471789cdaa94ffb862f75 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-helloworld.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-run-configuration.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-run-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..504da23ba456a9c377525e22c4630361286b5dd7 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/rk3568-run-configuration.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/setenv-bootargs.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/setenv-bootargs.png new file mode 100644 index 0000000000000000000000000000000000000000..802cce4e760102043f177cb2fa71e8bd16539ba1 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/setenv-bootargs.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png new file mode 100644 index 0000000000000000000000000000000000000000..0bbff7eb0b5ab322e8995acf2b86d93038c8530c Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png new file mode 100644 index 0000000000000000000000000000000000000000..29a273e5115ffd7a0724cde58215ffb79827576c Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png new file mode 100644 index 0000000000000000000000000000000000000000..dee491aaa290b425a4a6cd9e4aee61b3b05cc3dc Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png new file mode 100644 index 0000000000000000000000000000000000000000..baac7b26450b8bc195a0db0bb3bb41119c0d9828 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png new file mode 100644 index 0000000000000000000000000000000000000000..c5548cb227bd024b49aa3adba0a20869581448e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd316dfd5a64c873682bf865a79ec1f2354cc40 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png new file mode 100644 index 0000000000000000000000000000000000000000..67d8044b72056d4ed6230ccc4ad99d5e954596b6 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ac531b8265f265e2bd25518b212143fc61e4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png new file mode 100644 index 0000000000000000000000000000000000000000..c846be0d2767953df4a3ac78408963f252af040d Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png new file mode 100644 index 0000000000000000000000000000000000000000..7de3c25e7ef2abc8d85d8bc945249f571f6bf0c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png new file mode 100644 index 0000000000000000000000000000000000000000..24fb00fddc1213037e63e7674b4d2ce1bf6118f6 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png new file mode 100644 index 0000000000000000000000000000000000000000..527fe8b9836daf35c8300e0e84bdb2ca390f85a5 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png new file mode 100644 index 0000000000000000000000000000000000000000..1b002b247b704150040e90ecb149d782ba8db3a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png new file mode 100644 index 0000000000000000000000000000000000000000..84d42fffbd87d0e719c69b6deda9e6c5e2b2db13 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc2bbf53d65b0c66f07b330aa8881c5194328bd Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png new file mode 100644 index 0000000000000000000000000000000000000000..68b1730cb6d1b91b6e364c7301d6dcc4c9976ec7 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaf25e47e2e47ecad8aebe463aeccdf1d8bf85e Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png new file mode 100644 index 0000000000000000000000000000000000000000..99ed8317b5cee8e5e9d460ff31d5c8a1a2fe343e Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba77b7feaca23043e71171824cdead7c4f8f108 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png new file mode 100644 index 0000000000000000000000000000000000000000..c93b7b610138e91c0b6b171cb515f540163e731b Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png new file mode 100644 index 0000000000000000000000000000000000000000..a8037d1ebc95a3c9383d87678981b3ae5ccc8144 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png new file mode 100644 index 0000000000000000000000000000000000000000..da22f3989b1daa362c7471789cdaa94ffb862f75 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png new file mode 100644 index 0000000000000000000000000000000000000000..35a95f501f5e3c5c8ebf187e7f29e6af0a4566b0 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png new file mode 100644 index 0000000000000000000000000000000000000000..9f418473587db76e56981c0f384bf4b8634e3911 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4fd618860ca9f79e9bdc39436c3b2f9cdb72de Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png new file mode 100644 index 0000000000000000000000000000000000000000..1b002b247b704150040e90ecb149d782ba8db3a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png new file mode 100644 index 0000000000000000000000000000000000000000..39ae26ac8f3254d023d6b90a9f9bb8a8ff0c940b Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png new file mode 100644 index 0000000000000000000000000000000000000000..8d396bf2fc7b36362a95c6719d202b2f057e4a46 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png new file mode 100644 index 0000000000000000000000000000000000000000..764643ce134811551984284ed5ec6b60943f8ea4 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba77b7feaca23043e71171824cdead7c4f8f108 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png new file mode 100644 index 0000000000000000000000000000000000000000..6c862cc279d2936ddec4ecda0a23e1d55a63cbee Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png new file mode 100644 index 0000000000000000000000000000000000000000..07914f4f34921b06819ceb49cf63366dcc7f8502 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d98bd6deb22fc7814a42630b8565d9b5979659 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png new file mode 100644 index 0000000000000000000000000000000000000000..5a709092da504fbb090ad8d44938e435712bc0eb Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png new file mode 100644 index 0000000000000000000000000000000000000000..6117c80b45f64348ad307e64723495cdc8c45cb1 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png new file mode 100644 index 0000000000000000000000000000000000000000..764643ce134811551984284ed5ec6b60943f8ea4 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png new file mode 100644 index 0000000000000000000000000000000000000000..579d6e190d4824cb866f90f2f3e72c4493aa6f4c Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png new file mode 100644 index 0000000000000000000000000000000000000000..c6507f28b980b84c65102aa844e93f806cb490a9 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" new file mode 100644 index 0000000000000000000000000000000000000000..afc9028fbb61db82e6f1384032bb32f56ed2ec35 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..afc9028fbb61db82e6f1384032bb32f56ed2ec35 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c1f60638087d0fe56127f2f842244355afad85f Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c1f60638087d0fe56127f2f842244355afad85f Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..0eee1bbff2e54816d6be05f7f3972a83f615884d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..0eee1bbff2e54816d6be05f7f3972a83f615884d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" new file mode 100644 index 0000000000000000000000000000000000000000..c735ae362e184083329cdf710289a169ad5625d4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c735ae362e184083329cdf710289a169ad5625d4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfa0ceb21f5a11d459b93721f512309c9d6da2ac Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfa0ceb21f5a11d459b93721f512309c9d6da2ac Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..cb0aff9ea08110a305f663126f5e26f150f89344 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..31c5a26705cd1da6cf9cb6f3bb356994e4ecc22e Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" new file mode 100644 index 0000000000000000000000000000000000000000..548e03da4b76123cb67d41cbd1de4a0f33f5ef4b Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..548e03da4b76123cb67d41cbd1de4a0f33f5ef4b Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" new file mode 100644 index 0000000000000000000000000000000000000000..88cba0537b5431aa266364abbe19162130f4e3ca Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..88cba0537b5431aa266364abbe19162130f4e3ca Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..c453bf36bea44aad382c65cd18ea0d8abbead981 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" new file mode 100644 index 0000000000000000000000000000000000000000..775ce6fe99d4894b39f2bdd613097dcaf11a37b2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..775ce6fe99d4894b39f2bdd613097dcaf11a37b2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/HiTrace\345\272\224\347\224\250\345\234\272\346\231\257.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/HiTrace\345\272\224\347\224\250\345\234\272\346\231\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..dddc8365b2905b3522d9692531d773817bb1bcab Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/HiTrace\345\272\224\347\224\250\345\234\272\346\231\257.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/USB\346\234\215\345\212\241\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/USB\346\234\215\345\212\241\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..3aaf512454de1bee6a16925ec2346f894c5b724a Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/USB\346\234\215\345\212\241\346\236\266\346\236\204\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001115980740.png b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001115980740.png new file mode 100644 index 0000000000000000000000000000000000000000..4398ed073145d97228df055f4b6eb9137482619f Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001115980740.png differ diff --git a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001192123772.png b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001192123772.png new file mode 100755 index 0000000000000000000000000000000000000000..6b0ac3897c71d9e3ad8fd0194bbd95d53cd04445 Binary files /dev/null and b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/zh-cn_image_0000001192123772.png differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\233\276\357\274\210\350\267\250\350\256\276\345\244\207-\350\267\250\350\277\233\347\250\213\345\220\214\346\255\245\350\260\203\347\224\250\357\274\211.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\233\276\357\274\210\350\267\250\350\256\276\345\244\207-\350\267\250\350\277\233\347\250\213\345\220\214\346\255\245\350\260\203\347\224\250\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..bec87564b4026335bff09e48f6f128076b76c5a0 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\233\276\357\274\210\350\267\250\350\256\276\345\244\207-\350\267\250\350\277\233\347\250\213\345\220\214\346\255\245\350\260\203\347\224\250\357\274\211.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\272\217\345\210\227\345\233\276.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\272\217\345\210\227\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..fba8cd412fec208991aa70e2f026edfcb9b045b6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\345\272\217\345\210\227\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\346\200\247\350\203\275\350\200\227\346\227\266\345\210\206\345\270\203.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\346\200\247\350\203\275\350\200\227\346\227\266\345\210\206\345\270\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..ae69bbc6e37310dc0e1808a270292a7872de2b26 Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\344\270\232\345\212\241\350\260\203\347\224\250\346\265\201\347\250\213\346\200\247\350\203\275\350\200\227\346\227\266\345\210\206\345\270\203.png" differ diff --git "a/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\345\220\214\346\255\245\351\200\232\344\277\241\345\244\204\347\220\206.png" "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\345\220\214\346\255\245\351\200\232\344\277\241\345\244\204\347\220\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..585d8aac7b4857645b78ab11effbe900e5350f9d Binary files /dev/null and "b/website/docs/.vuepress/public/images/device-dev/subsystems/figure/\345\220\214\346\255\245\351\200\232\344\277\241\345\244\204\347\220\206.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/figures/zh-cn_image_0000001183386164.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/figures/zh-cn_image_0000001183386164.png new file mode 100644 index 0000000000000000000000000000000000000000..0538c11963b2e54fccc57d560831d41ceab82446 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/figures/zh-cn_image_0000001183386164.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/database/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/media/figures/zh-cn_image_0000001182608857.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/media/figures/zh-cn_image_0000001182608857.png new file mode 100755 index 0000000000000000000000000000000000000000..e0777e28838f6d2455233f2068339f8548f50c67 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/media/figures/zh-cn_image_0000001182608857.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/public_sys-resources/icon-note.gif new file mode 100755 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png new file mode 100644 index 0000000000000000000000000000000000000000..85345789b60927729e9243798fe122c64ca92687 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001113808114.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001113808114.png new file mode 100644 index 0000000000000000000000000000000000000000..da3c279ef8812b9d028a1993074430b5a06d50c9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001113808114.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001115066116.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001115066116.png new file mode 100644 index 0000000000000000000000000000000000000000..357798e173fa7e3b419cc5990aa0737925e1f7b9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001115066116.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118018088.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118018088.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e1c7bd6773fc5b3ab5b473e28593110f3c820f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118018088.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001152459178.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001152459178.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee6a55e53e57843300bd5ec0cce4a175e97a29e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001152459178.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001155643492.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001155643492.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3afd2b96c1a01b3e966c37e60755d1f179363c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001155643492.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001162463400.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001162463400.png new file mode 100644 index 0000000000000000000000000000000000000000..48239f38c31b907155d7b0501401ca9dd8635d73 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001162463400.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163314102.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163314102.png new file mode 100644 index 0000000000000000000000000000000000000000..286a49def18618c79088deeb49203969ac6ce4c0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163314102.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163472654.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163472654.png new file mode 100644 index 0000000000000000000000000000000000000000..5328a3c1b62eb8281e316d5ae4a6ca11694ec4a2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163472654.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163632602.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163632602.png new file mode 100644 index 0000000000000000000000000000000000000000..10c5cf41ab78ea58c194fe1ed0429352e85a88a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163632602.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163915523.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163915523.png new file mode 100644 index 0000000000000000000000000000000000000000..352eaed40ac96dc5d3bae82591e5c801daaa8d56 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163915523.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163918627.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163918627.png new file mode 100644 index 0000000000000000000000000000000000000000..6967c6b140c7e07003fc4548989ea78d9e5fc940 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163918627.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164417356.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164417356.png new file mode 100644 index 0000000000000000000000000000000000000000..97795b40abbea9f58aabe62dd7643eca208315e3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164417356.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164498191.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164498191.png new file mode 100644 index 0000000000000000000000000000000000000000..30efd063397893ff925743b681f943696f10512b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164498191.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164577336.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164577336.png new file mode 100644 index 0000000000000000000000000000000000000000..1127bbfabc9ef766284eec12c574096f8bb45ac3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164577336.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166582138.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166582138.png new file mode 100644 index 0000000000000000000000000000000000000000..36dc2d05ca4eb23505a73cb0d1606afd3bf844d8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166582138.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166740700.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166740700.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9dc95f14cdc94007dbf04f217d496d49f9318c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001166740700.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png new file mode 100644 index 0000000000000000000000000000000000000000..cb05a7cb0fa33a9d9074f4424a3851478935ff33 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png new file mode 100644 index 0000000000000000000000000000000000000000..469ca774dde99530329d5e7bd62a5a40fb16237b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png new file mode 100644 index 0000000000000000000000000000000000000000..b62a4291cbe98e250fd9dcc65e9f91ba67445575 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png new file mode 100644 index 0000000000000000000000000000000000000000..c44bd561803aa0dc4cafcf0db68bf38f5ba43013 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001202722349.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001202722349.png new file mode 100644 index 0000000000000000000000000000000000000000..99330a4f3ef2978dd6736d96e00c88cea8d25f32 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001202722349.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001207744539.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001207744539.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1269e9e8fb620f8ed6051395c727590e6dc1bc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001207744539.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208006117.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208006117.png new file mode 100644 index 0000000000000000000000000000000000000000..5c576d84b0ca4b369cdaac5aa7de19718628bc37 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208006117.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208210505.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208210505.png new file mode 100644 index 0000000000000000000000000000000000000000..934b69477b4c10140f0cf8198e4248c53bdb0364 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208210505.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208394019.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208394019.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7f5ffb0d59c7ab7a1784bfde775aeccc16a424 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001208394019.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001209817299.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001209817299.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7f5ffb0d59c7ab7a1784bfde775aeccc16a424 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001209817299.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001210018359.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001210018359.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe695d19f2f15a7ce9c941907f17becf0d9b849 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001210018359.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001212062065.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001212062065.png new file mode 100644 index 0000000000000000000000000000000000000000..708b49814e270289c6d1c96520aa6d90ba0edb9c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001212062065.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png new file mode 100644 index 0000000000000000000000000000000000000000..afdab82267fcd7d5eacae76eba500baa3bbecd40 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png new file mode 100644 index 0000000000000000000000000000000000000000..7f99945dc6e30516a6084896b3f146af89dc2f23 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8dd786a91b784794a19f8b2975616912586286 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png new file mode 100644 index 0000000000000000000000000000000000000000..37736ed10ff7cd16907684dfe2c1d6bb19c61d50 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf1ed8cb6d6b6d88b57e533f9efe840afee95b5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121901.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121901.png new file mode 100644 index 0000000000000000000000000000000000000000..9a84c3f66275c8ea2a50b9ba9ab0ead3842274cc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121901.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121902.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121902.png new file mode 100644 index 0000000000000000000000000000000000000000..6bef885f7c487473ca1b329d41c6414735555b42 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121902.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121903.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121903.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3923fef0ad89fa38fa170d2680931d1eb1ea55 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121903.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121904.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121904.png new file mode 100644 index 0000000000000000000000000000000000000000..9250f90cf1e377c8bb33adf9965436ed7ddbadbf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121904.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121905.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121905.png new file mode 100644 index 0000000000000000000000000000000000000000..f278f73fb4cd0dba70cae1835dd7a45d2686038b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121905.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121906.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121906.png new file mode 100644 index 0000000000000000000000000000000000000000..61535cb2fe6b4197e95cff8691fe27973c5ecde8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121906.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121907.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121907.png new file mode 100644 index 0000000000000000000000000000000000000000..32771bf5f9639aa8ebdd1922f8088965404674ca Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000002021121907.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/quick-start/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2cc34bf20dcd27dc9dff6a3eb6eb56dd4809c4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001200913929.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001200913929.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb89772d315b440636e8ceeda928e5db6b34e40 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/figures/zh-cn_image_0000001200913929.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-notice.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/apis/public_sys-resources/icon-notice.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/0.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/0.png new file mode 100644 index 0000000000000000000000000000000000000000..99b8f25e0fe85fdbde44a4eae2fdb208561259e6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/0.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/000000.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/000000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..502180f0903ac8c51440c5bc266b0d60811572c7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/000000.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/001.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/001.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5bac4f696cc84f6e3116483209f51c08e0ad532 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/001.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-2.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e7bc3dec11daa00059d3ec93d77ac15ce357a14 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-2.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-3.gif new file mode 100644 index 0000000000000000000000000000000000000000..1346a2deeab10fd18c60e7ff184bbff436bc528f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1-3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5bd1c300d6de63a6627c1610ec09ddf89aed768 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/1.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11-1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ca939d4de4d330dea962b991362b41ef0aacba9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11-1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..cb270578b22922b3eabadd6801c08ccf6db99a00 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/11.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/111.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/111.png new file mode 100644 index 0000000000000000000000000000000000000000..e0517663d25f8f857ac08dd4bd1c36ad76190663 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/111.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/12.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/12.gif new file mode 100644 index 0000000000000000000000000000000000000000..561e823f7a9eb432e2aedbbf84637f8be40b0337 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/12.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2-4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2-4.gif new file mode 100644 index 0000000000000000000000000000000000000000..82b802bf8c65f080c0d068689dc9e580840c5f55 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2-4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fd8f37b0e522d5925b509def595e5db653c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/2.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/22.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..63e63411d18c5394c103e63d15bb125bc01915d0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/22.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/222.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/222.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ec48b52853bc5eddff3eee7978ef9c313e99aa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/222.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/3.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b370937f36a472829e7a08a4439b4025721b0437 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/3.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/333.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/333.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5ee3a87580dd9f485988467163d3a3ea7e95b6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/333.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4-0.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4-0.gif new file mode 100644 index 0000000000000000000000000000000000000000..1589d8650fa225626fb8dadf085732f92170e40f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4-0.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dc0753ba566436d3b8611f5efce0cadce36b7d0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/444.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/444.png new file mode 100644 index 0000000000000000000000000000000000000000..da8624b6dbff497762753fe8b5786c3d552c78ed Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/444.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/5.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..83d8a2f9864d59fd0c64a03cafcb0bf50432ac92 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/5.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/6.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/6.gif new file mode 100644 index 0000000000000000000000000000000000000000..aacc036cfc90859465a0b3da908a61533b866806 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/6.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/9.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/9.gif new file mode 100644 index 0000000000000000000000000000000000000000..0654ceaa02e5d502239d152e83382df901d7376f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/9.gif differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/AnimationAPI\350\243\201\345\211\252.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/AnimationAPI\350\243\201\345\211\252.gif" new file mode 100644 index 0000000000000000000000000000000000000000..294687cdfb0cf7f2ea34f91c87d0a6394b32bff0 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/AnimationAPI\350\243\201\345\211\252.gif" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/GIF.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/GIF.gif new file mode 100644 index 0000000000000000000000000000000000000000..98bf461673a8f11366755e99b8f59baf7cc282e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/GIF.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/Video_2021-03-26_154549.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/Video_2021-03-26_154549.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4d097a34aef9e583651d11133dff575345f0272 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/Video_2021-03-26_154549.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c85de05a6145492a24a9ded5d2b399776489ecc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-3.gif new file mode 100644 index 0000000000000000000000000000000000000000..86f15fb83d5be7e8ed145d69ed8b869be40c4e45 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-4.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b0d4fd3ea6759b909f1714cdb9b0f6794153d76 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform.gif new file mode 100644 index 0000000000000000000000000000000000000000..e83e2ce11234a97242e1f57204b96568ad248d3d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform2.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c65871bb208133129e46956ecee119276a390a5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform3.gif new file mode 100644 index 0000000000000000000000000000000000000000..b29849bb066b5b5cd870c2b0b0dd1e50b9f90494 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/animate-transform3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/barchart.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/barchart.png new file mode 100644 index 0000000000000000000000000000000000000000..aa4ba3f9fa64250b1b86bd6d39b6a8071d3de1c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/barchart.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/c3.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/c3.png new file mode 100644 index 0000000000000000000000000000000000000000..dca96aeb057ba12dc63365e613007e54dd268a40 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/c3.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/ellipse.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/ellipse.png new file mode 100644 index 0000000000000000000000000000000000000000..d0379dfc66b4d2151dae49beeb8af38c774381aa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/ellipse.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/gauge.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..31c0141d716059519377e1f39b9b8305370f239a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/gauge.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/grid.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d2387c6db849678ae8897878fe3117170ea42a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/grid.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/image-animator.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/image-animator.gif new file mode 100644 index 0000000000000000000000000000000000000000..8321366bdb79b9e6530d53b0f45a6465ae7b967d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/image-animator.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list.png new file mode 100644 index 0000000000000000000000000000000000000000..7933730b5753d05a6f5734cb3d7ebb39aeb5f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list6.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list6.gif new file mode 100644 index 0000000000000000000000000000000000000000..6bc775a4f7b81841450b0650917f76a3cee9945a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/list6.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/menu13.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/menu13.gif new file mode 100644 index 0000000000000000000000000000000000000000..413b6584d5939509e2052d5cf7c35ec307ff759c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/menu13.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/mmmm.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/mmmm.gif new file mode 100644 index 0000000000000000000000000000000000000000..5959ae695322f2e1eda3364d7603ec9d2ca10819 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/mmmm.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/panel6.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/panel6.gif new file mode 100644 index 0000000000000000000000000000000000000000..a61ac61b038539afb5c2e20271a6c9761468c289 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/panel6.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/progress.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/progress.png new file mode 100644 index 0000000000000000000000000000000000000000..7edb3bedb97ee4b203cd35a6ef6642740f410846 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/progress.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sample1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sample1.gif new file mode 100644 index 0000000000000000000000000000000000000000..6168a14aa67c866abf6185ba3a3c2ae9f595153c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sample1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/screenshot.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd4ee663382d41cef4f57b30e646ba423fa84bc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/screenshot.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/slider.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/slider.png new file mode 100644 index 0000000000000000000000000000000000000000..d0167fe6773371fa70d8bf32c3a3953ed1e1455b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/slider.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/smoothOff.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/smoothOff.png new file mode 100644 index 0000000000000000000000000000000000000000..c699e78774fadbd8da8c0cc290e88294d445aa6f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/smoothOff.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sssssss.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sssssss.png new file mode 100644 index 0000000000000000000000000000000000000000..e108f5f8f2e096b319ef5097145ab43f2ad97594 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/sssssss.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tab.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tab.gif new file mode 100644 index 0000000000000000000000000000000000000000..fea6fcac566df71d32643b81579a59bbe4e1b580 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tab.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part1.gif new file mode 100644 index 0000000000000000000000000000000000000000..4731d53600aa7dced61e10ce21505a5086280edd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part2.gif new file mode 100644 index 0000000000000000000000000000000000000000..6107d0c5a64f409759d4c1ba44682996f181c5f2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part3.gif new file mode 100644 index 0000000000000000000000000000000000000000..addf2ea9fc2a9b83b8650382f9b6dc1901f4a229 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-animate-part3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-part1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-part1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ec8cd839cb27361a863f4c770de8053eb32755 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/text-part1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part1.png new file mode 100644 index 0000000000000000000000000000000000000000..79406f279f47e28a360437878959ce07d607b3ff Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part2.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part2.png new file mode 100644 index 0000000000000000000000000000000000000000..f4823452cce3c085af33ebf1675c8517974709b0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part2.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part3.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part3.png new file mode 100644 index 0000000000000000000000000000000000000000..889ef6e963acef24e01d14d363ac52a444298145 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part3.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part4.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part4.png new file mode 100644 index 0000000000000000000000000000000000000000..2a325881b033c685328eb51e9fedcd7e135cbf77 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textPath-part4.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate1.gif new file mode 100644 index 0000000000000000000000000000000000000000..64c013cdb72cacb96a429a4a9cf7cdeac38e783e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate2.gif new file mode 100644 index 0000000000000000000000000000000000000000..640fae7689352208a0680ae4e12635f6e345cbda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate3.gif new file mode 100644 index 0000000000000000000000000000000000000000..044f442002cf25b56b89849a4255ec7583cbfc2a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate4.gif new file mode 100644 index 0000000000000000000000000000000000000000..4da6410ea036e3f7c4eb725ec9ccd220349799d1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/textpath-animate4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part1.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5db977af7a1a2ec2096aa76b5f82a245b832429 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part2.gif new file mode 100644 index 0000000000000000000000000000000000000000..e72fb4ff01bbdf45951799fb20fc7a3ca85dead0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part3.gif new file mode 100644 index 0000000000000000000000000000000000000000..871a368ff3e43f32bdfec427a35024a84e6cb441 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part4.gif new file mode 100644 index 0000000000000000000000000000000000000000..da89f35c1163f16e9eebac8a11c59290d4e2feda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-animate-part4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-part1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-part1.png new file mode 100644 index 0000000000000000000000000000000000000000..245c704bb52935d5683a8d6b2c1e23a5389e4bc5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/tspan-part1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125124.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125124.png new file mode 100644 index 0000000000000000000000000000000000000000..0bdeb353cc2ec200b106de975f1478597e863c49 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125124.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125132.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125132.png new file mode 100644 index 0000000000000000000000000000000000000000..994f8510b56d1f66d8a40dbd0349ca61baf242cb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125132.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125136.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125136.png new file mode 100644 index 0000000000000000000000000000000000000000..280d0df92bf3cfebba6610f6050939ce4d53fb1d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125136.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125162.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125162.png new file mode 100644 index 0000000000000000000000000000000000000000..dfee4f8cddcddd2ada89cb6d7e812fd0739d9cb8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125162.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125202.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125202.png new file mode 100644 index 0000000000000000000000000000000000000000..6fed31434380106e80629feafdb374c7ba68ee51 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125202.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125204.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125204.png new file mode 100644 index 0000000000000000000000000000000000000000..95770e0a80cd7581b8739c852239dff75b60f655 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125204.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125208.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125208.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d5ebbd57bcdd5e5f77001aa6770ff433654be9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125208.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125212.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125212.png new file mode 100644 index 0000000000000000000000000000000000000000..bc43e2bfefbb6cc9fb09bc92ff0740a514dd2ff5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125212.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125220.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125220.png new file mode 100644 index 0000000000000000000000000000000000000000..362c486fa6a7545fd3eaca6cf9da6c3ab56b3136 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125220.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284954.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284954.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa94a7479a1c1ac1294575a7bd0658e5b21fac9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284954.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284958.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284958.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0696a9ade017acbbdfb8812dafdec5d715cac5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284958.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284984.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284984.png new file mode 100644 index 0000000000000000000000000000000000000000..4cef59797fd8b9650c398562ac0b473485a9274b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127284984.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285024.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285024.png new file mode 100644 index 0000000000000000000000000000000000000000..fffc6016e519844a25a096547bc7824f7a3450b0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285024.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285034.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285034.gif new file mode 100644 index 0000000000000000000000000000000000000000..17f4ea3f2983fc9a0ad21238b9345e11aa0318c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285034.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285076.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285076.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecdf0c714fa633f03db339626f51e62318cbf82 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285076.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001150719520.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001150719520.gif new file mode 100644 index 0000000000000000000000000000000000000000..3658d687cad3bdb3f0b06b5ace29d75948e0a613 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001150719520.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588538.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588538.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8f8a0cbb105c4d791bb867771bb9bc1bfbb468 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588538.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588626.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588626.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8094c23fc3f601f4899bac7b148b8309f600d9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588626.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152610806.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152610806.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a47a84d8086ca0806bc958f745f29821c47cc2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152610806.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152833768.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152833768.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c7a300f18ca0f9671cacbc68590834f00ee23a1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152833768.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152834002.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152834002.png new file mode 100644 index 0000000000000000000000000000000000000000..27ee8b6da1ca2a0bd728157bbd750a9cf4b228f7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152834002.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152862510.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152862510.gif new file mode 100644 index 0000000000000000000000000000000000000000..601f4cc2f4871e29eee74beae214d4b82f4a47df Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152862510.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001153427082.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001153427082.png new file mode 100644 index 0000000000000000000000000000000000000000..1144db651b011598fc9192a4f8b4e67efa63e1a1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001153427082.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166484430.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166484430.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bbab16659f4b34b38a714510665ea7fd309055 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166484430.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166962736.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166962736.png new file mode 100644 index 0000000000000000000000000000000000000000..47f90714bcb37e4df1b698503db6893d6c2a98c4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166962736.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167001464.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167001464.png new file mode 100644 index 0000000000000000000000000000000000000000..5113bc6bad4f88bc2558aae304394e00e107ce88 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167001464.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167046832.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167046832.png new file mode 100644 index 0000000000000000000000000000000000000000..33787429dd3205f9faac254950e95c097bd63b21 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167046832.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167472798.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167472798.png new file mode 100644 index 0000000000000000000000000000000000000000..151ef990edbb33e1f54632609990f6c540149a5e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167472798.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167631876.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167631876.png new file mode 100644 index 0000000000000000000000000000000000000000..44ae627d6e40dd4b297eccdcf1c5dceef5a08d82 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167631876.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167950468.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167950468.png new file mode 100644 index 0000000000000000000000000000000000000000..904fdcf258a2dc8350ace79f0abea18aadc721e0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167950468.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167953648.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167953648.png new file mode 100644 index 0000000000000000000000000000000000000000..e89a1b24da145cf480cceb28ed7249b717e614bf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167953648.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111514.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111514.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6b4abcc27039c624bd21aad775db7c47a22dea Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111514.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111610.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111610.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8300af3bdf43e4d2192699b5ed4065fef451c0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111610.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984880.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984880.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1dc87c79f827c8bb5be3f3771c37f4cb8b214e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984880.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984882.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984882.png new file mode 100644 index 0000000000000000000000000000000000000000..24d65ef9913f6b82a6f70ac2a4e415745112b108 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984882.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169142476.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169142476.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e18dbe51e815ccdfc6f594e3424850c3b93a12 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169142476.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169143586.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169143586.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5aedb22cb51d00b176f44c5ac5f3ad29d843f2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169143586.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169144864.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169144864.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc02a6196604a6a3d64b9961c04aaaa51dc829e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169144864.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169151508.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169151508.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac4a39e925322831752617b71a77d040626d251 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169151508.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169301188.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169301188.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4f47314f89fa4bbbd2d14527dd250b5e3e141b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169301188.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303414.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303414.png new file mode 100644 index 0000000000000000000000000000000000000000..8192453ec25d486b3923da4a25b0a6fe5034d869 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303414.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303416.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303416.png new file mode 100644 index 0000000000000000000000000000000000000000..68562c1006ec7c61c49c24aec99ecfd173ca055a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303416.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169309948.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169309948.png new file mode 100644 index 0000000000000000000000000000000000000000..8253c65764c8d74e0a25404aa62fdd69d43f3c26 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169309948.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169315920.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169315920.png new file mode 100644 index 0000000000000000000000000000000000000000..2f786e33181995c2b5bf5f835df4557ff3f7e9b4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169315920.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169461910.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169461910.png new file mode 100644 index 0000000000000000000000000000000000000000..db54e678d8c42daca3e56dd85567c9978a9657c8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169461910.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463368.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463368.png new file mode 100644 index 0000000000000000000000000000000000000000..e061801d6eeb27d7fee0b287414e512559a87ea9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463368.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463370.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463370.png new file mode 100644 index 0000000000000000000000000000000000000000..67959174e9b810b9278a7940bc097ac0c0738c7e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463370.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169469914.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169469914.png new file mode 100644 index 0000000000000000000000000000000000000000..42efd9018bc05408596a768cbbe309f1e46273d7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169469914.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169470288.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169470288.png new file mode 100644 index 0000000000000000000000000000000000000000..3404b29dff12b910ae1be71ebf762252895468a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169470288.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164789.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164789.png new file mode 100644 index 0000000000000000000000000000000000000000..6829d2d87db5a5e28ad1ade1ca45eada97945bec Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164789.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164793.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164793.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4169c4139b0204e7b97dc7b6deeb2389610de2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164793.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164845.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164845.png new file mode 100644 index 0000000000000000000000000000000000000000..b64c5df26d8c2fb403e08feb72f8979af95ea44f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164845.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164853.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164853.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8562ea95b31781a67259225366d4bf9b86506a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164853.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164867.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164867.png new file mode 100644 index 0000000000000000000000000000000000000000..094d157e55693d0697e407f5f7299c6e2da24f56 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164867.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164869.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164869.png new file mode 100644 index 0000000000000000000000000000000000000000..3866e5677395048de391ed6159a0fe5572f6d91e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164869.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164871.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164871.png new file mode 100644 index 0000000000000000000000000000000000000000..787fe9541b386b83b07e478651637f0f450e99f2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164871.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164873.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164873.png new file mode 100644 index 0000000000000000000000000000000000000000..d31b9766cc593c0be44ae1abdba2f9f45eaa024e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164873.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164891.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164891.png new file mode 100644 index 0000000000000000000000000000000000000000..38a3de061a3816a2eac62ae3d43284789c0ca31f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164891.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324721.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324721.png new file mode 100644 index 0000000000000000000000000000000000000000..02fe52a90168d22959c9a703951730c9e7813e8a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324721.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324749.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324749.png new file mode 100644 index 0000000000000000000000000000000000000000..3dccd46b21e76a7bbbaabc1ab77a29bd72ae850d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324749.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324751.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324751.png new file mode 100644 index 0000000000000000000000000000000000000000..f9db5c31c8eae66244cd3f6e11336f72284bb2a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324751.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324783.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324783.png new file mode 100644 index 0000000000000000000000000000000000000000..e05df70223233ed7162d57f021a167eec9d9686a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324783.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324787.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324787.png new file mode 100644 index 0000000000000000000000000000000000000000..06f1abd77c6c0036539e710f09617c3ef2ce0648 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324787.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324797.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324797.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b1bc728e1dd3c79f4a24bb1516ed752e32c74cd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324797.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324843.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324843.png new file mode 100644 index 0000000000000000000000000000000000000000..f627659cef03f443e01fb28b44ceb9363369b8d8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324843.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178875308.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178875308.png new file mode 100644 index 0000000000000000000000000000000000000000..c085790c6651bf041b772f58f5665d442caf6f4a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178875308.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178886129.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178886129.png new file mode 100644 index 0000000000000000000000000000000000000000..584a2841e6dbd6db9070438c0a56e717a34b133f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001178886129.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001179035242.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001179035242.png new file mode 100644 index 0000000000000000000000000000000000000000..c7311ac9226ca3c0a04cef9a51961424daf8a47a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001179035242.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png new file mode 100644 index 0000000000000000000000000000000000000000..9be62c4f9a5b1ad4b6a1d647c3b0e2d6ac57a33e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198670487.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198670487.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecd604af13a7917485488f641b525d15e654eee Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198670487.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198898293.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198898293.png new file mode 100644 index 0000000000000000000000000000000000000000..3db4286a873ef0bd14e7adeb085239a9941f918b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001198898293.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001212124299.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001212124299.png new file mode 100644 index 0000000000000000000000000000000000000000..9a73bd33782f06a704ed9b288226dfa381d1d57c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001212124299.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213192781.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213192781.png new file mode 100644 index 0000000000000000000000000000000000000000..3108e0436219c1c3a7335679cdfea962c49f454d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213192781.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213193285.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213193285.png new file mode 100644 index 0000000000000000000000000000000000000000..f59a10b44b9e9793bc3a9134f6c4633c8cfb49ce Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213193285.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214460669.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214460669.png new file mode 100644 index 0000000000000000000000000000000000000000..6e58c669a2976297f71d35c304e988c2884e7dc0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214460669.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463281.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463281.png new file mode 100644 index 0000000000000000000000000000000000000000..56c65edbcd66a2ebe9d8ef35c55eba90652bca0f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463281.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463283.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463283.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf23e9e6897ac272a1c486edebd80d12dd44132 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463283.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214469787.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214469787.png new file mode 100644 index 0000000000000000000000000000000000000000..63b480df9e9700601da85abef015c8326095851f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214469787.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214619417.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214619417.png new file mode 100644 index 0000000000000000000000000000000000000000..5da42e3e14d601745274cb62d914c6600620bb25 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214619417.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214621177.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214621177.png new file mode 100644 index 0000000000000000000000000000000000000000..01f53998ba343eb77fbd7b78414e47e1fb68819e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214621177.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623227.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623227.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9a8bacc0f78cb141820e8188d4ae5ef03dc7c1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623227.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623229.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623229.png new file mode 100644 index 0000000000000000000000000000000000000000..625b158772a6198abe3a81719cfc2bd2598bed91 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623229.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214629745.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214629745.png new file mode 100644 index 0000000000000000000000000000000000000000..fea0122d3ef81899a02199c6cb265a099ad6c44f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214629745.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214630783.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214630783.png new file mode 100644 index 0000000000000000000000000000000000000000..3917378fdcb47448e7daf8ae197e6d033fd345e9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214630783.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214703717.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214703717.png new file mode 100644 index 0000000000000000000000000000000000000000..1362b8a3d98f4edf36420d3799f01476817e43d4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214703717.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214704759.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214704759.png new file mode 100644 index 0000000000000000000000000000000000000000..6afdd1b39e4bcb3664c7664a55b47b8537f4aeaa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214704759.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214717247.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214717247.png new file mode 100644 index 0000000000000000000000000000000000000000..4481b08ab897619b408425f9bfe0fd5b1fcb6ef0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214717247.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214811029.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214811029.png new file mode 100644 index 0000000000000000000000000000000000000000..1d71cee4618f1f2822cea1031c9b0e5d602e0a9b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214811029.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214822091.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214822091.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8973bcb7d55910c6702fe6b9b54506ad3b3727 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214822091.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214824709.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214824709.png new file mode 100644 index 0000000000000000000000000000000000000000..d957a62a03d1429504d89d3e7ee649d4b54a24ba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214824709.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837127.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837127.png new file mode 100644 index 0000000000000000000000000000000000000000..658dca4b52032016c15f77a94b3ef76c093b1d2c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837127.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837333.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837333.png new file mode 100644 index 0000000000000000000000000000000000000000..63f343e89f62b15c117e0148c87ac049308c3117 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837333.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001224354967.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001224354967.png new file mode 100644 index 0000000000000000000000000000000000000000..7469c1e329fc86f0ca7eec9374be7c2c03ae2d6b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001224354967.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc5fef8ddb3f1af9d6b231f9183f5094faf5434 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png new file mode 100644 index 0000000000000000000000000000000000000000..13b38a17af260f22ef850403d9351cff1860bb9c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272\351\273\230\350\256\244\346\225\210\346\236\234.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272\351\273\230\350\256\244\346\225\210\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..70aa78c1973add7bf07ec822d905c1bc98cb47f9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272\351\273\230\350\256\244\346\225\210\346\236\234.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\215\241\347\211\207\350\275\254\345\234\272.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\215\241\347\211\207\350\275\254\345\234\272.gif" new file mode 100644 index 0000000000000000000000000000000000000000..62bf33b76b0c0e257efa48131d0acd2249a2bb04 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\345\215\241\347\211\207\350\275\254\345\234\272.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\346\215\225\350\216\267.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\346\215\225\350\216\267.png" new file mode 100644 index 0000000000000000000000000000000000000000..2ed837e111c3ac1ba1eafb5b28da581ef4de5d22 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-js/figures/\346\215\225\350\216\267.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6e9c72046d14a46ed93a1075ee580510e64f92 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1111.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1111.png new file mode 100644 index 0000000000000000000000000000000000000000..3fbc152bb27dc98b9db8ace65a5b820c72f77879 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/1111.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111-5.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111-5.png new file mode 100644 index 0000000000000000000000000000000000000000..5da42e3e14d601745274cb62d914c6600620bb25 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111-5.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111.png new file mode 100644 index 0000000000000000000000000000000000000000..5da42e3e14d601745274cb62d914c6600620bb25 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/11111.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2-01.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2-01.png new file mode 100644 index 0000000000000000000000000000000000000000..e766d36181c3d1fbd96bb0acab1b3eb670e14cd4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2-01.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/222.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/222.gif new file mode 100644 index 0000000000000000000000000000000000000000..0befd736af77db15c203c4a5578929baf1d83e08 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/222.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2222.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2222.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1d0fd10bd28897bf3b1103e5bdba0fdb9d17f1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/2222.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/5.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..587269a1e0647be0acb21deced4722037bb07013 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/5.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/66666.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/66666.gif new file mode 100644 index 0000000000000000000000000000000000000000..b40f786a2f583af59e9f63d35ab1d503f51525da Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/66666.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AlertDialog.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AlertDialog.gif new file mode 100644 index 0000000000000000000000000000000000000000..30e89347337d9e358d4b823c7658490e032eb435 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AlertDialog.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AnimateTo.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AnimateTo.gif new file mode 100644 index 0000000000000000000000000000000000000000..864e3a39a57b7a45f63a07fe50545629db3527c4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AnimateTo.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AttrAnimation.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AttrAnimation.gif new file mode 100644 index 0000000000000000000000000000000000000000..69cc497191325216c394de0ce00328a7c5c5fc8c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/AttrAnimation.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank1.gif new file mode 100644 index 0000000000000000000000000000000000000000..2547cd4af312ee9a2cfc6c3c61b630fdcd7426f9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank2.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe04e9611135b8d8cd4f9ace0acf1d1a5797bf6c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Blank2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Button.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Button.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb1dd72311c866d5bf31a706d75fc1e107a5a946 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Button.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ColumnSplit.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ColumnSplit.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac096bd0f149b02d46013420a9c323fe8aa5805a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ColumnSplit.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Counter.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Counter.gif new file mode 100644 index 0000000000000000000000000000000000000000..a8c10650641ca05ec76b2ff74621506bba7034f4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Counter.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/DisplayPriorityExample.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/DisplayPriorityExample.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bd33e278c8c9edccf66470d2c3585792fceb4ff Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/DisplayPriorityExample.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/F.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/F.gif new file mode 100644 index 0000000000000000000000000000000000000000..070ae9d042d5211b2ccc6c187ec0f87a90d2c963 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/F.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex01.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex01.gif new file mode 100644 index 0000000000000000000000000000000000000000..8da8a4adcc50c16eafb2378f0bbab0706471ae8b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex01.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex03.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex03.gif new file mode 100644 index 0000000000000000000000000000000000000000..1be92ae9b4a61f304b91c5b03f7b0e799ac679fa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex03.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04-2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04-2.gif new file mode 100644 index 0000000000000000000000000000000000000000..18e5eef8f04c15625f4e3ae3ab050083b3acc962 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04-2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf5c3a49c58818ec9dec43db3c2d4c5e16949a94 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex04.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex05.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex05.gif new file mode 100644 index 0000000000000000000000000000000000000000..791930fb1f2f681dac85167f646dbcf88d121882 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Flex05.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF-4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF-4.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bcc79b53b227b6bd0484045d20743d9686c8e08 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF-4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF.gif new file mode 100644 index 0000000000000000000000000000000000000000..8eceb3bf5313485a1fedda5768e70cdb5febc464 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF1.gif new file mode 100644 index 0000000000000000000000000000000000000000..e97b2a2406059ce3af77ade27bb634845d807726 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF2.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0a6fc0df420fa15f8a0e476da5fa8592bbc751b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF4.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF4.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7532ed87726ac7591901514a7396b617daa10f0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GIF4.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GestureGroup.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GestureGroup.gif new file mode 100644 index 0000000000000000000000000000000000000000..0213b777e0352ac7830bde7d9bff40edf69a1a51 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/GestureGroup.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image1.gif new file mode 100644 index 0000000000000000000000000000000000000000..05ad0a8aa0ae63ae9193aa1c9b3f943f060220da Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image2.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image2.png new file mode 100644 index 0000000000000000000000000000000000000000..085d31e9bf7c5740ac3c46d04c4098e64eb3a544 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image2.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image3.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecbaeb8cc1a3ec9e1ecfd253b605be50836b1f46 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Image3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ImageAnimator.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ImageAnimator.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b877c7bedb4021440eeac2b0a9a9c5d28377da3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ImageAnimator.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/KeyEvent.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/KeyEvent.gif new file mode 100644 index 0000000000000000000000000000000000000000..acbeb39682258aa37a6162230fa5b5bd1ed6a226 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/KeyEvent.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ListItem.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ListItem.gif new file mode 100644 index 0000000000000000000000000000000000000000..557213e5ff5c63c5f3b3db7ffbd56e80eef688f1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ListItem.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/LongPressGesture.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/LongPressGesture.gif new file mode 100644 index 0000000000000000000000000000000000000000..41a08cbcc0e58aadc12328ab72a8ec3f01a375ad Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/LongPressGesture.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/MediaQuery.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/MediaQuery.gif new file mode 100644 index 0000000000000000000000000000000000000000..6150bbeae602c3522416fc9a6ec9fe49f55ebd2c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/MediaQuery.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Navigator.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Navigator.gif new file mode 100644 index 0000000000000000000000000000000000000000..0faae458a1e97e2806130a05d9154af7a2a6d2e3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Navigator.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition1.gif new file mode 100644 index 0000000000000000000000000000000000000000..93c0edf4c20f9d29725065f5bdf7a5208da2e2fd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition2.gif new file mode 100644 index 0000000000000000000000000000000000000000..4770183525428b6df03bf1b3eb8cc4160a1568a1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PageTransition2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PanGesture.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PanGesture.gif new file mode 100644 index 0000000000000000000000000000000000000000..d98a4ebc55b1fbc7c598a08095f871f4c3ab8678 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PanGesture.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Panel.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Panel.gif new file mode 100644 index 0000000000000000000000000000000000000000..1cd6ff13714a55e253e9649c007080b47f02f791 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Panel.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PinchGesture.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PinchGesture.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5b827457bbb9fbb12c8d1cbee4886dede46a048 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/PinchGesture.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Rating.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Rating.gif new file mode 100644 index 0000000000000000000000000000000000000000..49922f7f7d934216dcbf8837c697d13063d101a4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Rating.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RotationGesture.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RotationGesture.gif new file mode 100644 index 0000000000000000000000000000000000000000..323cd3b5bf1913f6740db4ce2203a07fcb30fb5e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RotationGesture.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RowSplit.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RowSplit.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ea18f82170eb3309aefb8af24ef89f886718bdd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/RowSplit.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/SharedTransition.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/SharedTransition.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c81f8cfffb0c4d064335c9ebc0e8c918d10035a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/SharedTransition.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Span.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Span.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a2f5de773fed90a3c0c058d0b27bc0edd1f1904 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Span.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Tabs.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Tabs.gif new file mode 100644 index 0000000000000000000000000000000000000000..49a1503a776598da93f4089bb079c61125a71a2e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Tabs.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/TapGesture.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/TapGesture.gif new file mode 100644 index 0000000000000000000000000000000000000000..33a9b7c1a5a408a94cd58261742a29dc7519d880 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/TapGesture.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text1.gif new file mode 100644 index 0000000000000000000000000000000000000000..627fff6c85420f981d9ae844d0e53a77d254ac7c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text2.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b359a2d036a69fd442145d55e23031755c925c1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Text2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Transition.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Transition.gif new file mode 100644 index 0000000000000000000000000000000000000000..e7dc2d19afd049c44c75e1288063df96326e524c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/Transition.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/alphabetindexer.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/alphabetindexer.gif new file mode 100644 index 0000000000000000000000000000000000000000..438c67b65f13bfcd1ee3eb19e4f0c1265ae16278 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/alphabetindexer.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/appear.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/appear.gif new file mode 100644 index 0000000000000000000000000000000000000000..c18ae783333765788db1b8bf6107ee0c117ec9e6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/appear.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/back.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/back.png new file mode 100644 index 0000000000000000000000000000000000000000..4e556034506103bd7e7b491d72ef74b9eccde52c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/back.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/badge.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/badge.gif new file mode 100644 index 0000000000000000000000000000000000000000..016da55bb5d98a3d2787d870bf2575fbaf383990 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/badge.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/border.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/border.gif new file mode 100644 index 0000000000000000000000000000000000000000..89da584f60db920d0801f9e40138a56fd4242fd3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/border.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/circle.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..d34ba19a667f40c8dc3b4e668095bda1bd4868aa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/circle.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/clip.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/clip.png new file mode 100644 index 0000000000000000000000000000000000000000..c1bfde1c57599f8cc40d0dc50179c71f4dfc2978 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/clip.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/colorGradient.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/colorGradient.png new file mode 100644 index 0000000000000000000000000000000000000000..2c20e6d28a0636b8122f6377052933c33cfcffaf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/colorGradient.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/column.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/column.gif new file mode 100644 index 0000000000000000000000000000000000000000..3213fc124d255584be8f21a3074806c304953e7b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/column.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/customdialog.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/customdialog.gif new file mode 100644 index 0000000000000000000000000000000000000000..17ae76b8141d65147f9774d130711f46bf332d02 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/customdialog.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/datapanel.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/datapanel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b12c5fb6563c7ee9d8dfa7e6af1cfe1dcfa1361c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/datapanel.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/divider.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/divider.png new file mode 100644 index 0000000000000000000000000000000000000000..f2deeb8445fe0f3b66d2b0facbf9e0f0ed9911ca Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/divider.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/duande.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/duande.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ed4e908925042a11312dd27aa1c28e8c91d8d8c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/duande.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ellipse.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ellipse.png new file mode 100644 index 0000000000000000000000000000000000000000..b85ac72fcec0f4b2eb752307d4abe05ef4795ef2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/ellipse.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/enabled.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/enabled.gif new file mode 100644 index 0000000000000000000000000000000000000000..c48a9fa7aca3a160a68868d06d48f6af22ce6d87 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/enabled.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex.png new file mode 100644 index 0000000000000000000000000000000000000000..884eb29ed12c00641fec55f358a41f15f581c335 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex02.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex02.png new file mode 100644 index 0000000000000000000000000000000000000000..f27757afb281875f5cd4fca0e4b86684cdf0f1a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/flex02.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/gauge.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb96b00f11e597fcc3e3d5ef32701e0a4ef5f5b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/gauge.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid-3.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid-3.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ead4d671531532629b2fbf2f411ce4008dde3ba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid-3.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..1868b355aac470977ff1b36a5c1b3adf007dbfda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/grid.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/griditem.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/griditem.gif new file mode 100644 index 0000000000000000000000000000000000000000..07a8d81674d244e6ec76c0b43558890caf53062e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/griditem.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/line.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/line.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3d3e1023746c03c9ad426328de0114321ac3f66 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/line.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/list.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/list.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc49b51652e53b6caa3888b054dbea94c2f498eb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/list.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif new file mode 100644 index 0000000000000000000000000000000000000000..e22d25b7aa139409766723e4ed0fd6172b85b6cf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/menu.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/menu.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30a8d85e898213691abd5369c9c1008d399274b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/menu.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/motion.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/motion.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec293bafaf6cd7204ebb231c4eee7daa504b78c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/motion.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/opacity.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/opacity.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0e5e55e1af19bb46a74300bf2ae60f95225a874 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/opacity.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/overlay.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8194c14b5ca1ea743782db95027035370ead7e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/overlay.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/path.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/path.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c6998d7f55a75562fbf709aa84b4bd12922ae6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/path.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polygon.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polygon.gif new file mode 100644 index 0000000000000000000000000000000000000000..78e7436bf654889a3a04e9d2e5dd53f5fb562906 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polygon.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polyline.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polyline.gif new file mode 100644 index 0000000000000000000000000000000000000000..49167ceae5eb50a96334c73496ed534d25bbecf4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/polyline.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/popup.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/popup.gif new file mode 100644 index 0000000000000000000000000000000000000000..7631bb0d995839d59a9d3876f91fd7e688c35758 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/popup.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position.gif new file mode 100644 index 0000000000000000000000000000000000000000..3174da059167d3560a99d50cca06ec678cabed96 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position2.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position2.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee69d15a36eda3047be045a3d037fd27a37166fe Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/position2.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/progress.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/progress.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff7595bc619e62c05376cd7b57a473dde3e9386 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/progress.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/q1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/q1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb53d971cbadb6479cc755ae0a95cd4c0c3bff1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/q1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/qrcode.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2c6040690cebf054da6dbc70c87d14c82be9d6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/qrcode.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/rect.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/rect.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2c71e4bcc008c0d286a05b2e969103aa06236d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/rect.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/row.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/row.png new file mode 100644 index 0000000000000000000000000000000000000000..3b44b9a41cb0fa78afcde81f82e0ad63c90de58d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/row.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s1.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s1.png new file mode 100644 index 0000000000000000000000000000000000000000..15e3b57fbcadac9e9c6f4c1446bd16c53845f888 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s3.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s3.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2e35a9a29c6f849cd4e766c8fac0016b95365d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s3.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s4-(1).png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s4-(1).png new file mode 100644 index 0000000000000000000000000000000000000000..4f6f99db3df495c744c612e3a2dff20d2a757a43 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/s4-(1).png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/scroll.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/scroll.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa6a5f8e639b2b8b73bdae505da6b67800c5eb63 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/scroll.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/size.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/size.gif new file mode 100644 index 0000000000000000000000000000000000000000..dffa33c4389c4576d2492cd98499b71715b8ead8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/size.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/slider.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/slider.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1724791e4acb31d193a0dce267e42c99288c6bd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/slider.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stack.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stack.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0e1a1070b2bdbb158e1ba66caa2269626acd1ef Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stack.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stepper.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stepper.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b44b6a2adc2528e13e95bc10d2a67874226a63b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/stepper.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/swiper.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/swiper.gif new file mode 100644 index 0000000000000000000000000000000000000000..5db399f79a02f496aea43ff72e55e29a0bb05a9a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/swiper.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textarea1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textarea1.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c888d43eeb0d0d3ab08e0c2922f136ed0b3d142 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textarea1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textinput1.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textinput1.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fa5c075ecc4f157f1e66316f4b56f28ffa2007d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textinput1.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textstyle.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textstyle.png new file mode 100644 index 0000000000000000000000000000000000000000..5499902761b534f84a0405094afe2fb5d4724322 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/textstyle.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/toggle.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/toggle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6b7ae5ac2bf443574de54cd4df472a8f0cd1aba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/toggle.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(3).png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(3).png new file mode 100644 index 0000000000000000000000000000000000000000..293ead152f1cde4757f85101d9c8c96bdec4dee7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(3).png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(4).png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(4).png new file mode 100644 index 0000000000000000000000000000000000000000..e2a8cf9cf4fc88e27e7adb0ad9caf2df9ca978c6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/unnaming-(4).png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/visibility.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/visibility.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe69ab973cfd17f540dd1da4fd04de890af95c74 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/visibility.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zIndex.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zIndex.png new file mode 100644 index 0000000000000000000000000000000000000000..92ddc7d5d9ee2f87128ed8951b2294ea3c07f650 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zIndex.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png new file mode 100644 index 0000000000000000000000000000000000000000..348499bc3787a833ab3da5f87500b11c9c93773e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png new file mode 100644 index 0000000000000000000000000000000000000000..e544a2958b969018ff6bfe8b44bb8758c2aea61a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png new file mode 100644 index 0000000000000000000000000000000000000000..f410f22c1dd0ba7e1c9718eb3995de5f5033c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed5759714b99dc039faab67acdfe6d67bfc6ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png new file mode 100644 index 0000000000000000000000000000000000000000..72a515c8b425037a4307ef1b16def3e528aab4a0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png new file mode 100644 index 0000000000000000000000000000000000000000..92a309337be0e2f4c49d0484dab0ffd19584b534 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fd4aff2fb6b7a32fcb8af41a84fbf57c26d035 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png new file mode 100644 index 0000000000000000000000000000000000000000..160278c82fcdf310c796609d5ee29a2a4869af9e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ddc678b5a74f1e5ae78ba6a9c35618f31a589 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png new file mode 100644 index 0000000000000000000000000000000000000000..d3db21e0e3da6d8663f59b2ddabd9e50d6eb1e6a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png new file mode 100644 index 0000000000000000000000000000000000000000..5869f7cdc9a81adc7f03d07ab121c6b8433637d9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png new file mode 100644 index 0000000000000000000000000000000000000000..adb4986f7f26047e65e552c570e3f9e62a2037ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png new file mode 100644 index 0000000000000000000000000000000000000000..801bf97495213f41c2b196b2f170af85b156dd5b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb651372a67eca9de3848baa6b66cac0ee9f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9cf4d6e06b96da9b93608e7a050af71eaa5032 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png new file mode 100644 index 0000000000000000000000000000000000000000..cb250dfc130cc329ae9dc74ddb861e8753d419c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png new file mode 100644 index 0000000000000000000000000000000000000000..4608132f8e4292a3fe0174a65a9a3f2fc428c0e7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png new file mode 100644 index 0000000000000000000000000000000000000000..f36078d6d832fa757378b72fa0739f66fe781c64 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png new file mode 100644 index 0000000000000000000000000000000000000000..d8bdc2d4a59d0b3c5de0f8c020d30ffc5b2ead7a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1808e80a0e4d055d54b886ecca3ddc8efa64b9a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png new file mode 100644 index 0000000000000000000000000000000000000000..7dafd299b8e48ead7d6f783e5a370e31257e341c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1d5493dd38de810cbfe5e41e54d507b839e9c9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif new file mode 100644 index 0000000000000000000000000000000000000000..b26dc8bf409987fa624f6dc0cec1c56043e7b37a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png new file mode 100644 index 0000000000000000000000000000000000000000..241fe8546ea2acfdb7baf2c5e66a8af2f0d7b593 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png new file mode 100644 index 0000000000000000000000000000000000000000..8c06945a1790bb0a741b330fe0a9170dd2a3a92d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png new file mode 100644 index 0000000000000000000000000000000000000000..45be809bdb14e8badfaac2dc8e2486864d29f763 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7fc25c17990998ba263a8525e6a110794c0d87 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png new file mode 100644 index 0000000000000000000000000000000000000000..5eecca641660f12e3ad2ba7b97b97eca253a4acf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png new file mode 100644 index 0000000000000000000000000000000000000000..241fe8546ea2acfdb7baf2c5e66a8af2f0d7b593 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png new file mode 100644 index 0000000000000000000000000000000000000000..5d649492978121a484c2a7a55d4548384c919149 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png new file mode 100644 index 0000000000000000000000000000000000000000..4f115a17e671fa21da2d44cd82bf7b0f3c70c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbe07731306eff949ff7ced4dd7eb4a374c8310 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png new file mode 100644 index 0000000000000000000000000000000000000000..72a515c8b425037a4307ef1b16def3e528aab4a0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7fc25c17990998ba263a8525e6a110794c0d87 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png new file mode 100644 index 0000000000000000000000000000000000000000..657eee10e270eb448fc7f7f4b24b18134a42d5dc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png new file mode 100644 index 0000000000000000000000000000000000000000..7cbe07731306eff949ff7ced4dd7eb4a374c8310 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png new file mode 100644 index 0000000000000000000000000000000000000000..e764c43599592d821c403aac0d3fa40d9edd22e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed5759714b99dc039faab67acdfe6d67bfc6ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png new file mode 100644 index 0000000000000000000000000000000000000000..138e011909c2d4738f3cd9671a79ea0c37cb5b87 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png new file mode 100644 index 0000000000000000000000000000000000000000..defc3c9eb037c06b894ee2e30563facb8c8375ab Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png new file mode 100644 index 0000000000000000000000000000000000000000..45be809bdb14e8badfaac2dc8e2486864d29f763 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png new file mode 100644 index 0000000000000000000000000000000000000000..5eecca641660f12e3ad2ba7b97b97eca253a4acf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png new file mode 100644 index 0000000000000000000000000000000000000000..563ce2878d24a7fa46044f201433d759c3fa9001 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png new file mode 100644 index 0000000000000000000000000000000000000000..801bf97495213f41c2b196b2f170af85b156dd5b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png new file mode 100644 index 0000000000000000000000000000000000000000..160278c82fcdf310c796609d5ee29a2a4869af9e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png new file mode 100644 index 0000000000000000000000000000000000000000..83b7a51accdda21d21a39e5e9d917d75811cb496 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b4b42aecaef72ed4a08b3566a895b3f9b12343 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b8bdc7fc7cd417340bbcda6845fd7de0098930 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png new file mode 100644 index 0000000000000000000000000000000000000000..92a309337be0e2f4c49d0484dab0ffd19584b534 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fd4aff2fb6b7a32fcb8af41a84fbf57c26d035 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png new file mode 100644 index 0000000000000000000000000000000000000000..c1803b711d45a86552a2be4099424206a1561534 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8582f58ed05f9ac3b8962f82d8565d1f580f6c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif new file mode 100644 index 0000000000000000000000000000000000000000..38502c83c52aa9229da69d638e4b9b1f5a35009b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png new file mode 100644 index 0000000000000000000000000000000000000000..e764c43599592d821c403aac0d3fa40d9edd22e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png new file mode 100644 index 0000000000000000000000000000000000000000..138e011909c2d4738f3cd9671a79ea0c37cb5b87 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png new file mode 100644 index 0000000000000000000000000000000000000000..088d5a479cc188332bb7295b31aea277897faca8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png new file mode 100644 index 0000000000000000000000000000000000000000..10059591af349daced4bf7abeb009209a3e90f1d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png new file mode 100644 index 0000000000000000000000000000000000000000..83b7a51accdda21d21a39e5e9d917d75811cb496 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3966d0abb39044241ee174a126fcf919f402d98 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png new file mode 100644 index 0000000000000000000000000000000000000000..84d835e7feeac31e42c1a53670ef6c999ea4bfe2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b4b42aecaef72ed4a08b3566a895b3f9b12343 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e245a5c576e92810baacaa09af99f108a010a9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png new file mode 100644 index 0000000000000000000000000000000000000000..defc3c9eb037c06b894ee2e30563facb8c8375ab Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb1361bd9aded6d58d51ae771558989977a0608 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba89fa119f9a64c74b9353c20ec3d741aaad9be Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png new file mode 100644 index 0000000000000000000000000000000000000000..1330e2e2a6395703f9c3747252c1e0a69ae6f4f0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png new file mode 100644 index 0000000000000000000000000000000000000000..071919ed3a638630f33a337f920ae2e60c9c21bc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png new file mode 100644 index 0000000000000000000000000000000000000000..26fb5384338291f3eb372abd526f0727ce759bdc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png new file mode 100644 index 0000000000000000000000000000000000000000..50726d3e461d7a5dbfec674899fee603aaf41bee Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png new file mode 100644 index 0000000000000000000000000000000000000000..af02181de0d07d5311b09c8d05c2a018e6e5b4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png new file mode 100644 index 0000000000000000000000000000000000000000..657eee10e270eb448fc7f7f4b24b18134a42d5dc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png new file mode 100644 index 0000000000000000000000000000000000000000..cb250dfc130cc329ae9dc74ddb861e8753d419c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png new file mode 100644 index 0000000000000000000000000000000000000000..b2728fd1b4e050edddf499398b44a7e3aa634109 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png new file mode 100644 index 0000000000000000000000000000000000000000..c1803b711d45a86552a2be4099424206a1561534 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b8bdc7fc7cd417340bbcda6845fd7de0098930 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png new file mode 100644 index 0000000000000000000000000000000000000000..22e84d1b8951b163748a079b6d1d302148d3b6bb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png new file mode 100644 index 0000000000000000000000000000000000000000..945862898489d8e008e94abbcd691aa307b18d06 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7218eb57566d86457a9fbd4a8ed0f0dd490c3f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cd637e5bf9db13e3334ca00413e3a91412c813 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png new file mode 100644 index 0000000000000000000000000000000000000000..22e84d1b8951b163748a079b6d1d302148d3b6bb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png new file mode 100644 index 0000000000000000000000000000000000000000..088d5a479cc188332bb7295b31aea277897faca8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png new file mode 100644 index 0000000000000000000000000000000000000000..10059591af349daced4bf7abeb009209a3e90f1d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png new file mode 100644 index 0000000000000000000000000000000000000000..b2728fd1b4e050edddf499398b44a7e3aa634109 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e446b213816e4db8d67a9898da1afa7b8226ad Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png new file mode 100644 index 0000000000000000000000000000000000000000..d3db21e0e3da6d8663f59b2ddabd9e50d6eb1e6a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png new file mode 100644 index 0000000000000000000000000000000000000000..4608132f8e4292a3fe0174a65a9a3f2fc428c0e7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cd637e5bf9db13e3334ca00413e3a91412c813 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb651372a67eca9de3848baa6b66cac0ee9f173 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png new file mode 100644 index 0000000000000000000000000000000000000000..5d649492978121a484c2a7a55d4548384c919149 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png new file mode 100644 index 0000000000000000000000000000000000000000..af02181de0d07d5311b09c8d05c2a018e6e5b4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7218eb57566d86457a9fbd4a8ed0f0dd490c3f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png new file mode 100644 index 0000000000000000000000000000000000000000..4f115a17e671fa21da2d44cd82bf7b0f3c70c0a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png new file mode 100644 index 0000000000000000000000000000000000000000..bc093379e122dcac29c4c8d04560d26bfc23d472 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png new file mode 100644 index 0000000000000000000000000000000000000000..50726d3e461d7a5dbfec674899fee603aaf41bee Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png new file mode 100644 index 0000000000000000000000000000000000000000..294b32cf04462b04243afb828199be9b95e6dd17 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4208ebcf5ffeeda0d1f5c452327c8fd8dcf7ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png new file mode 100644 index 0000000000000000000000000000000000000000..945862898489d8e008e94abbcd691aa307b18d06 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ddc678b5a74f1e5ae78ba6a9c35618f31a589 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb1361bd9aded6d58d51ae771558989977a0608 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\346\250\252\345\261\217\346\230\276\347\244\272.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\346\250\252\345\261\217\346\230\276\347\244\272.gif" new file mode 100644 index 0000000000000000000000000000000000000000..b4c58da1a241d9d4ea1534b67bb7cd5050e90bf6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\346\250\252\345\261\217\346\230\276\347\244\272.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\347\253\226\345\261\217\346\230\276\347\244\272.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\347\253\226\345\261\217\346\230\276\347\244\272.gif" new file mode 100644 index 0000000000000000000000000000000000000000..67ccf57fd6c267e8c420b43c309c143a2dd56a45 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\347\253\226\345\261\217\346\230\276\347\244\272.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272LG.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272LG.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e003ab973198f6d52e559654e0848fa0aacb79e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272LG.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272MD.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272MD.png" new file mode 100644 index 0000000000000000000000000000000000000000..e0c21d7388daa4fe32803436b7fb1630f99c2dbc Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272MD.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272SM.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272SM.png" new file mode 100644 index 0000000000000000000000000000000000000000..9ef495d81128387b6b41c813bcfda52f6b7dff87 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/reference/arkui-ts/figures/\350\256\276\345\244\207\345\256\275\345\272\246\344\270\272SM.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063148757.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063148757.gif new file mode 100755 index 0000000000000000000000000000000000000000..2283e46371317539004c0007886500c1a81dd83a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063148757.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063442797.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063442797.png new file mode 100755 index 0000000000000000000000000000000000000000..56722216f1433b27da4fc49c649c7e8cf4361a45 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001063442797.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001064068638.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001064068638.gif new file mode 100755 index 0000000000000000000000000000000000000000..a22665c1c2d86025245dbac4b78c5b4bd5c264df Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001064068638.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070558189.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070558189.png new file mode 100755 index 0000000000000000000000000000000000000000..3e6c90236fa93360b187945fc9556ae735d4578f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070558189.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070693737.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070693737.png new file mode 100755 index 0000000000000000000000000000000000000000..fc5e2c46f89ed2972750033ff3cad82c35733752 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070693737.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070707559.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070707559.png new file mode 100755 index 0000000000000000000000000000000000000000..3417fe5b0259e024e475c6c1953c23afcc768584 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001070707559.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001071134933.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001071134933.png new file mode 100755 index 0000000000000000000000000000000000000000..5000709da6dfadee24e10fdbd679b3a28e46578b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001071134933.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680230.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680230.png new file mode 100644 index 0000000000000000000000000000000000000000..58293d5e874f2aa36ecaf7282ca9e4736318092f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680230.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680236.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680236.png new file mode 100644 index 0000000000000000000000000000000000000000..bc28f5056c679e189543c8ad6fba67fb56db7655 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680236.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680240.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680240.png new file mode 100644 index 0000000000000000000000000000000000000000..56d32d4cd371c5374b133cb81c9c077aaf7b110d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111680240.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840132.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840132.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcb0c5e259b3f8d7375c21712249c1e847edd67 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840132.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840136.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840136.png new file mode 100644 index 0000000000000000000000000000000000000000..309d1c46f8bc396df5eaed381a5ffa2f0389d602 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001111840136.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001117452952.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001117452952.png new file mode 100644 index 0000000000000000000000000000000000000000..128187aacfa540846172eac7d4ff47a3c2a31291 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001117452952.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127125270.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127125270.png new file mode 100644 index 0000000000000000000000000000000000000000..43c345e521bd9c87a9fb6da469548716cd20f918 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127125270.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127284926.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127284926.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa7ed21c03b072e182249f928b9929d0869cd5d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001127284926.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001147417424.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001147417424.png new file mode 100644 index 0000000000000000000000000000000000000000..66d73108f4d5721cfc46ad9062d4b77387e67796 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001147417424.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001148858818.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001148858818.png new file mode 100644 index 0000000000000000000000000000000000000000..345a2be66315d210a86c20d30c56b8b5f487c325 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001148858818.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240091.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240091.png new file mode 100644 index 0000000000000000000000000000000000000000..e370a44cf043fc34bd8891f57faad2cd2ca05707 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240091.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240095.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240095.png new file mode 100644 index 0000000000000000000000000000000000000000..9c43caf5fdfd466eafc37b793f509a6bde2b885d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240095.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240097.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240097.png new file mode 100644 index 0000000000000000000000000000000000000000..b54dbc2391d1a8f16312dd02dc3d65a35ea2626f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158240097.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360079.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360079.png new file mode 100644 index 0000000000000000000000000000000000000000..0d22570503febc7a7dcba0d1e870f49f32fe489a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360079.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360085.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360085.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5e360f249a2002ba68ad9b94bd7f66f5d6aab1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158360085.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158896538.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158896538.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8accb2a567d32f056cbbb1158c51f3baf013d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001158896538.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001162911958.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001162911958.gif new file mode 100644 index 0000000000000000000000000000000000000000..067268949d47e1cbefdc51b0d736200a4eee443f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001162911958.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163212980.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163212980.gif new file mode 100644 index 0000000000000000000000000000000000000000..f333c9666cf9ba259ff2e5d0d883c4988659e877 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163212980.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228602.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228602.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc1eab30eb6a87308eaf399a89f1a755223f3995 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228602.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228638.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228638.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2097084b8dda33575a19b7c97d0555dcd5c04f9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163228638.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163229150.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163229150.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3453785e39354ba12ba98483ca3d332da070680 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163229150.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163372568.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163372568.png new file mode 100644 index 0000000000000000000000000000000000000000..24908708ecdc45a01ed06334f67171bca9d553ef Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163372568.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163375178.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163375178.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9cfac61024e39647871b85b72d57bc4dbd1bfa9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163375178.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163388642.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163388642.gif new file mode 100644 index 0000000000000000000000000000000000000000..d536b946b814de3d5b822611ac5c91c749a9d254 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163388642.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163531210.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163531210.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d5a07d1ff67011de5d0ec6bc0c2e552db9e5cd0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163531210.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163532072.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163532072.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca7c5488fb83a122e7f8ea1fba1e2d59324e513 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163532072.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163656706.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163656706.png new file mode 100644 index 0000000000000000000000000000000000000000..5877e6f9966eb4eee0b738ee7356985f9a819714 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001163656706.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165191390.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165191390.gif new file mode 100644 index 0000000000000000000000000000000000000000..82123adf27f2c782fe882a2c3399646ed3763629 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165191390.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165344988.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165344988.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8b2d36da4a14abee57a064898fce0899743751 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001165344988.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001166432552.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001166432552.png new file mode 100644 index 0000000000000000000000000000000000000000..72c1ad1e7e1c2100b85be89be4f0648c5ab19d57 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001166432552.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001167746622.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001167746622.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b8012da47797dfd3909843cba9af1468fb4e89 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001167746622.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168059158.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168059158.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9259dc9c0a7cb3530e3f7d9b0225e5160b92c8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168059158.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168410342.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168410342.png new file mode 100644 index 0000000000000000000000000000000000000000..3a97ead3b625041b9a3a33c8db8cd7cb79276a2d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168410342.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168570318.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168570318.png new file mode 100644 index 0000000000000000000000000000000000000000..5e855312aef77f5badc0c0b0b4d5cbeac23b802f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168570318.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728272.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728272.png new file mode 100644 index 0000000000000000000000000000000000000000..411cc11b2ac16047c5e2c8a24b3d572b9e24f768 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728272.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728872.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728872.png new file mode 100644 index 0000000000000000000000000000000000000000..d1dc59cd8ac1b5dc7da2f57d16d9a080bb449114 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168728872.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888224.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888224.png new file mode 100644 index 0000000000000000000000000000000000000000..4487bdcb98a9b1f912be17041859d7a7a246f183 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888224.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888822.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888822.png new file mode 100644 index 0000000000000000000000000000000000000000..f33eb296f27701a00461cd9231f7d9af014a3814 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168888822.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168956332.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168956332.png new file mode 100644 index 0000000000000000000000000000000000000000..15a7e0bdc38655a23f64bfa56c4adad9a6a199a0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001168956332.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169532276.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169532276.png new file mode 100644 index 0000000000000000000000000000000000000000..eca2b53342a2bf63d089c835bfdae16b2608e70f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169532276.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169582302.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169582302.gif new file mode 100644 index 0000000000000000000000000000000000000000..391353977d32956cde03890e501d11766dae2648 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169582302.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169599582.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169599582.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb400dcd217074d6e76902723e9fffd34fd4bd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169599582.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169678922.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169678922.png new file mode 100644 index 0000000000000000000000000000000000000000..fad940f7f4fba442aa1b267c66cdc21c5d3a1d2c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169678922.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169759552.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169759552.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2376e7e953d35b7d0fb1f6d53314bc0d7cb6b5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169759552.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169918548.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169918548.gif new file mode 100644 index 0000000000000000000000000000000000000000..220d14e0637e2808211cec10173c6c4a7552b64c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001169918548.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170008198.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170008198.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4b3de8f257c571e6fec3ff51795936b2d94d2f0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170008198.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170167520.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170167520.gif new file mode 100644 index 0000000000000000000000000000000000000000..d69156cdc0d1f1f33560148c1161618f97acb21d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170167520.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170411978.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170411978.gif new file mode 100644 index 0000000000000000000000000000000000000000..218be7ed11ffd1f1f199c347f0fa90e6f6b64b53 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001170411978.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001173164777.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001173164777.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4322d20ad887573ad85958bc181a1be0f85f1c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001173164777.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756438.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756438.gif new file mode 100644 index 0000000000000000000000000000000000000000..5eb149620499c0d1d363d274ad88a741095fc922 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756438.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756580.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756580.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a297661641d1714ebc95116592a97a693293e0a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756580.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756776.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756776.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1038b5da74612ac1911e1dae9d3a1de24ee46c7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756776.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756860.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756860.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1288776a8086fbb9e66691b0e882784db243aba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174756860.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174916742.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174916742.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7779b378c80842817091bedf62d74378bfff055 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001174916742.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175075286.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175075286.gif new file mode 100644 index 0000000000000000000000000000000000000000..90898288928277467db40c5eb11b4ff7ae082e6e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175075286.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175235138.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175235138.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cfb969baf3a36e231a311ca11ca538c248f6da1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001175235138.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001182200571.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001182200571.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d760c6d3f6c1e377ff2e42c0b3fb9e547ac140 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001182200571.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001183709904.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001183709904.png new file mode 100644 index 0000000000000000000000000000000000000000..fb34869ae9a78d655a30e62e1936840d0aa6bb4d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001183709904.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771358.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771358.gif new file mode 100644 index 0000000000000000000000000000000000000000..c76bef26e0b11311f02233ff17ca476ef470798a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771358.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771430.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771430.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a815c6f3db9654b71cc1d11821eab521ca7aeee Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188771430.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188931396.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188931396.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5e2ed34cf960792ca65ce6d9197ac0fc5d49f8c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001188931396.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189088264.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189088264.gif new file mode 100644 index 0000000000000000000000000000000000000000..688faa61583561ccb4e54daa04a3ac6a466245ac Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189088264.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189089950.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189089950.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb0c760faaf917a6935af461e0094fd8e7b8e85b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189089950.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189098638.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189098638.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ba578c8480834de8798cd311444c0499e1f0da5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189098638.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189248178.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189248178.gif new file mode 100644 index 0000000000000000000000000000000000000000..74ac9966962b430a0a03e68cf4f39bcfae4cc280 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189248178.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189249862.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189249862.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1839308d0fdde50aefd4c818d30ea82c49b6ca6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001189249862.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195117633.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195117633.png new file mode 100644 index 0000000000000000000000000000000000000000..00964c1cfa5f006f2e8ac064133e23a2d8fc92aa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195117633.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195119619.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195119619.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bed5e4ae3a322db0e4f05482913fdbd828cbed Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001195119619.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204537865.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204537865.png new file mode 100644 index 0000000000000000000000000000000000000000..7eb0d2cc3f3dd8e239e9232e655344c864cbf679 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204537865.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204538065.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204538065.png new file mode 100644 index 0000000000000000000000000000000000000000..514bc6e8fcdab7ae01de64d16d92a0541954c458 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204538065.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204776353.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204776353.png new file mode 100644 index 0000000000000000000000000000000000000000..883981a250b68a29db2027dee82a9a19c34c8e1a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001204776353.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208393581.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208393581.gif new file mode 100644 index 0000000000000000000000000000000000000000..a20dc90cfeff09cc98ce1e36e2f032af60f9777e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208393581.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208636379.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208636379.gif new file mode 100644 index 0000000000000000000000000000000000000000..e0d0662622fa12506072961b407ed888c2478d90 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208636379.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771093.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771093.png new file mode 100644 index 0000000000000000000000000000000000000000..c07a237f3bff7acbb5adbe7ca0d142aa204f7f13 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771093.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771113.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771113.gif new file mode 100644 index 0000000000000000000000000000000000000000..bca4a03308a47deb0538aec9b93fe0df9addacb0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208771113.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208787005.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208787005.gif new file mode 100644 index 0000000000000000000000000000000000000000..80a6d574da0827642f85fd34d1acd11caade21cf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208787005.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208908643.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208908643.gif new file mode 100644 index 0000000000000000000000000000000000000000..40f7c00741880a81530581d5488c2ff96e0e7bf2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001208908643.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209028575.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209028575.gif new file mode 100644 index 0000000000000000000000000000000000000000..014958726f3f42a6bd92b341695c8ed03b3fd211 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209028575.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209033195.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209033195.png new file mode 100644 index 0000000000000000000000000000000000000000..09f170afc5fac1513c0e453a6562a4670b3750f8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001209033195.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001210951541.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001210951541.gif new file mode 100644 index 0000000000000000000000000000000000000000..883453582802ecbb94916aaefd120123c9128625 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001210951541.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211069339.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211069339.png new file mode 100644 index 0000000000000000000000000000000000000000..f835c8abc0dfbfb3b52480d31c12bfd6e77c278b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211069339.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211071477.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211071477.png new file mode 100644 index 0000000000000000000000000000000000000000..4f33bfa94e4e8d0a6e70e6f8332126757b320560 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211071477.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211225091.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211225091.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ac33ba8eea89d257a3ff8f5947b007abdf4215 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211225091.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211227617.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211227617.png new file mode 100644 index 0000000000000000000000000000000000000000..4d26b5ba589c8b9126c51b54ff4d67476771cdf2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211227617.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211246571.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211246571.gif new file mode 100644 index 0000000000000000000000000000000000000000..4232ddc088cfaf7015aa3bca6622c39bbd5624a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211246571.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211383427.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211383427.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8e28967b4af0d0a3e10093b0b2dfab043da52c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001211383427.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213462329.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213462329.png new file mode 100644 index 0000000000000000000000000000000000000000..99a2f37ce14924c6c2d91f828d7ffaa8c87ec77f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213462329.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213968747.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213968747.png new file mode 100644 index 0000000000000000000000000000000000000000..f125f44d4a956c717f3bf1481f7161cf41e79a39 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001213968747.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214128687.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214128687.png new file mode 100644 index 0000000000000000000000000000000000000000..e42b6a7b9c128f9de2217c988fa34cd385742044 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214128687.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214210217.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214210217.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6560056b15b9c570758670eb65311168df7e9a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214210217.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214330169.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214330169.png new file mode 100644 index 0000000000000000000000000000000000000000..19ee7009247945887ceb0f8f6f471e45f3116b70 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214330169.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214437889.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214437889.png new file mode 100644 index 0000000000000000000000000000000000000000..fde616c73000d3f58fd98eea59088177221127a5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214437889.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214595111.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214595111.png new file mode 100644 index 0000000000000000000000000000000000000000..0a44a65c48f7f334e5d77e400495d455dc1283d1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214595111.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214948035.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214948035.png new file mode 100644 index 0000000000000000000000000000000000000000..37ae5324808a0ab50f210907ca65a09e4456a371 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214948035.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214998349.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214998349.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9be43d1fedfbd8660965190865110f007d8161 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001214998349.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215079443.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215079443.png new file mode 100644 index 0000000000000000000000000000000000000000..032c5bae7d3269bd4a3bb813e9d69c9271ac9843 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215079443.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215113569.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215113569.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b4a7dfc70a6ee3ce7a837d1e8e91acc7d05d22 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215113569.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215199399.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215199399.png new file mode 100644 index 0000000000000000000000000000000000000000..3834601d70a5121e18af408bb6a12bbdbf54a28c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215199399.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215318403.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215318403.gif new file mode 100644 index 0000000000000000000000000000000000000000..5643eb93241bf15f6cb75ffaf463ada35ba13201 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215318403.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215433095.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215433095.png new file mode 100644 index 0000000000000000000000000000000000000000..d015869874aecf7235aa892993d3d872a4cfe9df Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001215433095.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217008255.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217008255.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e38a4068976c9b5e298ff33ad4cfc711de4b2a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217008255.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217168141.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217168141.gif new file mode 100644 index 0000000000000000000000000000000000000000..f470f5261becb6c2d7b30f691a0794db2b1feb93 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001217168141.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316305.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316305.gif new file mode 100644 index 0000000000000000000000000000000000000000..365dbc42e583335f32de863120fd80ae0e7d59e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316305.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316655.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316655.gif new file mode 100644 index 0000000000000000000000000000000000000000..16a2d3f912b23349a5c416e5c5b74f4fd05a12aa Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220316655.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396251.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396251.gif new file mode 100644 index 0000000000000000000000000000000000000000..b7808565202cf12474f1282e67fde3a9c85d0e9c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396251.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396499.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396499.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff991f2899c847c433e41ccafd6798a386540369 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220396499.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220554911.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220554911.gif new file mode 100644 index 0000000000000000000000000000000000000000..3fe0cd60d60a0c5d29c2625ebade3d8b0bd0cdf8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220554911.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220634677.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220634677.png new file mode 100644 index 0000000000000000000000000000000000000000..664e50e404e5e7f6e4c4823bf1099391bfa45e33 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220634677.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635011.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635011.gif new file mode 100644 index 0000000000000000000000000000000000000000..d669cf40b97891ba3853be28574dceae172fe138 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635011.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635059.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635059.gif new file mode 100644 index 0000000000000000000000000000000000000000..27f8177c1c626565ce53f409bbf5a4e2f7cdba01 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220635059.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220778205.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220778205.png new file mode 100644 index 0000000000000000000000000000000000000000..62c786d7dacd69bae17ebe4074a2d429cd7f6851 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220778205.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220856725.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220856725.png new file mode 100644 index 0000000000000000000000000000000000000000..cc39aec87bb14a36eb6214a2ef39d45c631d4a2b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001220856725.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234009343.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234009343.gif new file mode 100644 index 0000000000000000000000000000000000000000..20b525e82ccdead4414f89e2e226992bc85e13c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234009343.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234011019.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234011019.gif new file mode 100644 index 0000000000000000000000000000000000000000..24f00c9f1aa6ec431a355f5dd2d88b920607cd05 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234011019.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234129289.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234129289.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dff7c90963c2e9a76aa63dbb434b9c55a747fba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234129289.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234130975.png b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234130975.png new file mode 100644 index 0000000000000000000000000000000000000000..21d56ef14b92d136e304c4bae6ab8b1f447557bb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234130975.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234287779.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234287779.gif new file mode 100644 index 0000000000000000000000000000000000000000..2398192bc5df690246dad3edfb82afe618b35dfd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234287779.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289455.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289455.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6296483cbe2994e36e97d422588f3a9156b56eb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289455.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289465.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289465.gif new file mode 100644 index 0000000000000000000000000000000000000000..b374c821e0e426b0e50e33910f33582e8b283ac9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234289465.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234327855.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234327855.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0e9d88f7ccf69a208bdf59ab5bd9a3dee2426f6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234327855.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329527.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329527.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ea0034e22041bd7fe8c5f73e655ddf367a8d5d5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329527.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329539.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329539.gif new file mode 100644 index 0000000000000000000000000000000000000000..f3e6017b6daddc0be529486e0bfaf8b39749e38f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234329539.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234342189.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234342189.gif new file mode 100644 index 0000000000000000000000000000000000000000..61571b390492f0116ceec215b03d261d2ce41139 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/figures/zh-cn_image_0000001234342189.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/application-dev/ui/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/ci-portal.png b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/ci-portal.png new file mode 100644 index 0000000000000000000000000000000000000000..91286f6c80765ff974e4998ced9544c99984c002 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/ci-portal.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/docs-sig.png b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/docs-sig.png new file mode 100644 index 0000000000000000000000000000000000000000..f71de06acdf9009792ec148adf52f9d071348b2c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/docs-sig.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/sig-task.png b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/sig-task.png new file mode 100644 index 0000000000000000000000000000000000000000..ed677967d298449ed62d5b66c405c38f86b06b09 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/sig-task.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\345\244\215\345\210\266\350\277\234\347\250\213\344\273\223\345\272\223.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\345\244\215\345\210\266\350\277\234\347\250\213\344\273\223\345\272\223.png" new file mode 100755 index 0000000000000000000000000000000000000000..dc499827a432f72adda7c12a70576f5e6e2a212b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\345\244\215\345\210\266\350\277\234\347\250\213\344\273\223\345\272\223.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\210\252\345\233\276\347\244\272\344\276\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\210\252\345\233\276\347\244\272\344\276\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..64ab1ca706103d109a124a1500ae3d8be8cc9d76 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\210\252\345\233\276\347\244\272\344\276\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2301.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2301.png" new file mode 100755 index 0000000000000000000000000000000000000000..2cd4167075c9c44c051f74607ebadf91d4b1ad5f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2301.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2302.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2302.png" new file mode 100755 index 0000000000000000000000000000000000000000..628f2eb893b83fde34be04b8a3182cce533ea704 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2302.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2303.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2303.png" new file mode 100755 index 0000000000000000000000000000000000000000..186247217b85db499d6a7c23d8700c5c2ba6aa2f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2303.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2304.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2304.png" new file mode 100755 index 0000000000000000000000000000000000000000..f8603eedddf5862bd9c80bd7f78b2e4163c26b7d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\346\227\240\346\240\207\351\242\2304.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\351\205\215\350\211\262\347\244\272\344\276\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\351\205\215\350\211\262\347\244\272\344\276\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..7f3a10718561e54c1221fb2c08464f7cf1a144be Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/figures/\351\205\215\350\211\262\347\244\272\344\276\213.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-caution.gif b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-caution.gif new file mode 100755 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-caution.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-note.gif new file mode 100755 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-notice.gif b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-notice.gif new file mode 100755 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/contribute/public_sys-resources/icon-notice.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/design/figures/API-Lifecycle.png b/website/docs/.vuepress/public/images/docs/zh-cn/design/figures/API-Lifecycle.png new file mode 100755 index 0000000000000000000000000000000000000000..365c6a228bccd70ce912be4958ba3e8c40bfd809 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/design/figures/API-Lifecycle.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/3516dv300.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/3516dv300.png new file mode 100644 index 0000000000000000000000000000000000000000..c4636401a20e37794d8ec28dc173e9308b2b72db Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/3516dv300.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212-27.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212-27.png" new file mode 100644 index 0000000000000000000000000000000000000000..e66ca6ffae9aec5f4f5b97ceccf2e37792e95f18 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212-27.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001141641532.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001141641532.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab29d3ee328f0bf30766b9561db445f35cd4e73 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001141641532.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188040429.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188040429.png new file mode 100644 index 0000000000000000000000000000000000000000..bc682a3dbd7e3de6a83a7292d9c6942c43909c98 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188040429.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188041297.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188041297.png new file mode 100644 index 0000000000000000000000000000000000000000..03aced616817cc2a54c7959b4cd3fd61bb720dfe Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/zh-cn_image_0000001188041297.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/\347\273\204\344\273\266\345\222\214\345\217\221\350\241\214\347\211\210\347\232\204\346\236\204\346\210\220-\350\213\261\346\226\207.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/\347\273\204\344\273\266\345\222\214\345\217\221\350\241\214\347\211\210\347\232\204\346\236\204\346\210\220-\350\213\261\346\226\207.png" new file mode 100644 index 0000000000000000000000000000000000000000..08d9dccdd2371b02f2732d0e4eb4ad9871dccdbe Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/bundles/figure/\347\273\204\344\273\266\345\222\214\345\217\221\350\241\214\347\211\210\347\232\204\346\236\204\346\210\220-\350\213\261\346\226\207.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/2\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/2\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..6ac63e41108abd4776621356c3034fc52b6f436f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/2\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/4\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/4\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..b5e82f09cd764b0cd9dc835e55f8f878b77eb91e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/4\347\272\277UART\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/ADC\347\273\237\344\270\200\346\234\215\345\212\241.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/ADC\347\273\237\344\270\200\346\234\215\345\212\241.png" new file mode 100755 index 0000000000000000000000000000000000000000..838f9a4416d901eb29b5d203b559b3dcfe29fed9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/ADC\347\273\237\344\270\200\346\234\215\345\212\241.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" new file mode 100755 index 0000000000000000000000000000000000000000..40a2c93c66002b00db0014471b46743a5d4620e8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\345\217\221\351\200\201-\346\216\245\346\224\266\346\216\245\345\217\243.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..833ff6cc89e49ed4210dd68a502e4b304ac1c273 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/DSI\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..8c246a7f6a67005d30808fac11172b2108bc4e2d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..833ff6cc89e49ed4210dd68a502e4b304ac1c273 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/GPIO\346\227\240\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..f2a5855dfeea0eaa8e4db38323b25858ef6a1e09 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..e3ee2f81110f790d38a7dcb32730d6d989384848 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\211\251\347\220\206\350\277\236\347\272\277\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..838f9a4416d901eb29b5d203b559b3dcfe29fed9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\347\273\237\344\270\200\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..beda2c0154e82a787616fdfb5643fade470da175 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/I2C\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..0d946444c5b2014ca21110e4b73dcb6a6d4b0f18 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\346\216\245\345\217\243.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\346\216\245\345\217\243.png" new file mode 100755 index 0000000000000000000000000000000000000000..6e39de8017f25a7e4cc6f51fa77ffcc9243ad818 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MIPI-DSI\346\216\245\345\217\243.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MMC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MMC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/MMC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..339d44368a15f4e58d7711c69f136bccdbc9d6db Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/PWM\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..808e3b3197e19ec7b1183fdd974bff7090c0b362 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/RTC\350\256\276\345\244\207\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..09085c82c461015a312650c0a9aad57116771e0a Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\232\204HOST-DEVICE\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\232\204HOST-DEVICE\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..5e94b319b49153385f2cf1372a3c43aef6b834e9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SDIO\347\232\204HOST-DEVICE\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\270\273\344\273\216\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\270\273\344\273\216\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..96f68d24918dacf9244e0ad020f2e99d77f589c4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\270\273\344\273\216\350\256\276\345\244\207\350\277\236\346\216\245\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..b876193bfd1d4dee4fd13d943593fea050cc8e39 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/SPI\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Sensor\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Sensor\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..c9661fda039f1cdf88b5df2ad9d78d8ad0d08050 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Sensor\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/TTL\346\216\245\345\217\243.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/TTL\346\216\245\345\217\243.png" new file mode 100755 index 0000000000000000000000000000000000000000..7209d111f142c3da063e0f761387c69b48725a98 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/TTL\346\216\245\345\217\243.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Touchscreen\345\231\250\344\273\266\345\270\270\347\224\250\347\256\241\350\204\232.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Touchscreen\345\231\250\344\273\266\345\270\270\347\224\250\347\256\241\350\204\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d33da5cc9efaa7d7d880623735e32a37f171dd8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Touchscreen\345\231\250\344\273\266\345\270\270\347\224\250\347\256\241\350\204\232.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..33ca15524892ebbad53859fab710a5309e326127 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/UART\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Device\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Device\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..3766cf8117505a0d47720dcbccc1030536921bdb Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Device\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Host\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Host\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..6bea2992afd00b031176998278c0bcfce0f8e843 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/USB-Host\351\251\261\345\212\250\346\250\241\345\236\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\241\206\346\236\266.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\241\206\346\236\266.png" new file mode 100755 index 0000000000000000000000000000000000000000..87b45b288d127e85f836d8673fda820f1069186b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\241\206\346\236\266.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\250\241\345\235\227\345\274\200\346\224\276\350\203\275\345\212\233\345\210\206\345\270\203\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\250\241\345\235\227\345\274\200\346\224\276\350\203\275\345\212\233\345\210\206\345\270\203\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..92b531d067c78063fb785c9ea802f90db1ac2e44 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/WLAN\346\250\241\345\235\227\345\274\200\346\224\276\350\203\275\345\212\233\345\210\206\345\270\203\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Watchdog\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Watchdog\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..23324872566e5affac8baa186a30b64b3257f673 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/Watchdog\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204Display\351\251\261\345\212\250\346\250\241\345\236\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204Display\351\251\261\345\212\250\346\250\241\345\236\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..1fa1231040f82789982f8a9b930304022bc9b2b5 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204Display\351\251\261\345\212\250\346\250\241\345\236\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204input\351\251\261\345\212\250\346\250\241\345\236\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204input\351\251\261\345\212\250\346\250\241\345\236\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..db8069cb7a0bc1dcd7906131ce87ad54cc8ea340 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\345\237\272\344\272\216HDF\351\251\261\345\212\250\346\241\206\346\236\266\347\232\204input\351\251\261\345\212\250\346\250\241\345\236\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\347\234\213\351\227\250\347\213\227\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\347\234\213\351\227\250\347\213\227\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..1b5ffbcd060a3315eb9ac48a5f7b1a95c801c24b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\347\234\213\351\227\250\347\213\227\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\351\205\215\347\275\256\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\351\205\215\347\275\256\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..3803784ebc2200f61b79420e52b010cad1a55eab Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/driver/figures/\351\205\215\347\275\256\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/11.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9105c313d5755f140920bbfc2399e3ccb5e2f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/11.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/Failed-to-open-the-serial-port.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/Failed-to-open-the-serial-port.png new file mode 100644 index 0000000000000000000000000000000000000000..0eee1bbff2e54816d6be05f7f3972a83f615884d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/Failed-to-open-the-serial-port.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..ad4fd618860ca9f79e9bdc39436c3b2f9cdb72de Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-six.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-six.png new file mode 100644 index 0000000000000000000000000000000000000000..39ae26ac8f3254d023d6b90a9f9bb8a8ff0c940b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-six.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-zlib.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-zlib.png new file mode 100755 index 0000000000000000000000000000000000000000..3b7f6f4766c54f6ca1e0057fc8f869785cc63e56 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/download-zlib.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png new file mode 100644 index 0000000000000000000000000000000000000000..afc9028fbb61db82e6f1384032bb32f56ed2ec35 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-firewall-and-network-protection.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-firewall-and-network-protection.png new file mode 100644 index 0000000000000000000000000000000000000000..775ce6fe99d4894b39f2bdd613097dcaf11a37b2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-firewall-and-network-protection.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-network-and-firewall-setting.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-network-and-firewall-setting.png new file mode 100644 index 0000000000000000000000000000000000000000..88cba0537b5431aa266364abbe19162130f4e3ca Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-network-and-firewall-setting.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-selecting-the-visual-studio-code-application.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-selecting-the-visual-studio-code-application.png new file mode 100644 index 0000000000000000000000000000000000000000..c735ae362e184083329cdf710289a169ad5625d4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/hi3516-selecting-the-visual-studio-code-application.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/reason-no-python-soft-link.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/reason-no-python-soft-link.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/reason-no-python-soft-link.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/solution-add-soft-link.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/solution-add-soft-link.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/solution-add-soft-link.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/terminal-list.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/terminal-list.png new file mode 100644 index 0000000000000000000000000000000000000000..a680547b305cccb4d8ea6cae3cbf2d046b841ff8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/terminal-list.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\347\275\221\347\273\234\344\270\215\351\200\232-Hi3516\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\347\275\221\347\273\234\344\270\215\351\200\232-Hi3516\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..548e03da4b76123cb67d41cbd1de4a0f33f5ef4b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\347\275\221\347\273\234\344\270\215\351\200\232-Hi3516\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..015c38ba5516395527bcf6715535238f02b2bad9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/faqs/figures/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/evolution-roadmap.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/evolution-roadmap.png new file mode 100644 index 0000000000000000000000000000000000000000..cc507c1d7d05f67d0ea07c5c1e9a76e776f1e1f8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/evolution-roadmap.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\214\205\347\256\241\347\220\206.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\214\205\347\256\241\347\220\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..d98c83b3ead8e863b4db1da755b4e743afd62f46 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\214\205\347\256\241\347\220\206.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\217\221\350\241\214\347\211\210\347\244\272\344\276\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\217\221\350\241\214\347\211\210\347\244\272\344\276\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..a4fa09ee58922bc9b182ac688ed4553b211c452c Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\345\217\221\350\241\214\347\211\210\347\244\272\344\276\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\347\273\204\344\273\266\345\256\232\345\210\266.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\347\273\204\344\273\266\345\256\232\345\210\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..889adfe235359b5ab438ff87afb37ef4d1cf2ad9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\347\273\204\344\273\266\345\256\232\345\210\266.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\350\256\276\347\275\256\347\274\226\350\257\221\347\225\214\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\350\256\276\347\275\256\347\274\226\350\257\221\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd2829efdc6d710559efe4650ddcba6b954b525e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/get-code/figure/\350\256\276\347\275\256\347\274\226\350\257\221\347\225\214\351\235\242.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/6-pin-distribution-and-physical-connection.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/6-pin-distribution-and-physical-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3f60fdd3b8770f9bcd847f58ecf9acf434f4f6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/6-pin-distribution-and-physical-connection.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/I2C\346\227\266\345\272\217\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/I2C\346\227\266\345\272\217\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..d633538c38e6e0c34ce21f704a023cf1bd7080e2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/I2C\346\227\266\345\272\217\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/LED\351\227\252\347\203\201\345\233\276.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/LED\351\227\252\347\203\201\345\233\276.gif" new file mode 100755 index 0000000000000000000000000000000000000000..2f88e12dbefb2e2d43114a7c65823f8a7f014e28 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/LED\351\227\252\347\203\201\345\233\276.gif" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/device-wlan-sdk-files.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/device-wlan-sdk-files.png new file mode 100755 index 0000000000000000000000000000000000000000..02075cda950596315c8c79ac3ab96587edf29394 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/device-wlan-sdk-files.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/empty-feature-ability.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/empty-feature-ability.png new file mode 100755 index 0000000000000000000000000000000000000000..86ddcfe8b78da2a68e70ac16f12e153a1277bcf3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/empty-feature-ability.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\220\257\345\212\250\347\244\272\344\276\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\220\257\345\212\250\347\244\272\344\276\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..881c86b3f1862cd09f013a154d3882060ba8bcba Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\220\257\345\212\250\347\244\272\344\276\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\256\214\346\225\264\345\267\245\347\250\213\347\233\256\345\275\225.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\256\214\346\225\264\345\267\245\347\250\213\347\233\256\345\275\225.png" new file mode 100755 index 0000000000000000000000000000000000000000..8e351841abe47da44b1b0b66eccc7e496141a90a Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\256\214\346\225\264\345\267\245\347\250\213\347\233\256\345\275\225.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\267\245\347\250\213\347\233\256\345\275\225.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\267\245\347\250\213\347\233\256\345\275\225.png" new file mode 100755 index 0000000000000000000000000000000000000000..31fc4ae71504eab0a405ac39041db41feabcf95f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\345\267\245\347\250\213\347\233\256\345\275\225.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\227\266\351\222\237\345\272\224\347\224\250\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\227\266\351\222\237\345\272\224\347\224\250\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ea61df009fbe2521c5e50317c34966908fd92fe Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\227\266\351\222\237\345\272\224\347\224\250\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\237\245\347\234\213\346\226\207\344\273\266\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\237\245\347\234\213\346\226\207\344\273\266\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..9d0d42f82c0e2a877c01397f038561bea07430e7 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\237\245\347\234\213\346\226\207\344\273\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\345\222\214\344\277\241\346\201\257\346\240\217\346\225\210\346\236\234.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\345\222\214\344\277\241\346\201\257\346\240\217\346\225\210\346\236\234.png" new file mode 100755 index 0000000000000000000000000000000000000000..a99a58a61e740148f182fb530c20227410314383 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\345\222\214\344\277\241\346\201\257\346\240\217\346\225\210\346\236\234.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\346\225\210\346\236\234.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\346\225\210\346\236\234.png" new file mode 100755 index 0000000000000000000000000000000000000000..5dc92bd57ba2e04bac5e9e23073e861295a64e89 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\240\207\351\242\230\346\240\217\346\225\210\346\236\234.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\241\214\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\241\214\351\235\242.png" new file mode 100755 index 0000000000000000000000000000000000000000..3bb036b573a5360657a2c5aa1882b497af2d9a39 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\241\214\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\267\273\345\212\240\351\241\265\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\267\273\345\212\240\351\241\265\351\235\242.png" new file mode 100755 index 0000000000000000000000000000000000000000..95c6d05e755bd9b2801b1c50c7582f947ecd2e4d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\346\267\273\345\212\240\351\241\265\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\347\251\272\346\260\224\350\264\250\351\207\217\347\233\221\346\265\213-App\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\347\251\272\346\260\224\350\264\250\351\207\217\347\233\221\346\265\213-App\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.gif" new file mode 100755 index 0000000000000000000000000000000000000000..8a82c5820ab70ec7b46e79fa4c537c78ca831e81 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\347\251\272\346\260\224\350\264\250\351\207\217\347\233\221\346\265\213-App\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\345\275\225\345\203\217\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\345\275\225\345\203\217\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" new file mode 100755 index 0000000000000000000000000000000000000000..5d9aea614e521f2a2c5e634917f16cebf24ae80d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\345\275\225\345\203\217\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\346\213\215\347\205\247\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\346\213\215\347\205\247\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" new file mode 100755 index 0000000000000000000000000000000000000000..1dd037de6e414565b5c1707fd0aa8bf8ff611f38 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\346\213\215\347\205\247\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\241\265\351\235\242\345\220\215\347\247\260.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\241\265\351\235\242\345\220\215\347\247\260.png" new file mode 100755 index 0000000000000000000000000000000000000000..026f0c61d55680baf7873b421ef9c76685f2f222 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\241\265\351\235\242\345\220\215\347\247\260.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\242\204\350\247\210\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\242\204\350\247\210\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" new file mode 100755 index 0000000000000000000000000000000000000000..c4ec2b5dfbeb02b3d6c5469dbe848debfe30d188 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\205\245\351\242\204\350\247\210\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\207\272\351\200\200\345\207\272\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\207\272\351\200\200\345\207\272\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" new file mode 100755 index 0000000000000000000000000000000000000000..8a4415351ff8f04e33bcd2d5dbb2b78a213bcbf2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\350\276\223\345\207\272\351\200\200\345\207\272\346\214\207\344\273\244\345\220\216\344\270\262\345\217\243\346\211\223\345\215\260\346\227\245\345\277\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\241\265\351\235\242\344\275\215\347\275\256\346\214\207\347\244\272\345\231\250\346\225\210\346\236\234\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\241\265\351\235\242\344\275\215\347\275\256\346\214\207\347\244\272\345\231\250\346\225\210\346\236\234\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..e987d37213d56b4badf2cb8043d9ca976044c887 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\241\265\351\235\242\344\275\215\347\275\256\346\214\207\347\244\272\345\231\250\346\225\210\346\236\234\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\242\204\350\247\210\346\225\210\346\236\234.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\242\204\350\247\210\346\225\210\346\236\234.jpg" new file mode 100755 index 0000000000000000000000000000000000000000..cce3217d3793a18521540e1a8e6ba349949ad765 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/guide/figures/\351\242\204\350\247\210\346\225\210\346\236\234.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\346\210\226\345\244\226\350\256\276\347\232\204\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\346\210\226\345\244\226\350\256\276\347\232\204\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..14764140174d4aed373e155871e4ee5a4c9d869d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\346\210\226\345\244\226\350\256\276\347\232\204\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..0469f0ca66c61ef1423de3b9dfe6bc8210f51c8d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/CPU\350\256\277\351\227\256\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Futex\350\256\276\350\256\241\345\233\276.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Futex\350\256\276\350\256\241\345\233\276.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..b720a53cda289dfea91a4baba36645640bf0aea0 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Futex\350\256\276\350\256\241\345\233\276.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/POSIX\346\216\245\345\217\243\346\241\206\346\236\266.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/POSIX\346\216\245\345\217\243\346\241\206\346\236\266.png" new file mode 100755 index 0000000000000000000000000000000000000000..d624728a9d235dfcfc597014012f8e226bfcd4f5 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/POSIX\346\216\245\345\217\243\346\241\206\346\236\266.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/VDSO\347\263\273\347\273\237\350\256\276\350\256\241.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/VDSO\347\263\273\347\273\237\350\256\276\350\256\241.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..633798d5a587904f92bd28f4fe8a98b08c19162d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/VDSO\347\263\273\347\273\237\350\256\276\350\256\241.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Vnode\345\210\233\345\273\272\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Vnode\345\210\233\345\273\272\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..8d6b584acacbce69f2dab55a49e22598c22fd368 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/Vnode\345\210\233\345\273\272\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/free\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/free\346\265\201\347\250\213\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..a8e6e991fc5a81574ad92c44d45bff71c450bbc3 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/free\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/malloc\351\200\232\350\277\207mmap\346\234\272\345\210\266\347\224\263\350\257\267\345\206\205\345\255\230\347\232\204\345\206\205\345\255\230\345\270\203\345\261\200.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/malloc\351\200\232\350\277\207mmap\346\234\272\345\210\266\347\224\263\350\257\267\345\206\205\345\255\230\347\232\204\345\206\205\345\255\230\345\270\203\345\261\200.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff50b0e8ef50063df83834091a8d0c0992372599 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/malloc\351\200\232\350\277\207mmap\346\234\272\345\210\266\347\224\263\350\257\267\345\206\205\345\255\230\347\232\204\345\206\205\345\255\230\345\270\203\345\261\200.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/node\350\212\202\347\202\271\345\244\264\344\277\241\346\201\257\346\267\273\345\212\240\346\240\241\351\252\214\345\200\274.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/node\350\212\202\347\202\271\345\244\264\344\277\241\346\201\257\346\267\273\345\212\240\346\240\241\351\252\214\345\200\274.png" new file mode 100644 index 0000000000000000000000000000000000000000..9a49391cd3d662305134251f4ee4261c10852106 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/node\350\212\202\347\202\271\345\244\264\344\277\241\346\201\257\346\267\273\345\212\240\346\240\241\351\252\214\345\200\274.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127390512.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127390512.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d38a9a5f1789f6ce5d2ad32eb19f2b1c847872 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127390512.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127519136.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127519136.png new file mode 100644 index 0000000000000000000000000000000000000000..ad13c7729857efdad9d53e20a07a1f28e85c2361 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127519136.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127520662.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127520662.png new file mode 100644 index 0000000000000000000000000000000000000000..94ca9a41688c06a31b44edca5d9d3add3bfdba6f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001127520662.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132778524.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132778524.png new file mode 100644 index 0000000000000000000000000000000000000000..7836a009e5e3cb6351c807daf9b927c7d3b71a86 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132778524.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132935054.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132935054.png new file mode 100644 index 0000000000000000000000000000000000000000..238a15fa82b6095a13ee54bd3014ed3c08c21b4e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001132935054.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173429547.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173429547.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8df5ef5d0f321e976008cbf382e228d12677d6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173429547.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173449871.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173449871.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5c5f4193cb03892f45906263f600478b65136c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001173449871.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001176974089.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001176974089.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9a02ed3386934d341befcfbeb1a561a67955ba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001176974089.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001178856385.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001178856385.png new file mode 100644 index 0000000000000000000000000000000000000000..25da22c730220aec03a08ca5ca5cfda5993b4a7e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001178856385.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001191018697.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001191018697.png new file mode 100644 index 0000000000000000000000000000000000000000..d5693bd916ea4f009687af8233054baedf06ddf3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/zh-cn_image_0000001191018697.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276-21.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276-21.png" new file mode 100644 index 0000000000000000000000000000000000000000..3da92ebe0448375d76e32950f301f72bc7282547 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276-21.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..3da92ebe0448375d76e32950f301f72bc7282547 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\213\344\273\266\350\277\220\344\275\234\345\216\237\347\220\206\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-23.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-23.png" new file mode 100644 index 0000000000000000000000000000000000000000..b04bf9db5baa85756ba1a12039a160301a4ec1fd Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-23.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..37559a2a230b4d0a17fa07aaac2ea5ed3923b4df Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\272\222\346\226\245\351\224\201\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..75c79e501c27a2c41ff011133197eb646981b0f3 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8920829c4f329643974a00a47775aac7de4ce25 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\273\273\345\212\241\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-22.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-22.png" new file mode 100644 index 0000000000000000000000000000000000000000..265c77529e451d8d0c75ef5c653f318687c588cb Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276-22.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..02437a72c3de38cbddf5233282ef9354220002bf Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\344\277\241\345\217\267\351\207\217\350\277\220\344\275\234\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\346\230\240\345\260\204\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\346\230\240\345\260\204\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..cbd0d5b871519d388a07f2d20b655c2f42e2e384 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\346\230\240\345\260\204\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\347\224\263\350\257\267\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\347\224\263\350\257\267\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..9d502df58aeb0e4f01c83628c82a6a9d974765ab Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\347\224\263\350\257\267\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\351\207\212\346\224\276\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\351\207\212\346\224\276\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c4f9ba8dba9112333f43dfe8db6d3f046bb29631 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\345\255\230\351\207\212\346\224\276\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab769d0228a005f3332d86e1443712e157c7f32d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..aab178cde608403d259af3cd10c11188e213de08 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225-19.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225-19.png" new file mode 100644 index 0000000000000000000000000000000000000000..8fa49b71f46505f335a5e782cbef362f7336fdaa Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225-19.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276-20.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276-20.png" new file mode 100644 index 0000000000000000000000000000000000000000..9d98f09b73bd77ef25c732a750611bb3fb3c6b65 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276-20.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..e67cd13c295d19b6ce45c4749644eea42ada7f05 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\206\205\345\255\230\347\256\241\347\220\206\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\212\240\350\275\275\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\212\240\350\275\275\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..66f78d73d491b36b8ca9333919adefa4252b4983 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\212\250\346\200\201\345\212\240\350\275\275\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..131519e92cadb00d4ae33f180fba7e410120f98f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257\351\223\276\350\241\250.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257\351\223\276\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..17c3d03c4b35ad7b8d31e9ec091d683d498a0d90 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\345\206\205\345\255\230\350\212\202\347\202\271\344\277\241\346\201\257\351\223\276\350\241\250.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\346\240\210\345\210\206\346\236\220\345\216\237\347\220\206\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\346\240\210\345\210\206\346\236\220\345\216\237\347\220\206\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..6ac9200e867f2c87d14ef89ca8c15102e83d4c10 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\345\240\206\346\240\210\345\210\206\346\236\220\345\216\237\347\220\206\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\226\207\344\273\266\346\237\245\346\211\276\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\226\207\344\273\266\346\237\245\346\211\276\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..b06ce7a382707361fadf8f6864e02b973e3af39e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\226\207\344\273\266\346\237\245\346\211\276\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\263\204\346\274\217\347\202\271\344\273\243\347\240\201\350\241\214\345\256\232\344\275\215\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\263\204\346\274\217\347\202\271\344\273\243\347\240\201\350\241\214\345\256\232\344\275\215\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..0b882d1347c0aa55aa855808847bfb2fad8d8693 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\346\263\204\346\274\217\347\202\271\344\273\243\347\240\201\350\241\214\345\256\232\344\275\215\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\211\251\347\220\206\345\206\205\345\255\230\344\275\277\347\224\250\345\210\206\345\270\203\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\211\251\347\220\206\345\206\205\345\255\230\344\275\277\347\224\250\345\210\206\345\270\203\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..317de70b8fc9a0186e0e1db74baa22b637281e47 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\211\251\347\220\206\345\206\205\345\255\230\344\275\277\347\224\250\345\210\206\345\270\203\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\250\213\345\272\217\346\211\247\350\241\214\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\250\213\345\272\217\346\211\247\350\241\214\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..ef0759cead5eb6fcd30cefcd6a7145d43578eb1a Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\250\213\345\272\217\346\211\247\350\241\214\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\263\273\347\273\237\350\260\203\347\224\250\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\263\273\347\273\237\350\260\203\347\224\250\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..3e992223c5cfac9e45331a898cf2e86b755e5bd6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\347\263\273\347\273\237\350\260\203\347\224\250\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\275\273\351\207\217\347\263\273\347\273\237\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\275\273\351\207\217\347\263\273\347\273\237\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd73700c41d62b47005ad0612c74f2823a1921a9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\275\273\351\207\217\347\263\273\347\273\237\345\212\250\346\200\201\345\206\205\345\255\230\346\240\270\345\277\203\347\256\227\346\263\225.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\346\240\221\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\346\240\221\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..6888a98f6d3acb00451b16de55c9ce95170948e6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\346\240\221\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..d08425a0267084587dba656c01e9d529be6782b1 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\350\277\233\347\250\213\347\212\266\346\200\201\350\277\201\347\247\273\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\230\237\345\210\227\350\257\273\345\206\231\346\225\260\346\215\256\346\223\215\344\275\234\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\230\237\345\210\227\350\257\273\345\206\231\346\225\260\346\215\256\346\223\215\344\275\234\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c1107463e058df1402f1b19d02b58f0ccb0898e2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\230\237\345\210\227\350\257\273\345\206\231\346\225\260\346\215\256\346\223\215\344\275\234\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\231\346\200\201\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\231\346\200\201\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..d3bf07dcb1c4e0e9207eb1cf083cb9aeae945394 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\231\346\200\201\345\206\205\345\255\230\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\236\350\277\236\347\273\255\346\200\247\345\206\205\345\255\230\345\220\210\344\270\200\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\236\350\277\236\347\273\255\346\200\247\345\206\205\345\255\230\345\220\210\344\270\200\347\244\272\346\204\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..43e98c03680a9d9d8c720818b2094905da49ec85 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/kernel/figure/\351\235\236\350\277\236\347\273\255\346\200\247\345\206\205\345\255\230\345\220\210\344\270\200\347\244\272\346\204\217\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/HDF_WIFI.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/HDF_WIFI.png new file mode 100644 index 0000000000000000000000000000000000000000..56e6ab3aee9a539c76afd3edac98f21bff0766d5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/HDF_WIFI.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony-\351\251\261\345\212\250\345\210\206\347\261\273.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony-\351\251\261\345\212\250\345\210\206\347\261\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..7edac54ec2fcd1fc93330d47acb2d44fceef2710 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony-\351\251\261\345\212\250\345\210\206\347\261\273.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony\345\220\257\345\212\250\346\210\220\345\212\237\347\225\214\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony\345\220\257\345\212\250\346\210\220\345\212\237\347\225\214\351\235\242.png" new file mode 100755 index 0000000000000000000000000000000000000000..7d0b723345d413067e0142b2035205133c907ab0 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/OpenHarmony\345\220\257\345\212\250\346\210\220\345\212\237\347\225\214\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/WLAN\350\212\257\347\211\207.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/WLAN\350\212\257\347\211\207.png" new file mode 100644 index 0000000000000000000000000000000000000000..c325922a5ee67edb81aa526de1547716fae1a04b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/WLAN\350\212\257\347\211\207.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/init\345\220\257\345\212\250\346\255\243\345\270\270\346\227\245\345\277\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/init\345\220\257\345\212\250\346\255\243\345\270\270\346\227\245\345\277\227.png" new file mode 100644 index 0000000000000000000000000000000000000000..a1e7f8b695bebf395ea6cfa0aed55495c4896118 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/init\345\220\257\345\212\250\346\255\243\345\270\270\346\227\245\345\277\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/liteos-m\345\206\205\346\240\270\346\250\241\345\235\227\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/liteos-m\345\206\205\346\240\270\346\250\241\345\235\227\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..2cd5f7a4c095429f8e447b17562b37051343c689 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/liteos-m\345\206\205\346\240\270\346\250\241\345\235\227\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001162805936.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001162805936.png new file mode 100644 index 0000000000000000000000000000000000000000..0546e82fc91c605ba78f9bb56c4de88066c8c189 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001162805936.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208365855.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208365855.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb585b4f3780141a122563f9d05bb47c1e30dd7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208365855.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208524821.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208524821.png new file mode 100644 index 0000000000000000000000000000000000000000..2668799e706c34df82d75050e701f450e226a536 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/zh-cn_image_0000001208524821.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\344\270\232\345\212\241\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\344\270\232\345\212\241\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..cbc70a899f77382e9e052c30f2a69b61764d2643 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\344\270\232\345\212\241\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\241\206\346\236\266.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\241\206\346\236\266.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..dd8e1c235633c3e42fcd1360b66b3ce3452db02d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\206\205\346\240\270\345\220\257\345\212\250\346\241\206\346\236\266.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\215\225\346\235\277\351\251\261\345\212\250\351\200\202\351\205\215\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\215\225\346\235\277\351\251\261\345\212\250\351\200\202\351\205\215\346\265\201\347\250\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..c886985b8cb0db42b71a693df78a1aac20b88ac2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\215\225\346\235\277\351\251\261\345\212\250\351\200\202\351\205\215\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..93f747cae385fb714334d5145103d6f7ddfacd95 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\237\272\344\272\216linux\345\206\205\346\240\270\347\232\204OS\351\225\234\345\203\217\347\273\223\346\236\204\345\222\214\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\237\272\344\272\216linux\345\206\205\346\240\270\347\232\204OS\351\225\234\345\203\217\347\273\223\346\236\204\345\222\214\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..b241920b30fea1b2a432f6ba01045bbfbae7fb58 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\345\237\272\344\272\216linux\345\206\205\346\240\270\347\232\204OS\351\225\234\345\203\217\347\273\223\346\236\204\345\222\214\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\225\264\344\275\223\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\225\264\344\275\223\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..39c6cb96611a7ced5e17bbeee96ac77ba5c1bf58 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\225\264\344\275\223\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\255\243\345\270\270\350\277\233\345\205\245shell\345\220\216\350\276\223\345\205\245ls\345\221\275\344\273\244\344\270\262\345\217\243\346\211\223\345\215\260.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\255\243\345\270\270\350\277\233\345\205\245shell\345\220\216\350\276\223\345\205\245ls\345\221\275\344\273\244\344\270\262\345\217\243\346\211\223\345\215\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..efb1e17b00d37b072a3032678144984e2e13b2d6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\346\255\243\345\270\270\350\277\233\345\205\245shell\345\220\216\350\276\223\345\205\245ls\345\221\275\344\273\244\344\270\262\345\217\243\346\211\223\345\215\260.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\350\212\257\347\211\207\347\247\273\346\244\215\345\205\263\351\224\256\346\255\245\351\252\244.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\350\212\257\347\211\207\347\247\273\346\244\215\345\205\263\351\224\256\346\255\245\351\252\244.png" new file mode 100755 index 0000000000000000000000000000000000000000..3cbefc997a46c6175735c6e3b8b6e29ff03b05d4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/porting/figure/\350\212\257\347\211\207\347\247\273\346\244\215\345\205\263\351\224\256\346\255\245\351\252\244.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-caution.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-caution.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-note.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-notice.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/public_sys-resources/icon-notice.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1-11.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1-11.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed1535a6bc23dc5bd02fbd5a3f1392f46ad8d83 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1-11.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..791dfeae272070b7e285ea3070ebd3b1e9100eb5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/10.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7f6f4766c54f6ca1e0057fc8f869785cc63e56 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/10.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/11.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9105c313d5755f140920bbfc2399e3ccb5e2f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/11.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334-10.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334-10.png new file mode 100644 index 0000000000000000000000000000000000000000..5b573a4ddfe89fe25cb1b567736823244fdb9e97 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334-10.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334.png new file mode 100644 index 0000000000000000000000000000000000000000..5b573a4ddfe89fe25cb1b567736823244fdb9e97 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/2021-01-27_170334.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3-0.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3-0.png new file mode 100644 index 0000000000000000000000000000000000000000..f354b2d27ce06bd5af6a8702c0894bf5c50a97bb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3-0.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..91f3fa22153f501e308fab46f92f2e95995f1917 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..6975fb5fef92e35dec2de84b7e7035a39794bdf4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/3516\346\255\243\351\235\242.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/4.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5fa2829949e59d498da9dd5ff1f48fa0647cf1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/4.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/5.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a76a6922315fe595ae4214331ce322766b3b48 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/5.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..6975fb5fef92e35dec2de84b7e7035a39794bdf4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..edb1711f3c1fa906940d8cbb8d8fcdeb2badd2b6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3516\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518EV300\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518EV300\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..93cadcb6edf9d8b4d701faf7e070f74cc09ef553 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518EV300\345\215\225\346\235\277\346\255\243\351\235\242\345\244\226\350\247\202\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..3e0ff2fdbfbaca179f1320b5d53ebf755d1c84a3 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\346\255\243\350\203\214\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..ffdeca24f4b017d7a35fc96999d04faaa09972e5 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3518\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..5086d2b4518cfea4040f3cc243abb2e6087af350 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\345\274\200\345\217\221\346\235\277\345\244\226\350\247\202\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..9e53432ce41e67ee3e93e96d78262a6ace41d383 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Hi3861\347\274\226\350\257\221\350\256\276\347\275\256\345\233\276\344\276\213-Docker\346\226\271\345\274\217.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\346\255\243\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\346\255\243\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..fbd3cb48f2cb35c02595be0293733644e16020bd Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\346\255\243\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\350\203\214\351\235\242.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\350\203\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..8baa9c7c75625c18979d30ab52b2a0f64e0e8349 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/RK3568\345\274\200\345\217\221\346\235\277\350\203\214\351\235\242.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212.png" new file mode 100755 index 0000000000000000000000000000000000000000..e66ca6ffae9aec5f4f5b97ceccf2e37792e95f18 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/SCons\345\256\211\350\243\205\346\210\220\345\212\237\347\225\214\351\235\242-\347\211\210\346\234\254\350\246\201\346\261\2023-0-4\344\273\245\344\270\212.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Save-the-parameter-settings.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Save-the-parameter-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..47231369bbeb827e70a8720b7a3d03ac58fad0c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Save-the-parameter-settings.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap22.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap22.png new file mode 100644 index 0000000000000000000000000000000000000000..d94579cb7ff78a40cef6cf5d1945e742a9551e8b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap22.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap23.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap23.png new file mode 100644 index 0000000000000000000000000000000000000000..92e51762a2dcd636135f6e7856073a5b8aecd1d6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap23.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap24.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap24.png new file mode 100644 index 0000000000000000000000000000000000000000..d4996e347660921fc3f723e5b48942f1fd6636f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/Snap24.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..ad4fd618860ca9f79e9bdc39436c3b2f9cdb72de Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/U-boot\347\203\247\345\206\231\345\256\214\346\210\220\344\270\262\345\217\243\346\230\276\347\244\272\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/bootloader.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/bootloader.png new file mode 100644 index 0000000000000000000000000000000000000000..e674bafb0adaa4c0ff8efaf297ee52bab3165212 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/bootloader.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/button.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/button.png new file mode 100755 index 0000000000000000000000000000000000000000..686385e096a24ec1906169d2b11f75030c386b9f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/button.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1-4.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1-4.png new file mode 100644 index 0000000000000000000000000000000000000000..208a4fbace342514f59f0000c4d50f5dc9321f0f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1-4.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1.png new file mode 100644 index 0000000000000000000000000000000000000000..208a4fbace342514f59f0000c4d50f5dc9321f0f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/changjian1.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png new file mode 100644 index 0000000000000000000000000000000000000000..0a54838f89062fd67328ef76e4a1cf770c6aee13 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png new file mode 100644 index 0000000000000000000000000000000000000000..67d8044b72056d4ed6230ccc4ad99d5e954596b6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-import-projects.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..6c575b3495a0503e463a71f2b50766bc2f3e1b94 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-restart-the-development-board.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-restart-the-development-board.png new file mode 100644 index 0000000000000000000000000000000000000000..281958fe76a787acc5d0b98f5ea248fa5abf2405 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-restart-the-development-board.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-upload-start-burning.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-upload-start-burning.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2db198cc61ed10136f0e3382deed352300a62b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3516-upload-start-burning.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-bootloader.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-bootloader.png new file mode 100644 index 0000000000000000000000000000000000000000..2d67376af75fa7693ed16299de75255c08178c14 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-bootloader.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-import-projects.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..d54cd737e32311492dc2058251e7cb8acf905fb5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-monitor.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..d287df0c64ca5e2ffc27aa1acd820cdf0e6b40c6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-monitor.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reboot-success.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reboot-success.png new file mode 100644 index 0000000000000000000000000000000000000000..7a063003ded7d94e8b2a030a3df855f6915c933c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reboot-success.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reset-success.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reset-success.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3d4e7d2a36e2b880f592ec88b01b6c4bef07cc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3518-reset-success.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-burning-succeeded.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-burning-succeeded.png new file mode 100755 index 0000000000000000000000000000000000000000..3628f3f4778012a577d4ee28c703669eb5533594 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-burning-succeeded.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-import-projects.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-import-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..6eaa9eb2450ef15e7124df610712fc797c548351 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-import-projects.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-record-the-serial-port-number.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-record-the-serial-port-number.png new file mode 100755 index 0000000000000000000000000000000000000000..43496f076a463ec6fbf320b358a32505284ff40f Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-record-the-serial-port-number.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-upload.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..8dde7632636856203030c2abf0867f03abaafcba Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hi3861-upload.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hisilicon-arm-linux.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hisilicon-arm-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..114a8e1c31ab1a58ece6b0d1e00d673256b42b2b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/hisilicon-arm-linux.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project-confirm.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..27fe1d133a31b275a2788cab1f5b37dd3450a7df Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project-confirm.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba534eaf39165891a31c7837ae7ff4126f6414c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/import-project.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/ip-address-information.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/ip-address-information.png new file mode 100644 index 0000000000000000000000000000000000000000..72dd05e3ae1eb91156df98cb1915b6264b3bbe5a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/ip-address-information.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/monitor.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..bc935a8970e39629d2c93f6b92f96c5fa7d1a49b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/monitor.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/open-the-serial-port-tool.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/open-the-serial-port-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..6d350e5d4db03fecc5c1b8055b01cdf73667ed36 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/open-the-serial-port-tool.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/press-any-key-to-enter-the-system.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/press-any-key-to-enter-the-system.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e0e2bec9e8ce82561047fe7d5f000e0d2c4f962 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/press-any-key-to-enter-the-system.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reboot_success.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reboot_success.png new file mode 100644 index 0000000000000000000000000000000000000000..7a063003ded7d94e8b2a030a3df855f6915c933c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reboot_success.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/record-the-serial-port-number.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/record-the-serial-port-number.png new file mode 100644 index 0000000000000000000000000000000000000000..09f33e3992c0c1d78713eea949e4b9a19f5802ec Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/record-the-serial-port-number.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reset_success.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reset_success.png new file mode 100644 index 0000000000000000000000000000000000000000..67e50038e79cf0f7c2a6bd79b48c63b7557179a4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/reset_success.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-helloworld.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..da22f3989b1daa362c7471789cdaa94ffb862f75 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-helloworld.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-run-configuration.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-run-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..504da23ba456a9c377525e22c4630361286b5dd7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/rk3568-run-configuration.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/setenv-bootargs.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/setenv-bootargs.png new file mode 100644 index 0000000000000000000000000000000000000000..802cce4e760102043f177cb2fa71e8bd16539ba1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/setenv-bootargs.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/start-the-system.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/start-the-system.png new file mode 100644 index 0000000000000000000000000000000000000000..5006140f00ec1195d04297cdeb26ad935fb9f0e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/start-the-system.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png new file mode 100644 index 0000000000000000000000000000000000000000..0bbff7eb0b5ab322e8995acf2b86d93038c8530c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png new file mode 100644 index 0000000000000000000000000000000000000000..29a273e5115ffd7a0724cde58215ffb79827576c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png new file mode 100644 index 0000000000000000000000000000000000000000..dee491aaa290b425a4a6cd9e4aee61b3b05cc3dc Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png new file mode 100644 index 0000000000000000000000000000000000000000..baac7b26450b8bc195a0db0bb3bb41119c0d9828 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png new file mode 100644 index 0000000000000000000000000000000000000000..c5548cb227bd024b49aa3adba0a20869581448e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd316dfd5a64c873682bf865a79ec1f2354cc40 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png new file mode 100644 index 0000000000000000000000000000000000000000..67d8044b72056d4ed6230ccc4ad99d5e954596b6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ac531b8265f265e2bd25518b212143fc61e4cf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png new file mode 100644 index 0000000000000000000000000000000000000000..c846be0d2767953df4a3ac78408963f252af040d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png new file mode 100644 index 0000000000000000000000000000000000000000..7de3c25e7ef2abc8d85d8bc945249f571f6bf0c3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png new file mode 100644 index 0000000000000000000000000000000000000000..24fb00fddc1213037e63e7674b4d2ce1bf6118f6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png new file mode 100644 index 0000000000000000000000000000000000000000..527fe8b9836daf35c8300e0e84bdb2ca390f85a5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png new file mode 100644 index 0000000000000000000000000000000000000000..1b002b247b704150040e90ecb149d782ba8db3a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png new file mode 100644 index 0000000000000000000000000000000000000000..84d42fffbd87d0e719c69b6deda9e6c5e2b2db13 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc2bbf53d65b0c66f07b330aa8881c5194328bd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png new file mode 100644 index 0000000000000000000000000000000000000000..68b1730cb6d1b91b6e364c7301d6dcc4c9976ec7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaf25e47e2e47ecad8aebe463aeccdf1d8bf85e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png new file mode 100644 index 0000000000000000000000000000000000000000..99ed8317b5cee8e5e9d460ff31d5c8a1a2fe343e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba77b7feaca23043e71171824cdead7c4f8f108 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png new file mode 100644 index 0000000000000000000000000000000000000000..c93b7b610138e91c0b6b171cb515f540163e731b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png new file mode 100644 index 0000000000000000000000000000000000000000..a8037d1ebc95a3c9383d87678981b3ae5ccc8144 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png new file mode 100644 index 0000000000000000000000000000000000000000..da22f3989b1daa362c7471789cdaa94ffb862f75 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png new file mode 100644 index 0000000000000000000000000000000000000000..35a95f501f5e3c5c8ebf187e7f29e6af0a4566b0 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png new file mode 100644 index 0000000000000000000000000000000000000000..9f418473587db76e56981c0f384bf4b8634e3911 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4fd618860ca9f79e9bdc39436c3b2f9cdb72de Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png new file mode 100644 index 0000000000000000000000000000000000000000..1b002b247b704150040e90ecb149d782ba8db3a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png new file mode 100644 index 0000000000000000000000000000000000000000..9284df45bb1415d84f0325df85b4eb5c223281e8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bc36af5339ea5a4f67640e69836965b3776e17 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png new file mode 100644 index 0000000000000000000000000000000000000000..39ae26ac8f3254d023d6b90a9f9bb8a8ff0c940b Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png new file mode 100644 index 0000000000000000000000000000000000000000..8d396bf2fc7b36362a95c6719d202b2f057e4a46 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png new file mode 100644 index 0000000000000000000000000000000000000000..764643ce134811551984284ed5ec6b60943f8ea4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba77b7feaca23043e71171824cdead7c4f8f108 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png new file mode 100644 index 0000000000000000000000000000000000000000..6c862cc279d2936ddec4ecda0a23e1d55a63cbee Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png new file mode 100644 index 0000000000000000000000000000000000000000..07914f4f34921b06819ceb49cf63366dcc7f8502 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d98bd6deb22fc7814a42630b8565d9b5979659 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png new file mode 100644 index 0000000000000000000000000000000000000000..5a709092da504fbb090ad8d44938e435712bc0eb Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png new file mode 100644 index 0000000000000000000000000000000000000000..6117c80b45f64348ad307e64723495cdc8c45cb1 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png new file mode 100644 index 0000000000000000000000000000000000000000..764643ce134811551984284ed5ec6b60943f8ea4 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png new file mode 100644 index 0000000000000000000000000000000000000000..579d6e190d4824cb866f90f2f3e72c4493aa6f4c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png new file mode 100644 index 0000000000000000000000000000000000000000..c6507f28b980b84c65102aa844e93f806cb490a9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" new file mode 100644 index 0000000000000000000000000000000000000000..afc9028fbb61db82e6f1384032bb32f56ed2ec35 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234-9.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..afc9028fbb61db82e6f1384032bb32f56ed2ec35 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\201\350\256\270Visual-Studio-Code\345\272\224\347\224\250\350\256\277\351\227\256\347\275\221\347\273\234.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c1f60638087d0fe56127f2f842244355afad85f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257-3.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c1f60638087d0fe56127f2f842244355afad85f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\345\205\263\351\227\255\344\270\262\345\217\243\347\273\210\347\253\257.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..0eee1bbff2e54816d6be05f7f3972a83f615884d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276-1.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..0eee1bbff2e54816d6be05f7f3972a83f615884d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\211\223\345\274\200\344\270\262\345\217\243\345\244\261\350\264\245\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" new file mode 100644 index 0000000000000000000000000000000000000000..c735ae362e184083329cdf710289a169ad5625d4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276-8.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c735ae362e184083329cdf710289a169ad5625d4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276Visual-Studio-Code\345\272\224\347\224\250\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfa0ceb21f5a11d459b93721f512309c9d6da2ac Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257-2.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfa0ceb21f5a11d459b93721f512309c9d6da2ac Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\237\245\346\211\276\346\230\257\345\220\246\345\255\230\345\234\250\345\215\240\347\224\250\344\270\262\345\217\243\347\232\204\347\273\210\347\253\257.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..cb0aff9ea08110a305f663126f5e26f150f89344 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\346\240\207\345\207\206\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..31c5a26705cd1da6cf9cb6f3bb356994e4ecc22e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\263\273\347\273\237\345\220\257\345\212\250\346\225\210\346\236\234\345\233\276.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" new file mode 100644 index 0000000000000000000000000000000000000000..548e03da4b76123cb67d41cbd1de4a0f33f5ef4b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276-5.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..548e03da4b76123cb67d41cbd1de4a0f33f5ef4b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\344\270\215\351\200\232-\345\215\225\346\235\277\346\227\240\346\263\225\350\216\267\345\217\226\346\226\207\344\273\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" new file mode 100644 index 0000000000000000000000000000000000000000..88cba0537b5431aa266364abbe19162130f4e3ca Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276-6.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..88cba0537b5431aa266364abbe19162130f4e3ca Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\347\275\221\347\273\234\351\230\262\347\201\253\345\242\231\350\256\276\347\275\256\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..c453bf36bea44aad382c65cd18ea0d8abbead981 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\277\253\351\200\237\345\205\245\351\227\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" new file mode 100644 index 0000000000000000000000000000000000000000..775ce6fe99d4894b39f2bdd613097dcaf11a37b2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276-7.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..775ce6fe99d4894b39f2bdd613097dcaf11a37b2 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/quick-start/figures/\351\230\262\347\201\253\345\242\231\345\222\214\347\275\221\347\273\234\344\277\235\346\212\244\347\225\214\351\235\242\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/1-\346\225\217\346\204\237\346\235\203\351\231\220\345\274\271\347\252\227.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/1-\346\225\217\346\204\237\346\235\203\351\231\220\345\274\271\347\252\227.png" new file mode 100755 index 0000000000000000000000000000000000000000..fff1da1f834037c30a874b2fd76cad402b9ff9ce Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/1-\346\225\217\346\204\237\346\235\203\351\231\220\345\274\271\347\252\227.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/3-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/3-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216.png" new file mode 100755 index 0000000000000000000000000000000000000000..2c729ec07bb1b74ef1936767cc3e9d19d4846835 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/3-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/4-\351\232\220\347\247\201\345\243\260\346\230\216\345\217\230\346\233\264\351\200\232\347\237\245.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/4-\351\232\220\347\247\201\345\243\260\346\230\216\345\217\230\346\233\264\351\200\232\347\237\245.png" new file mode 100755 index 0000000000000000000000000000000000000000..90bf11ec3746c9fb00ea43608c5cf7d822f692e4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/4-\351\232\220\347\247\201\345\243\260\346\230\216\345\217\230\346\233\264\351\200\232\347\237\245.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/5-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216\345\205\245\345\217\243.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/5-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216\345\205\245\345\217\243.png" new file mode 100755 index 0000000000000000000000000000000000000000..a0821e9436b918bffb1ea3b3756fe6d4cc969f08 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/5-\345\272\224\347\224\250\351\232\220\347\247\201\345\243\260\346\230\216\345\205\245\345\217\243.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/6-2-\351\232\220\347\247\201\345\243\260\346\230\216\346\222\244\351\224\200.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/6-2-\351\232\220\347\247\201\345\243\260\346\230\216\346\222\244\351\224\200.png" new file mode 100755 index 0000000000000000000000000000000000000000..c504f5246b2988876649a3f5d0c9059c7a0b2441 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/6-2-\351\232\220\347\247\201\345\243\260\346\230\216\346\222\244\351\224\200.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/DAC\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/DAC\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..42300c9ca287049f03a8f90a8bba9c2cdc73e109 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/DAC\346\265\201\347\250\213\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/HUKS\345\212\237\350\203\275\347\273\223\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/HUKS\345\212\237\350\203\275\347\273\223\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..87def1af5551ba7236979df89eaabadef1d362d8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/HUKS\345\212\237\350\203\275\347\273\223\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\345\256\211\345\205\250\344\277\235\351\232\234\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\345\256\211\345\205\250\344\277\235\351\232\234\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..fcab754c7446d4b886cc1d68d52832b1a006370d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\345\256\211\345\205\250\344\277\235\351\232\234\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\350\256\276\345\244\207\351\227\264\345\273\272\347\253\213\345\217\257\344\277\241\345\205\263\347\263\273\346\265\201\347\250\213\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\350\256\276\345\244\207\351\227\264\345\273\272\347\253\213\345\217\257\344\277\241\345\205\263\347\263\273\346\265\201\347\250\213\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..69ce9db229347ee2de2401fc0caef8f82d6f2035 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/security/figure/\350\256\276\345\244\207\351\227\264\345\273\272\347\253\213\345\217\257\344\277\241\345\205\263\347\263\273\346\265\201\347\250\213\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/20200721-223604(eSpace).gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/20200721-223604(eSpace).gif new file mode 100755 index 0000000000000000000000000000000000000000..8a5dcafb1c14c744d60590bc7ad913569a2fa92c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/20200721-223604(eSpace).gif differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\344\270\216AbilitySlice\347\232\204\345\205\263\347\263\273\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\344\270\216AbilitySlice\347\232\204\345\205\263\347\263\273\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..d75201bb385d4a02d05c38174a5be216953da9c6 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\344\270\216AbilitySlice\347\232\204\345\205\263\347\263\273\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..a7335c79e316dcefaa91de546cf1604644e471df Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\347\256\241\347\220\206\346\234\215\345\212\241\345\222\214\345\214\205\347\256\241\347\220\206\346\234\215\345\212\241\345\220\257\345\212\250.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\347\256\241\347\220\206\346\234\215\345\212\241\345\222\214\345\214\205\347\256\241\347\220\206\346\234\215\345\212\241\345\220\257\345\212\250.png" new file mode 100755 index 0000000000000000000000000000000000000000..b84f177a7d26094ea96ad7e28b9872217fe79ab8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/Ability\347\256\241\347\220\206\346\234\215\345\212\241\345\222\214\345\214\205\347\256\241\347\220\206\346\234\215\345\212\241\345\220\257\345\212\250.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-A\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-A\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" new file mode 100755 index 0000000000000000000000000000000000000000..c7e8c809207f0dc8965a2f8a41b55f0ae2abe13b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-A\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-M\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-M\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" new file mode 100755 index 0000000000000000000000000000000000000000..883dccf82ef3ec1828893afa314a66ca2f23c421 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/LiteOS-M\345\271\263\345\217\260dump\347\263\273\347\273\237\345\261\236\346\200\247\350\276\223\345\207\272.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UGO\350\247\204\345\210\231\344\277\241\346\201\257.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UGO\350\247\204\345\210\231\344\277\241\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..152ef05469dc22252a9bbcf4107276a1d9f5e8b8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UGO\350\247\204\345\210\231\344\277\241\346\201\257.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UIButton\347\202\271\345\207\273\346\225\210\346\236\234.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UIButton\347\202\271\345\207\273\346\225\210\346\236\234.gif" new file mode 100755 index 0000000000000000000000000000000000000000..6db4ba71f91520200df7f59973e92ac2ef65f41b Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/UIButton\347\202\271\345\207\273\346\225\210\346\236\234.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ViewGroup\346\267\273\345\212\240view\345\256\236\344\276\213\346\225\210\346\236\234\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ViewGroup\346\267\273\345\212\240view\345\256\236\344\276\213\346\225\210\346\236\234\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..c4eee0a41d7cafb81c103c21d586c8bc0ec53e27 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ViewGroup\346\267\273\345\212\240view\345\256\236\344\276\213\346\225\210\346\236\234\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ril-adapter\346\250\241\345\235\227\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ril-adapter\346\250\241\345\235\227\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..98917f4562e2a3beabda31362c4ff36ac8526e26 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/ril-adapter\346\250\241\345\235\227\346\236\266\346\236\204\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/unnaming.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/unnaming.png new file mode 100755 index 0000000000000000000000000000000000000000..6350269abdc028f9b1b31d544b78f380e58d7a57 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/unnaming.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001051782526.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001051782526.png new file mode 100755 index 0000000000000000000000000000000000000000..0fc8c68bcb337ee51204c5b1c2ae9392ff445330 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001051782526.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052582522.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052582522.png new file mode 100755 index 0000000000000000000000000000000000000000..165f22644ae3f7c09b8fa8c382f001348e253a67 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052582522.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052662559.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052662559.png new file mode 100755 index 0000000000000000000000000000000000000000..f84c996217cb2da97b197580d1efd571bbae0f71 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052662559.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052782555.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052782555.png new file mode 100755 index 0000000000000000000000000000000000000000..07840086475ed440a052f79d59f8761a8a1e62f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052782555.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052942531.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052942531.png new file mode 100755 index 0000000000000000000000000000000000000000..646a47c2dd0c102749dff11b482493cb323a9e55 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001052942531.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053207924.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053207924.gif new file mode 100755 index 0000000000000000000000000000000000000000..6739188f22a6a9b9d76cb7af02f9e9c708735106 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053207924.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053247975.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053247975.gif new file mode 100755 index 0000000000000000000000000000000000000000..cd08beb8d1de75f196c6794a0c741b9998ec80b3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001053247975.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054101094.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054101094.png new file mode 100755 index 0000000000000000000000000000000000000000..57cd59a411623ac25836b4bd49221cc744db8d61 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054101094.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054421113.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054421113.png new file mode 100755 index 0000000000000000000000000000000000000000..1ba0a218017bbe98e2c21c8aa724900f766987ae Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001054421113.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001059334449.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001059334449.png new file mode 100755 index 0000000000000000000000000000000000000000..7835524bcfb112f1f8d46596d5efff05f9689941 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001059334449.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001060200050.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001060200050.png new file mode 100755 index 0000000000000000000000000000000000000000..047b5b30bdb1bc67829c96620603a6a4267a88d7 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001060200050.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001061889268.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001061889268.png new file mode 100755 index 0000000000000000000000000000000000000000..2c9bf38fc2d15b946f579c6a9589562aab0e6519 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001061889268.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062334618.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062334618.png new file mode 100755 index 0000000000000000000000000000000000000000..0ac7c0924e931695308a819010668327ed8a8680 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062334618.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062476933.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062476933.png new file mode 100755 index 0000000000000000000000000000000000000000..7e4b608bbffd7ae3becdc918abd6ff2b041888e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062476933.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062942690.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062942690.png new file mode 100755 index 0000000000000000000000000000000000000000..c06de34e1a7e72dc162d09b1a4fa5fcd25cefab3 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001062942690.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077724150.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077724150.png new file mode 100755 index 0000000000000000000000000000000000000000..2f6a9a6026d86bfcdd6462825334b450e481f563 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077724150.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077727032.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077727032.png new file mode 100755 index 0000000000000000000000000000000000000000..0077b263cf4c1ddfaf162e4ad01d2f8c2d58d13d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001077727032.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001119924146.gif b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001119924146.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cd37267672d3bea422b98d95c413e26df330de8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001119924146.gif differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001166643927.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001166643927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ace4cefd36637675f235df3cd596eca3ed218e6c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001166643927.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001181934155.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001181934155.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3b4daf5fdd4d78948488046bc404bc9ffedbbd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001181934155.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001214727595.png b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001214727595.png new file mode 100644 index 0000000000000000000000000000000000000000..f5648acc87f23979f8078afcb2089ed3f834d3e5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001214727595.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\212\250\347\224\273\345\256\236\347\216\260\346\225\210\346\236\234\345\233\276.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\212\250\347\224\273\345\256\236\347\216\260\346\225\210\346\236\234\345\233\276.gif" new file mode 100755 index 0000000000000000000000000000000000000000..1eda8dc4c7f8fa35620640b5eee085b510e0f4ea Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\212\250\347\224\273\345\256\236\347\216\260\346\225\210\346\236\234\345\233\276.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\214\205\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\214\205\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..330983e87925e92d7d27cbe7581993e81b812af7 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\214\205\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\241\206\346\236\266\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\216\273\347\224\265\350\260\203\347\224\250\346\227\266\345\272\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\216\273\347\224\265\350\260\203\347\224\250\346\227\266\345\272\217\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..ca7bf2b79f42c07328a8342fd94b1c67013607c1 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\216\273\347\224\265\350\260\203\347\224\250\346\227\266\345\272\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\220\257\345\212\250\345\255\220\347\263\273\347\273\237\344\270\212\344\270\213\346\226\207.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\220\257\345\212\250\345\255\220\347\263\273\347\273\237\344\270\212\344\270\213\346\226\207.png" new file mode 100644 index 0000000000000000000000000000000000000000..e524495360609969011d8554d197ee04175e6b8f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\220\257\345\212\250\345\255\220\347\263\273\347\273\237\344\270\212\344\270\213\346\226\207.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\233\276\347\211\2071.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\233\276\347\211\2071.png" new file mode 100755 index 0000000000000000000000000000000000000000..c9e74aefe365e0c103fbb6c128f731850d8258a4 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\233\276\347\211\2071.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\271\263\351\223\272\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\271\263\351\223\272\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..a8ca6625852cfbce3d1cd156a52fd76a299084ad Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\271\263\351\223\272\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\272\224\347\224\250\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\272\224\347\224\250\345\220\257\345\212\250\346\265\201\347\250\213.png" new file mode 100755 index 0000000000000000000000000000000000000000..2111dd19967c6f8d960a4e93891ddde7f8825225 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\345\272\224\347\224\250\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\217\222\344\273\266\344\276\235\350\265\226-(2).jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\217\222\344\273\266\344\276\235\350\265\226-(2).jpg" new file mode 100755 index 0000000000000000000000000000000000000000..e73a82e4a5adc0d41adb548acc662f538afcd21c Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\217\222\344\273\266\344\276\235\350\265\226-(2).jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\347\273\223\346\236\204.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\347\273\223\346\236\204.png" new file mode 100755 index 0000000000000000000000000000000000000000..a8954112f6b94d422bce3c1f445aa0de6c2499cc Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\347\273\223\346\236\204.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204.png" new file mode 100755 index 0000000000000000000000000000000000000000..276dfb6048e96d289c0074bd320ff7bfb4f1ab9d Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\231\256\351\200\232\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\260\264\345\271\263-\345\236\202\347\233\264\346\226\271\345\220\221\345\217\257\346\273\221\345\212\250\346\225\210\346\236\234\345\233\276.gif" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\260\264\345\271\263-\345\236\202\347\233\264\346\226\271\345\220\221\345\217\257\346\273\221\345\212\250\346\225\210\346\236\234\345\233\276.gif" new file mode 100755 index 0000000000000000000000000000000000000000..1bd6879c1955f9131cd12ea17a2d8c0e52be6ab1 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\346\260\264\345\271\263-\345\236\202\347\233\264\346\226\271\345\220\221\345\217\257\346\273\221\345\212\250\346\225\210\346\236\234\345\233\276.gif" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\263\273\347\273\237\345\217\202\346\225\260\346\223\215\344\275\234\345\216\237\350\257\255.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\263\273\347\273\237\345\217\202\346\225\260\346\223\215\344\275\234\345\216\237\350\257\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..54c15c441dbb8f305ff4d6031b45c2eb8cb28d6c Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\263\273\347\273\237\345\217\202\346\225\260\346\223\215\344\275\234\345\216\237\350\257\255.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204\347\244\272\346\204\217\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204\347\244\272\346\204\217\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..dc3dcd37c644867a2de9ba4209aaeeedcedecbe8 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\273\204\344\273\266\346\240\221\347\273\223\346\236\204\347\244\272\346\204\217\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\274\226\350\257\221\346\236\204\345\273\272\346\265\201\347\250\213.jpg" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\274\226\350\257\221\346\236\204\345\273\272\346\265\201\347\250\213.jpg" new file mode 100755 index 0000000000000000000000000000000000000000..3e296c97b64e317bb92849d80588d5ab5419b31e Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\347\274\226\350\257\221\346\236\204\345\273\272\346\265\201\347\250\213.jpg" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\207\252\351\200\202\345\272\224\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\207\252\351\200\202\345\272\224\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..2e412ac913dc9b7bd4f1ff1729bfe017b02b4a7a Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\207\252\351\200\202\345\272\224\346\250\241\345\274\217\345\233\276\347\211\207\346\225\210\346\236\234\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\256\276\347\275\2562-2\347\275\221\346\240\274\345\271\266\346\267\273\345\212\2404\344\270\252button\347\273\204\344\273\266\350\277\233\350\241\214\345\270\203\345\261\200.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\256\276\347\275\2562-2\347\275\221\346\240\274\345\271\266\346\267\273\345\212\2404\344\270\252button\347\273\204\344\273\266\350\277\233\350\241\214\345\270\203\345\261\200.png" new file mode 100755 index 0000000000000000000000000000000000000000..9d8039f69db3919dd3ddf716bc58d053948479ee Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\256\276\347\275\2562-2\347\275\221\346\240\274\345\271\266\346\267\273\345\212\2404\344\270\252button\347\273\204\344\273\266\350\277\233\350\241\214\345\270\203\345\261\200.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..015c38ba5516395527bcf6715535238f02b2bad9 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/device-dev/subsystems/figure/\350\277\220\350\241\214\346\212\245\351\224\231\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/AI\345\274\225\346\223\216\346\241\206\346\236\266.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/AI\345\274\225\346\223\216\346\241\206\346\236\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..40fce96c01fbe619d77851dffcb5c37b1468892f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/AI\345\274\225\346\223\216\346\241\206\346\236\266.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/JS-FA\345\274\200\345\217\221\347\233\256\345\275\225.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/JS-FA\345\274\200\345\217\221\347\233\256\345\275\225.png" new file mode 100755 index 0000000000000000000000000000000000000000..67e8ab4dfd26f4bbf7206d569831ed1f8351d9ad Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/JS-FA\345\274\200\345\217\221\347\233\256\345\275\225.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/OpenHarmony-LiteOS-A\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/OpenHarmony-LiteOS-A\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..b2ff552d12a62fb207505772fc4c8cad29262022 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/OpenHarmony-LiteOS-A\345\206\205\346\240\270\346\236\266\346\236\204\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/aafwk.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/aafwk.png new file mode 100755 index 0000000000000000000000000000000000000000..9c984fd666ab4ff18cdfb5e2035f06342249fd4a Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/aafwk.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/appexecfwk.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/appexecfwk.png new file mode 100755 index 0000000000000000000000000000000000000000..e40a548d48af43430fed8599b30c4efcab60fa1d Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/appexecfwk.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/cesfwk_architecture_diagram.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/cesfwk_architecture_diagram.png new file mode 100755 index 0000000000000000000000000000000000000000..c43dc2dc5c9fe130d669f0e8a5dfc27ff1faf418 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/cesfwk_architecture_diagram.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/dms-architecture_zh.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/dms-architecture_zh.png new file mode 100644 index 0000000000000000000000000000000000000000..588c33751dff097e9a8bb9b21d731a1ca1633ffd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/dms-architecture_zh.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle-callbacks.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle-callbacks.png new file mode 100755 index 0000000000000000000000000000000000000000..4c94556b5c2516ad2978a9a31d833cfb2cf3dd01 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle-callbacks.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle.png new file mode 100755 index 0000000000000000000000000000000000000000..d4fff2a49bf103cb5d8763f271c847fc1b711723 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/page-ability-lifecycle.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle-callbacks.jpg b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle-callbacks.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d046627239c89c1ce44450f1db3e8dd623974514 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle-callbacks.jpg differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle.png new file mode 100755 index 0000000000000000000000000000000000000000..66c11ca4db7900696c064461cb7f774bfcd48d49 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/service-ability-lifecycle.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_architecture-of-telephony-subsystem.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_architecture-of-telephony-subsystem.png new file mode 100755 index 0000000000000000000000000000000000000000..a7de4844d182c5214de31a389fb084ea5552a99e Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_architecture-of-telephony-subsystem.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001077953992.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001077953992.png new file mode 100755 index 0000000000000000000000000000000000000000..128187aacfa540846172eac7d4ff47a3c2a31291 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001077953992.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079026550.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079026550.png new file mode 100755 index 0000000000000000000000000000000000000000..99f14c85aa9d185ceb02bd2c376462e84629d897 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079026550.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079207198.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079207198.png new file mode 100755 index 0000000000000000000000000000000000000000..c4069d0870d67b6b5eaefa1fdd426975cd5224b2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001079207198.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001106694563.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001106694563.png new file mode 100755 index 0000000000000000000000000000000000000000..2f6a9a6026d86bfcdd6462825334b450e481f563 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001106694563.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001111659738.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001111659738.png new file mode 100755 index 0000000000000000000000000000000000000000..60179a923ded99ae33c2859f30570a7d5d95a3a8 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001111659738.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748088.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748088.png new file mode 100644 index 0000000000000000000000000000000000000000..294f37c9dd23790348079f175b54d0fac58b8abf Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748088.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748590.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748590.png new file mode 100644 index 0000000000000000000000000000000000000000..b72003f5221553d66ae4b4183f92bcfcac595bc2 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115748590.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115819528.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115819528.png new file mode 100755 index 0000000000000000000000000000000000000000..ded7f8ca0f8aa1f9bfb51a38ad37a21fed16ced9 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001115819528.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162062837.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162062837.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbd2f49d8ed4e7b24e1f8fdc0ba971c1fcb04f5 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162062837.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162307895.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162307895.png new file mode 100755 index 0000000000000000000000000000000000000000..b1d4a9fc4a69c1b4af9fa42ae5b0d4a47f4afb74 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162307895.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162757669.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162757669.png new file mode 100755 index 0000000000000000000000000000000000000000..c39795967bcd7b5ffbf611b16dd9c3c6778ebd9c Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_0000001162757669.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_frontend.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e9951f3f2dc5b566a3d9b36229def46c41aecd Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_frontend.png differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_runtime.png b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_runtime.png new file mode 100644 index 0000000000000000000000000000000000000000..2f78e5f3e10a2b99c60ca31dc0f23ae5fb89f7a6 Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/zh-cn_image_ark_runtime.png differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..0d8c52645dbee83554bfbf7fb8c5bf46bb7e3269 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..e3763b766aff5cf1c80c31a0ea17c527a9f70a8f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..85ea43ab9df6b54d41e6703876c2da05f082f001 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..6cacc7470fc2c1e82e7d5306f9a5cf0d9fd5e792 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276-5.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276-5.png" new file mode 100755 index 0000000000000000000000000000000000000000..988f445370dc2b288bbbe5ec3b36f8bbdf411f5c Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276-5.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..f4db33be77173dd074bb6a5ae045a9c9a5a5c82a Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" new file mode 100755 index 0000000000000000000000000000000000000000..698bf197806b9e260b6919e4eaeff2a9900b2d50 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\345\256\211\350\243\205\351\203\250\347\275\262\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\345\256\211\350\243\205\351\203\250\347\275\262\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..ee364fd6ea0a34ec5b7b79f96556b59afe012445 Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\345\256\211\350\243\205\351\203\250\347\275\262\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..4d8f23c4ac0bc523de713c0df43fb6bf0bbd517f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\241\206\346\236\266\344\272\244\344\272\222\346\265\201\347\250\213.png" "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\241\206\346\236\266\344\272\244\344\272\222\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..0a4e738184f3feeb1ff0f71ec36518470e92032f Binary files /dev/null and "b/website/docs/.vuepress/public/images/docs/zh-cn/readme/figures/\351\251\261\345\212\250\346\241\206\346\236\266\344\272\244\344\272\222\346\265\201\347\250\213.png" differ diff --git a/website/docs/.vuepress/public/images/docs/zh-cn/readme/public_sys-resources/icon-note.gif b/website/docs/.vuepress/public/images/docs/zh-cn/readme/public_sys-resources/icon-note.gif new file mode 100755 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/website/docs/.vuepress/public/images/docs/zh-cn/readme/public_sys-resources/icon-note.gif differ diff --git "a/website/docs/.vuepress/public/images/readme/figures/OpenHarmony\345\252\222\344\275\223\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/readme/figures/OpenHarmony\345\252\222\344\275\223\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..37aa82a4d0e47158908f37080e1623dc8b3a5e6a Binary files /dev/null and "b/website/docs/.vuepress/public/images/readme/figures/OpenHarmony\345\252\222\344\275\223\346\236\266\346\236\204\345\233\276.png" differ diff --git a/website/docs/.vuepress/public/images/readme/figures/dp-architecture_zh.png b/website/docs/.vuepress/public/images/readme/figures/dp-architecture_zh.png new file mode 100755 index 0000000000000000000000000000000000000000..58009df7a4cbee4664985e24a0f0f00ed60f88ed Binary files /dev/null and b/website/docs/.vuepress/public/images/readme/figures/dp-architecture_zh.png differ diff --git "a/website/docs/.vuepress/public/images/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" "b/website/docs/.vuepress/public/images/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" old mode 100755 new mode 100644 index 698bf197806b9e260b6919e4eaeff2a9900b2d50..da1c6d779d3e7de861385f1f82daa84b79e34f0e Binary files "a/website/docs/.vuepress/public/images/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" and "b/website/docs/.vuepress/public/images/readme/figures/\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" index ffa7b3ce76e7d346587b71d83cff9918ba83a8a9..caf4488699e7126a2d3021ef8e61bf3f68f74c0a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/01.\344\272\206\350\247\243OpenHarmony\345\274\200\346\272\220\351\241\271\347\233\256.md" @@ -1,6 +1,6 @@ --- title: 了解OpenHarmony开源项目 -permalink: /pages/000000 +permalink: /pages/010101 navbar: true sidebar: true prev: true @@ -9,23 +9,22 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 ---- +date: 2022-02-12 09:01:41 +--- # OpenHarmony开源项目 -- [OpenHarmony开源项目](#openharmony开源项目) - - [项目介绍](#项目介绍) - - [技术架构](#技术架构) - - [技术特性](#技术特性) - - [系统类型](#系统类型) - - [详细特征](#详细特征) - - [快速入门](#快速入门) - - [代码仓地址](#代码仓地址) - - [开发者文档](#开发者文档) - - [源码下载](#源码下载) - - [如何参与](#如何参与) - - [许可协议](#许可协议) - - [联系方式](#联系方式) +- [项目介绍](#section1270210396435) +- [技术架构](#section2502124574318) +- [技术特性](#section12212842173518) +- [系统类型](#section145241459142416) +- [详细特征](#section25831825174419) +- [快速入门](#section44681652104210) +- [代码仓地址](#section107651249181914) +- [开发者文档](#section21031470109) +- [源码下载](#section39011923144212) +- [如何参与](#section19611528174215) +- [许可协议](#section1245517472115) +- [联系方式](#section61728335424) [View English](https://gitee.com/openharmony/docs/blob/master/en/OpenHarmony-Overview.md) @@ -360,7 +359,7 @@ OpenHarmony支持如下几种系统类型: ## 快速入门 - +入口:[/pages/extra/cfc381/](/pages/extra/cfc381/) ## 代码仓地址 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" index 4c1ef389498228a878134f86d3928b0761ef1fcd..1cff07dec90b264bfdc359aeec24f4b584072120 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/01.\345\206\205\346\240\270\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 内核子系统 -permalink: /pages/00000100 +permalink: /pages/01010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 内核子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" index a5cf61daedd770676fa3c00c1cd910d3488f34ba..713cb00be91ada4bc05179ac15f002a385a84c6c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/02.\351\251\261\345\212\250\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 驱动子系统 -permalink: /pages/00000101 +permalink: /pages/01010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 驱动子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" index ad9b5782af67905e40ba1368e50b35ce50051fa7..a514c66679249ac850a515363dc5e5a48fb9e54e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/03.\346\226\271\350\210\237\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 方舟运行时子系统 -permalink: /pages/00000102 +permalink: /pages/01010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 方舟运行时子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" index 123410066a72c187eb11cb3b4c81cbbac374729c..2b766ed31e82d10f659d5b3d2b4003a62f51c547 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/04.DFX\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: DFX子系统 -permalink: /pages/00000103 +permalink: /pages/01010204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # DFX子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" index 0d965b0201e00cfbdca20a256f1f381826ba778e..0fb01b311b0f11059e39249d0e03f8dbf2ac6294 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/05.JS-UI\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: JS-UI框架子系统 -permalink: /pages/00000104 +permalink: /pages/01010205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # JS UI框架子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" index c3cfefa7962ab051b79aefa75e5429080f491418..767eb57f0b7bdc679a5bb54219d32b636b8be42f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/06.Misc\350\275\257\344\273\266\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: Misc软件服务子系统 -permalink: /pages/00000105 +permalink: /pages/01010206 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # Misc软件服务子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" index 55db176d9fd130912a32cfeea7c2b12374c8dcb6..20723efedcfcbc9128f628d72e68fcc38074bdaa 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/07.XTS\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: XTS子系统 -permalink: /pages/00000106 +permalink: /pages/01010207 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # XTS子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" index 75912e286e78ae22d1d6abdb6fa614e22b8eeb7a..b1d1fec166a47186f1023846609fb3df481f3e25 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/08.\344\272\213\344\273\266\351\200\232\347\237\245\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 事件通知子系统 -permalink: /pages/00000107 +permalink: /pages/01010208 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 事件通知子系统 @@ -49,7 +49,7 @@ OpenHarmony通过CES(Common Event Service,公共事件服务)为应用程 ## 使用说明 -* [详细说明请参考: CommonEvent开发指南](/pages/extra/d0f02a/) +* [详细说明请参考: CommonEvent开发指南](/pages/extra/6a04ee/) ## 相关仓 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" index 4e1485f032180dec923e655393304b554f1155d7..45a66454a9278866891f644481a4ac3a4a060f88 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/09.\345\205\203\350\203\275\345\212\233\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 元能力子系统 -permalink: /pages/00000108 +permalink: /pages/01010209 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 元能力子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" index 6441b9f7ec5a609772bdbce08bb5db02bdb31e44..03f1c38262eba9b6ca0a1763ccc4ec17d449e9e1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/10.\345\205\250\347\220\203\345\214\226\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 全球化子系统 -permalink: /pages/00000109 +permalink: /pages/0101020a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 全球化子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" index 32cc18c93fe0c08bd54cb54ec9a57ae03ec50cc2..0b854dd132f0ec55337f96d1ba1007afc3da6d90 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/11.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223.md" @@ -1,6 +1,6 @@ --- title: 公共基础库 -permalink: /pages/0000010a +permalink: /pages/0101020b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 公共基础库 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" index b31924e350e9d207c10d664abcdfb486af5ddbcf..22448aba1d456d863e72619bc6837917c9cb8d64 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/12.\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 分布式任务调度子系统 -permalink: /pages/0000010b +permalink: /pages/0101020c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 分布式任务调度子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" index 07a53ac1fca86105b33d5481c8aceda3dccf83cd..5da68de9b5c109321998e92509df0b05f67909c4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/13.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 分布式数据管理子系统 -permalink: /pages/0000010c +permalink: /pages/0101020d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 分布式数据管理子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" index 140407e7fb842a640368b54cf1a57f3b494ad341..32fdea85bfba3f86ea83541a31c1b1a8afea9263 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/14.\345\210\206\345\270\203\345\274\217\346\226\207\344\273\266\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 分布式文件子系统 -permalink: /pages/0000010d +permalink: /pages/0101020e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 分布式文件子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" index 405a9fab1b4009d177e9ddaa87056e0d2288e46a..7732d6951392f9fb10d6c84f86aa5380f22e95f9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/15.\345\210\206\345\270\203\345\274\217\350\275\257\346\200\273\347\272\277\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 分布式软总线子系统 -permalink: /pages/0000010e +permalink: /pages/0101020f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 分布式软总线子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" index 6f123bfbf774675934e7d5e826faa229c5c34f38..b3c1220247f129f750902b26ae3609bb8d20238d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/16.\345\215\207\347\272\247\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 升级子系统 -permalink: /pages/0000010f +permalink: /pages/01010210 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 升级子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" index 40e718209bbe492ef579884814e297f5bd8b2aab..72abfe3d60f1f62a32d3306f5a62a03414fdfef4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/17.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 启动恢复子系统 -permalink: /pages/00000110 +permalink: /pages/01010211 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 启动恢复子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" index a41a2a9ec446ebf5cc8c950c06332a9d36fb3138..59b1cd1b6319d8baaa3ab04a99c824f6b23557c7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/18.\345\233\276\345\275\242\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 图形子系统 -permalink: /pages/00000111 +permalink: /pages/01010212 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 图形子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" index 040480bd35ee2919541620e6c470f6e68949d7eb..cdbc23bf850ea5be432f91361e8a75d9b76e977e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/19.\345\244\232\346\250\241\350\276\223\345\205\245\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 多模输入子系统 -permalink: /pages/00000112 +permalink: /pages/01010213 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 多模输入子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" similarity index 72% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" index 1163cc8c58a2f7c3ff8e2f2f669f42caa0a252e7..b774dc62a0fafdd1894215ea9d79d5ec8b699770 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/20.\345\252\222\344\275\223\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 媒体子系统 -permalink: /pages/00000113 +permalink: /pages/01010214 navbar: true sidebar: true prev: true @@ -9,11 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 媒体子系统 - [简介](#section11660541593) +- [系统架构](#section11660541594) - [目录](#section161941989596) - [约束](#section119744591305) - [使用说明](#section1312121216216) @@ -28,25 +29,24 @@ date: 2021-12-30 18:31:27 - 音频播放和录制。 - 视频播放和录制。 - - 相机拍照和录制。 ## 系统架构 -**图 1** OpenHarmony媒体子系统通用架构图 - - -![](/images/readme/figures/zh-cn_image_0000001115819528.png) - -**图 2** OpenHarmony小型媒体子系统架构图 +**图 1** OpenHarmony媒体子系统架构图 +![](/images/readme/figures/OpenHarmony媒体架构图.png) -![](/images/readme/figures/媒体子系统架构图.png) - -**图 3** OpenHarmony小型媒体子系统业务流程图 - - -![](/images/readme/figures/zh-cn_image_0000001111659738.png) +- **Media**: 为应用提供播放、录制等接口,通过跨进程调用或直接调用方式,调用媒体引擎Gstreamer、Histreamer或其它引擎。 + - mini设备上,Media部件调用Histreamer支持音频播放等功能。 + - small设备上,Media部件调用recorder_lite支持音视频录制,默认调用player_lite支持音视频播放,通过设置系统属性变量debug.media_service.histreamer为1使用histreamer。详细设置方法参见[syspara系统属性组件使用说明](https://device.harmonyos.com/cn/docs/documentation/guide/subsys-boot-syspara-0000001063362360)或者参见[syspara模块代码](https://gitee.com/openharmony/startup_syspara_lite)。 + - standard设备上,Media部件调用Gstreamer支持音视频播放、音视频录制。 +- **Audio**: Audio部件支持音频输入输出、策略管理、音频焦点管理等功能。 +- **Camera**: Camera部件提供相机操作接口,支持预览、拍照、录像。 +- **Image**: Image部件支持常见图片格式的编解码。 +- **MediaLibrary**: MediaLibrary支持本地和分布式媒体数据访问管理。 +- **Histreamer**: 轻量级媒体引擎,支持文件/网络流媒体输入,支持音视频解码播放,支持音视频编码录制,支持插件扩展。 +- **Gstreamer**: 开源GStreamer引擎,支持流媒体、音视频播放、录制等功能。 ## 目录 @@ -81,6 +81,13 @@ date: 2021-12-30 18:31:27 │ ├── figures # 标准系统播放录制架构和流程图 │ ├── frameworks # 标准系统播放录制框架实现 │ └── interfaces # 标准系统播放录制模块接口 +├── histreamer # HiStreamer媒体引擎 +│ └── engine # 媒体引擎 +│ ├── player # 播放器封装 +│ ├── foundation # 基础工具 +│ ├── pipeline # Pipeline框架 +│ └── plugin # 插件框架 +│ └── plugins # 平台软件插件 └── utils # 媒体公共模块 └── lite # 小型系统媒体公共模块 ├── figures # 小型系统媒体公共模块架构和流程图 @@ -116,6 +123,8 @@ date: 2021-12-30 18:31:27 [multimedia\_utils\_lite](https://gitee.com/openharmony/multimedia_utils_lite) +[multimedia\_histreamer](https://gitee.com/openharmony/multimedia_histreamer) + [multimedia\_camera\_standard](https://gitee.com/openharmony/multimedia_camera_standard) [multimedia\_audio\_standard](https://gitee.com/openharmony/multimedia_audio_standard) diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" index c9ab96b8f790bc9d8ecd81aa8d266c772db45248..aed519a5ae4a24523cfc6179ed106b78e51f3b12 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/21.\345\256\211\345\205\250\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 安全子系统 -permalink: /pages/00000114 +permalink: /pages/01010215 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 安全子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" index 6b28ec022184d633b2c332ee1c7f420c693dc6ab..c583fb90f0d1c207dc8fccbee9a6d67733a36ac7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/22.\345\270\220\345\217\267\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 帐号子系统 -permalink: /pages/00000115 +permalink: /pages/01010216 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 帐号子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" index 7566c76a77d8d1166af0ef2a842e15f13d641903..b6fbafd3245e9a6075ff59319d4faa5e9f0314ac 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/23.\346\263\233Sensor\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 泛Sensor子系统 -permalink: /pages/00000116 +permalink: /pages/01010217 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 泛Sensor子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" index ac8b12929b9df14a6c8aa052cccd484770bd9b81..81365ee2b7157e8a81bbaa86f47d9a24ef09a8bf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/24.\346\265\213\350\257\225\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 测试子系统 -permalink: /pages/00000117 +permalink: /pages/01010218 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 测试子系统 OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根据测试需求开发相关测试用例,开发阶段提前发现缺陷,大幅提高代码质量。 @@ -17,8 +17,8 @@ OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根 本文从基础环境构建,用例开发,编译以及执行等方面介绍OpenHarmony测试框架如何运行和使用。 ## 基础环境构建 测试框架依赖于python运行环境,在使用测试框架之前可参阅以下方式进行配置。 - - [环境配置](/pages/extra/bab7f0/) - - [源码获取](/pages/000102) + - [环境配置](/pages/extra/fa6494/) + - [源码获取](/pages/extra/00a0c5/) ## 测试框架目录简介 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" index b4f75bd4701c16c8a7a8f41d3a657d2895f73451..31922daaf5fdf7fdab3916c3c705e1763686d15b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/25.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 用户程序框架子系统 -permalink: /pages/00000118 +permalink: /pages/01010219 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # **用户程序框架子系统** diff --git "a/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..9f6e6c4c1f9663b7f5f41ece2267c798237737b7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" @@ -0,0 +1,78 @@ +--- +title: 电源管理子系统 +permalink: /pages/0101021a +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:41 +--- +# 电源管理子系统 + +- [简介](#section11660541593) +- [目录](#section19472752217) +- [使用说明](#section19959125052315) +- [相关仓](#section63151229062) + +## 简介 + +电源管理子系统提供如下功能: + +1. 重启服务:系统重启和下电。 +2. 系统电源管理服务:系统电源状态管理和休眠运行锁管理。 +3. 显示相关的能耗调节:包括根据环境光调节背光亮度,和根据接近光亮灭屏。 +4. 省电模式 :在不损害主要功能和性能的前提下,提供一种低功耗操作模式 。 +5. 电池服务:支持充放电、电池和充电状态的监测,包括状态的更新和上报,还包括关机充电。 +6. 温控 :在设备温度到一定程度之后对应用、SoC、外设进行管控,限制温升 。 +7. 耗电统计: 主要包括软件耗电和硬件耗电统计,以及单个应用的耗电统计 。 +8. 轻设备电池服务。 +9. 轻设备电源管理服务。 + +**图 1** 电源管理子系统架构图 + + +![](/images/readme/figures/电源管理子系统架构图.png) + +## 目录 + +``` +/base/powermgr +├── battery_lite # 轻设备电池服务 +├── battery_manager # 电池服务 +├── battery_statistics # 耗电统计服务 +├── display_manager # 显示能效管理服务 +├── power_manager # 系统电源管理服务 +├── powermgr_lite # 轻设备电源管理服务 +└── thermal_manager # 温控和热管理服务 +``` + +## 使用说明 + +如架构图示意,电源管理提供了七个子部件,其中部分部件提供了对外接口或者公共事件通知,开发者可以根据场景使用: + +- 通过Power Manager提供的接口可以进行申请和释放休眠运行锁RunningLock、省电模式、亮度调节、重启设备、关机等操作,同时也可以通过公共事件来监听省电模式和关机状态的变化。 +- Battery Manager提供了电池信息查询的接口,同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。 +- Thermal Manager提供的设备温升状态的查询接口,同时开发者也可以通过注册回调和公共事件来监听设备温升状态。 +- Battery Statistics 提供了软硬件耗电统计的功能,可以查询硬件耗电或者应用耗电情况。 + +## 相关仓 + +**电源管理子系统** + +[powermgr_power_manager](https://gitee.com/openharmony/powermgr_power_manager) + +[powermgr_display_manager](https://gitee.com/openharmony/powermgr_display_manager) + +[powermgr_battery_manager](https://gitee.com/openharmony/powermgr_battery_manager) + +[powermgr_thermal_manager](https://gitee.com/openharmony/powermgr_thermal_manager) + +[powermgr_battery_statistics](https://gitee.com/openharmony/powermgr_battery_statistics) + +[powermgr_battery_lite](https://gitee.com/openharmony/powermgr_battery_lite) + +[powermgr_powermgr_lite](https://gitee.com/openharmony/powermgr_powermgr_lite) diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" index edbf0e7f746b07c401b398b8e0ee910550d8ebfb..1e2431a5a05f1391ca3d4f8ebd7748acab213181 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/27.\347\224\265\350\257\235\346\234\215\345\212\241\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 电话服务子系统 -permalink: /pages/0000011a +permalink: /pages/0101021b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 电话服务子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" index aefaee1c4cf5ad2cb33fb9d52377fda3fbaeb694..c49e5a71fb0c9878af5f8d1f086870b8894f691e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/28.\347\240\224\345\217\221\345\267\245\345\205\267\351\223\276\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 研发工具链子系统 -permalink: /pages/0000011b +permalink: /pages/0101021c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 研发工具链子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" index 4d143419acfedf12ffcd810c5054f6fe4fe8be96..afd2c7712fbe3b47f10b863b8750ee3ef184a300 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/29.\347\263\273\347\273\237\345\272\224\347\224\250.md" @@ -1,6 +1,6 @@ --- title: 系统应用 -permalink: /pages/0000011c +permalink: /pages/0101021d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 系统应用 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" index c4c3e5f385dc5fc937ce5e3a453a4f666f6159de..78fb94b8f014d973f1936dc86184a654e671840c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/30.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 编译构建子系统 -permalink: /pages/0000011d +permalink: /pages/0101021e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 编译构建子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" index 3e10c028ed91669dbdd70a607a508a74fd276d86..cfe64c46a6a42710e45a2e9ae357bf0dc9777b8d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/31.\350\257\255\350\250\200\350\277\220\350\241\214\346\227\266\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 语言运行时子系统 -permalink: /pages/0000011e +permalink: /pages/0101021f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 语言运行时子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" index 9479cca7ca90ec5521e306e1030e2303c1c4b227..48a1ddf74a4204ddc0da88b635f94eea082880f9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/32.AI\344\270\232\345\212\241\345\255\220\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: AI业务子系统 -permalink: /pages/0000011f +permalink: /pages/01010220 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # AI业务子系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" rename to "website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" index b4d8ad9acaaedbd4deff6d886cf8b2cae73628ba..f480285d91efb8b99fd36040b5cabd4787faf18c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/03.\346\234\257\350\257\255.md" @@ -1,6 +1,6 @@ --- title: 术语 -permalink: /pages/000002 +permalink: /pages/010103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- # 术语 diff --git "a/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216.md" new file mode 100644 index 0000000000000000000000000000000000000000..874f5547180d9ee36a61de7409cde8fc85cb066d --- /dev/null +++ "b/website/docs/01.OpenHarmony/01.\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216.md" @@ -0,0 +1,30 @@ +--- +title: 版本说明 +permalink: /pages/010104 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:41 +--- +# OpenHarmony Release Notes +## OpenHarmony 3.x Releases +- [OpenHarmony v3.1 Beta (2021-12-31)](/pages/extra/c4cfbf/) +- [OpenHarmony v3.0.1 LTS (2022-01-12)](/pages/extra/cf5f01/) +- [OpenHarmony v3.0 LTS (2021-09-30)](/pages/extra/73fe76/) + +## OpenHarmony 2.x Releases + +- [OpenHarmony v2.2 beta2 (2021-08-04)](/pages/extra/a1e0f3/) +- [OpenHarmony 2.0 Canary (2021-06-02)](/pages/extra/a922d4/) +## OpenHarmony 1.x Releases +- [OpenHarmony v1.1.3 LTS (2021-09-30)](/pages/extra/43b4af/) +- [OpenHarmony v1.1.2 LTS (2021-08-04)](/pages/extra/73c1be/) +- [OpenHarmony 1.1.1 LTS (2021-06-22)](/pages/extra/4d1b76/) +- [OpenHarmony 1.1.0 LTS (2021-04-01)](/pages/extra/681d8d/) +- [OpenHarmony 1.0 (2020-09-10)](/pages/extra/747819/) + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..27f360f15a5d6be706724d65756e54eac706f0ba --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250\346\246\202\350\277\260.md" @@ -0,0 +1,36 @@ +--- +title: 轻量与小型系统入门概述 +permalink: /pages/01020101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:41 +--- +# 轻量与小型系统入门概述 + +OpenHarmony轻量和小型系统适用于内存较小的IOT设备。通过本文,开发者可以快速熟悉OpenHarmony轻量和小型系统的环境搭建、编译、烧录、调测以及运行“Hello World”等。 + +轻量和小型系统的开发有以下两种方法: + +- 用Windows环境进行开发和烧录,使用Linux环境进行编译。 +- 统一使用Linux环境进行开发、编译和烧录。 + +因目前Windows系统不支持编译,暂时无法全部使用Windows环境进行开发,开发者可根据使用习惯选择合适的开发方法。 + +本文将介绍第二种方法,下方所有操作均在Linux环境下进行。 + +本文选取了三款典型开发板:Hi3861 WLAN模组、Hi3516DV300、Hi3518EV300,并基于上述三款开发板进行开发介绍。开发板的具体外观和规格可参见[本文附录](/pages/0102010401#section19352114194115),开发者可根据需要自行购买的开发板。 + +轻量和小型系统快速入门流程如下图所示,其中搭建编译环境环节可根据实际情况选择Docker方式或安装包方式其中一种即可。 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>Docker环境已经封装了相关编译工具,开发者在使用该Docker环境时可以省去Ubuntu编译环境及开发板环境的的搭建操作。 + +**图 1** 轻量和小型系统快速入门流程 +![](/images/device-dev/quick-start/figures/轻量和小型系统快速入门流程.png "轻量和小型系统快速入门流程") + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" index 42559082f5c749d228e7c9b4e0421338b45994d3..80b6d412ca342ca4e821beb256a9bd98ce00d5f3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/01.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 搭建系统环境概述 -permalink: /pages/0001000100 +permalink: /pages/0102010201 navbar: true sidebar: true prev: true @@ -9,15 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:27 +date: 2022-02-12 09:01:41 --- -# 概述 +# 搭建系统环境概述 OpenHarmony可以使用DevEco Device Tool进行开发、编译、烧录、调测等。 -当前DevEco Device Tool发布了Windows和Ubuntu两个版本,本文以Windows版本进行相应开发介绍。 - -使用Ubuntu版本的开发者可参阅[操作指导](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905)。 - -当前Windows版本(除Hi3861外)尚不支持在Windows平台下编译,需要在Ubuntu平台下编译,下文将介绍如何搭建对应的OpenHarmony轻量和小型系统的开发环境和编译环境。 +当前DevEco Device Tool发布了Windows和Ubuntu两个版本,本文以Ubuntu版本进行相应开发介绍。 diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/02.\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/02.\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd2090432f7ac80ec2678878f17383262c4c8e16 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/02.\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -0,0 +1,86 @@ +--- +title: 开发环境准备 +permalink: /pages/0102010202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 开发环境准备 + +- [系统要求](#zh-cn_topic_0000001072959308_section1865184385215) +- [安装DevEco Device Tool](#zh-cn_topic_0000001072959308_section86587531620) + +DevEco Device Tool Ubuntu版本支持OpenHarmony源码开发、编译、烧录的一站式开发环境,因此,本章节为您介绍在Ubuntu环境下,如何搭建一套完整的可视化开发环境。 + +## 系统要求 + +- Ubuntu18及以上版本,内存推荐16 GB及以上。 +- 系统的用户名不能含有中文字符。 +- 只能使用普通用户角色搭建开发环境。 + +## 安装DevEco Device Tool + +DevEco Device Tool基于Visual Studio Code进行扩展,在Visual Studio Code上以插件方式运行,Visual Studio Code版本为1.60及以上。同时,DevEco Device Tool还依赖Python工具,并要求Python为3.8\~3.9版本。 + +在安装过程中,DevEco Device Tool会自动检查Visual Studio Code和Python,如果检测到Visual Studio Code、Python未安装或版本不符合要求,安装程序会自动安装Visual Studio Code和Python。 + +1. 将Ubuntu Shell环境修改为bash。 + 1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2,将Ubuntu shell修改为bash。 + + ``` + ls -l /bin/sh + ``` + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png) + + 2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。 + + ``` + sudo dpkg-reconfigure dash + ``` + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png) + +2. 下载[DevEco Device Tool 3.0 Beta2](https://device.harmonyos.com/cn/ide#download_beta)Linux版本,下载时,请先使用华为开发者帐号进行登录后下载。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)。 +3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。 + 1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.200.zip为软件包名称,请根据实际进行修改。 + + ``` + unzip devicetool-linux-tool-3.0.0.300.zip + ``` + + 2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.300.sh请根据实际进行修改。 + + ``` + chmod u+x devicetool-linux-tool-3.0.0.300.sh + ``` + +4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.300.sh请根据实际进行修改。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >安装过程中,会自动检查Visual Studio Code和Python是否安装,且版本符合要求,其中Visual Studio Code为1.60及以上版本,Python为3.8\~3.9版本。如果不满足,则安装过程中会自动安装,提示“Do you want to continue?”,请输入“Y”后继续安装。 + + ``` + sudo ./devicetool-linux-tool-3.0.0.300.sh -- --install-plugins + ``` + + 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png) + +5. 安装完成后,在Ubuntu左下角的![](/images/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png)中,启动Visual Studio Code。 +6. 启动Visual Studio Code,DevEco Device Tool运行依赖C/C++、CodeLLDB插件,请点击Visual Studio Code左侧的![](/images/device-dev/quick-start/figures/button.png)按钮,分别搜索和安装C/C++、CodeLLDB插件。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果在插件市场安装C/C++和CodeLLDB插件不成功,可手动下载插件后进行安装,具体请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/documentation/guide/offline_plugin_install-0000001074376846)。 + + ![](/images/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png) + +7. 重启Visual Studio Code,点击![](/images/device-dev/quick-start/figures/zh-cn_image_0000001239226427.png)进入DevEco Device Tool工具界面。至此,DevEco Device Tool Ubuntu开发环境安装完成。![](/images/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png) + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..afa63daa0f9b01675f74c3ec630280a6c642014b --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" @@ -0,0 +1,67 @@ +--- +title: 获取源码 +permalink: /pages/0102010203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 获取源码 + +- [前提条件](#section21887149017) +- [操作步骤](#section349724435812) + +## 前提条件 + +1. 注册码云gitee账号。 +2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 +3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 + + ``` + git config --global user.name "yourname" + git config --global user.email "your-email-address" + git config --global credential.helper store + ``` + +4. 安装码云repo工具,可以执行如下命令。 + + ``` + curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo #如果没有权限,可下载至其他目录,并将其配置到环境变量中 + chmod a+x /usr/local/bin/repo + pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests + ``` + + +## 操作步骤 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>Master主干为开发分支,开发者可通过Master主干获取最新特性。发布版本代码相对比较稳定,开发者可基于发布版本代码进行商用功能开发。 + +- **OpenHarmony主干代码获取** + + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 + + ``` + repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify + repo sync -c + repo forall -c 'git lfs pull' + ``` + + 方式二:通过repo + https下载。 + + ``` + repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify + repo sync -c + repo forall -c 'git lfs pull' + ``` + +- **OpenHarmony发布版本代码获取** + + OpenHarmony发布版本获取源码方式请参考[Release-Notes](/pages/010104)。 + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/04.\344\275\277\347\224\250\345\256\211\350\243\205\345\214\205\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/04.\344\275\277\347\224\250\345\256\211\350\243\205\345\214\205\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..e3d73421e0c13184e720d8f13498a65b24bcea3e --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/04.\344\275\277\347\224\250\345\256\211\350\243\205\345\214\205\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" @@ -0,0 +1,116 @@ +--- +title: 使用安装包方式搭建编译环境 +permalink: /pages/0102010204 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 使用安装包方式搭建编译环境 + +- [安装必要的库和工具](#section108201740181219) +- [安装hb](#section15794154618411) +- [安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\)](#section711117144296) + +使用安装包方式搭建Ubuntu编译环境步骤如下: + +1. 安装必要的库和工具:编译所需的必要工具和库(如打包、镜像制作等) +2. 安装hb:OpenHarmony编译构建命令行工具 +3. 安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\) + +想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建使用指南](/pages/01050301)。 + +## 安装必要的库和工具 + +使用如下apt-get命令安装编译所需的必要的库和工具: + +``` +sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils gcc-arm-linux-gnueabi cpio device-tree-compiler +``` + +## 安装hb + +1. 运行如下命令安装hb + + ``` + python3 -m pip install --user ohos-build + ``` + +2. 设置环境变量 + + ``` + vim ~/.bashrc + ``` + + 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 + + ``` + export PATH=~/.local/bin:$PATH + ``` + + 执行如下命令更新环境变量。 + + ``` + source ~/.bashrc + ``` + +3. 执行"hb -h",界面打印以下信息即表示安装成功: + + ``` + usage: hb + + OHOS build system + + positional arguments: + {build,set,env,clean} + build Build source code + set OHOS build settings + env Show OHOS build env + clean Clean output + + optional arguments: + -h, --help show this help message and exit + ``` + + +>![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** +>若安装hb的过程中遇到问题,请参见下文[常见问题](/pages/0102010206)进行解决。 + +## 安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\) + +>![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** +>如果下载的源码为OpenHarmony\_v1.x分支/标签, 请按下面的步骤安装9.0.0版本的llvm。 +>如果下载的源码为Master及非OpenHarmony\_v1.x分支/标签,可直接跳过本小节,hb会自动下载最新的llvm。 + +1. 打开Linux编译服务器终端。 +2. [下载LLVM工具](https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-36191/linux/llvm-linux-9.0.0-36191.tar)。 +3. 解压LLVM安装包至\~/llvm路径下。 + + ``` + tar -zxvf llvm.tar -C ~/ + ``` + +4. 设置环境变量。 + + ``` + vim ~/.bashrc + ``` + + 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 + + ``` + export PATH=~/llvm/bin:$PATH + ``` + +5. 生效环境变量。 + + ``` + source ~/.bashrc + ``` + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/05.\344\275\277\347\224\250Docker\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/05.\344\275\277\347\224\250Docker\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..99ecda54e681a7e635bec3306fc92d6a46b860e6 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/05.\344\275\277\347\224\250Docker\346\226\271\345\274\217\346\220\255\345\273\272\347\274\226\350\257\221\347\216\257\345\242\203.md" @@ -0,0 +1,47 @@ +--- +title: 使用Docker方式搭建编译环境 +permalink: /pages/0102010205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 使用Docker方式搭建编译环境 + +- [安装Docker](#section7337134183512) +- [获取Docker环境](#section15666113905015) + +使用安装包方式搭建Ubuntu编译环境步骤如下: + +1. 安装Docker +2. 获取Docker环境: + +想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建使用指南](/pages/01050301)。 + +## 安装Docker + +- 请参考[官方指导](https://docs.docker.com/engine/install/)。 + +## 获取Docker环境 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>不同的源码版本要匹配使用对应版本的Docker环境,本文以Master主干代码为例进行说明。 + +OpenHarmony的Docker镜像托管在[HuaweiCloud SWR](https://console.huaweicloud.com/swr/?region=cn-south-1#/app/warehouse/warehouseMangeDetail/goldensir/openharmony-docker/openharmony-docker?type=ownImage)上。开发者可以通过该镜像在很大程度上简化编译前的环境配置。下文将介绍具体使用步骤。 + +1. 获取Docker镜像。 + + ``` + docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.6 + ``` + +2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 + + ``` + docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.6 + ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 67% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 475a49434585943acb027a3cce7d0534a8cdd5d1..050c941fb5db75bc6c55d89950d6e9ecac7480cf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\350\275\273\351\207\217\344\270\216\345\260\217\345\236\213\347\263\273\347\273\237\347\216\257\345\242\203/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/0001000103 +permalink: /pages/0102010206 navbar: true sidebar: true prev: true @@ -9,17 +9,17 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 常见问题 +# 常见问题 -- [安装hb过程中,出现乱码、段错误](#section411894616119) -- [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](#section629417571626) -- [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](#section10871523332) -- [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](#section47351657163213) +- [hb 安装过程中出现乱码、段错误](#section411894616119) +- [hb 安装过程中提示"cannot import 'sysconfig' from 'distutils'"](#section629417571626) +- [hb 安装过程中提示"module 'platform' has no attribute 'linux\_distribution'"](#section10871523332) +- [hb 安装过程中提示"Could not find a version that satisfies the requirement ohos-build"](#section47351657163213) - [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](#section159891252236) -## 安装hb过程中,出现乱码、段错误 +## hb 安装过程中出现乱码、段错误 - **现象描述** @@ -39,11 +39,11 @@ date: 2021-12-30 18:31:28 ``` -## 安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'" +## hb 安装过程中提示"cannot import 'sysconfig' from 'distutils'" - **现象描述** - 执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'"。 + 执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'" - **可能原因** @@ -59,11 +59,11 @@ date: 2021-12-30 18:31:28 ``` -## 安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'" +## hb 安装过程中提示"module 'platform' has no attribute 'linux\_distribution'" - **现象描述** - 执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux\_distribution'"。 + 执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux\_distribution'" - **可能原因** @@ -81,7 +81,7 @@ date: 2021-12-30 18:31:28 ``` -## 安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build" +## hb 安装过程中提示"Could not find a version that satisfies the requirement ohos-build" - **现象描述** diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" similarity index 62% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" index ba0c14f7cd2f29804549a9e9df7008fbc24d05aa..5a2b035e526052e05e48b54525ae67fc11909150 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: 安装开发板环境 -permalink: /pages/000100020000 +permalink: /pages/010201030101 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 安装开发板环境 +# 安装开发板环境 - [Hi3861工具要求](#section466851916410) - [硬件要求](#section19202111020215) @@ -23,85 +23,49 @@ date: 2021-12-30 18:31:28 - [安装python模块](#section88701892341) - [安装gcc\_riscv32(WLAN模组类编译工具链)](#section34435451256) -- [安装USB转串口驱动](#section1027732411513) ## Hi3861工具要求 ### 硬件要求 -- Linux服务器 -- Windows工作台(主机电脑) -- Hi3861 WLAN模组 -- USB Type-C线(Windows工作台通过USB与Hi3861 WLAN模组连接) - -各硬件连接关系如下图所示。 - -**图 1** Hi3861开发硬件连线图 -![](/images/device-dev/quick-start/figures/Hi3861开发硬件连线图.png "Hi3861开发硬件连线图") +- Linux工作台 +- Hi3861开发板 +- USB Type-C线(Linux工作台通过USB与Hi3861开发板连接) ### 软件要求 >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->本节描述采用安装包方式安装相关工具的操作步骤。如果是Docker方式安装,无需安装[表1](#table6299192712513)中的Linux服务器相关工具,只需安装Windows工作台工具即可。 +>本节描述采用安装包方式安装相关工具的操作步骤。如果使用Docker方式安装,无需安装[表1](#table6299192712513)中的相关工具,请直接从[新建应用程序](/pages/010201030102)开始操作。 Hi3861开发板需要的工具如下表所示。 -**表 1** Hi3861开发板需要的工具 +**表 1** Hi3861开发板需要安装的工具 - - - - - - - - @@ -80,33 +66,6 @@ Hi3518开发板对Linux服务器通用环境配置需要的工具及其获取途 ## 安装Linux服务器工具 ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- 如果通过“HPM组件方式”或“HPM包管理器命令行工具方式”获取源码,不需要安装hc-gen编译工具。 ->- (推荐)如果通过“镜像站点方式”或“代码仓库方式”获取源码,需要安装hc-gen编译工具。安装hc-gen编译工具时,请确保编译工具的环境变量路径唯一。 - -### 将Linux shell改为bash - -查看shell是否为bash,在终端运行如下命令 - -``` -ls -l /bin/sh -``` - -如果显示为“/bin/sh -\> bash”则为正常,否则请按以下方式修改: - -**方法一**:在终端运行如下命令,然后选择 no。 - -``` -sudo dpkg-reconfigure dash -``` - -**方法二**:先删除sh,再创建软链接。 - -``` -sudo rm -rf /bin/sh -sudo ln -s /bin/bash /bin/sh -``` - ### 安装编译依赖基础软件(仅Ubuntu 20+需要) 执行以下命令进行安装: @@ -117,11 +76,9 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ### 安装文件打包工具 -1. 打开Linux编译服务器终端。 -2. 运行如下命令,安装dosfstools,mtools,mtd-utils。 - - ``` - sudo apt-get install dosfstools mtools mtd-utils - ``` +运行如下命令,安装dosfstools,mtools,mtd-utils。 +``` +sudo apt-get install dosfstools mtools mtd-utils +``` diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" index b01e2f98558483f212957cfdd2677e52143a16da..dafb950af7fdf1eb176bec7205ddc3375856ae65 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -1,6 +1,6 @@ --- -title: 运行 -permalink: /pages/000100020201 +title: 新建应用程序 +permalink: /pages/010201030302 navbar: true sidebar: true prev: true @@ -9,21 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 运行Hello OHOS(编译、烧录) +# 新建应用程序 -- [新建应用程序](#section1550972416485) -- [编译](#section234175193114) -- [烧录](#section7609155824819) -- [镜像运行](#section17612105814480) -- [下一步学习](#section9712145420182) +下方将通过修改源码的方式展示如何编写简单程序,输出“Hello OHOS!”。请在[获取源码](/pages/0102010203)章节下载的源码目录中进行下述操作。 -本节指导开发者在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。 - -## 新建应用程序 - -1. 新建目录及源码 +1. 新建目录及源码。 新建**applications/sample/camera/apps/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 @@ -40,7 +32,7 @@ date: 2021-12-30 18:31:28 } ``` -2. 新建编译组织文件 +2. 新建编译组织文件。 新建**applications/sample/camera/apps/BUILD.gn**文件,内容如下所示: @@ -59,7 +51,7 @@ date: 2021-12-30 18:31:28 } ``` -3. 添加新组件 +3. 添加新组件。 修改文件**build/lite/components/applications.json**,添加组件hello\_world\_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -121,7 +113,7 @@ date: 2021-12-30 18:31:28 ], ``` -4. 修改单板配置文件 +4. 修改单板配置文件。 修改文件**vendor/hisilicon/hispark\_aries/config.json**,新增hello\_world\_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -139,111 +131,3 @@ date: 2021-12-30 18:31:28 ``` -## 编译 - -如果Linux编译环境通过Docker方式安装,具体编译过程请参见[Docker方式获取编译环境](/pages/000a00#section107932281315)的编译操作。如果Linux编译环境通过软件包方式安装,进入源码根目录,执行如下命令进行编译: - -``` -hb set(设置编译路径) -.(选择当前路径) -选择ipcamera_hispark_aries@hisilicon并回车 -hb build -f(执行编译) -``` - -结果文件生成在out/hispark\_aries/ipcamera\_hispark\_aries目录下。 - -**图 1** Hi3518编译设置图例 -![](/images/device-dev/quick-start/figures/Hi3518编译设置图例.png "Hi3518编译设置图例") - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->Hi3518EV300单板的U-boot文件获取路径:device/hisilicon/hispark\_aries/sdk\_liteos/uboot/out/boot/u-boot-hi3518ev300.bin - -## 烧录 - -烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 - -Hi3518EV300开发板的代码烧录支持USB烧录和串口烧录两种方式,其中: - -- **Windows系统:支持USB烧录和串口烧录。** -- **Linux系统:支持串口烧录,如果采用的是Linux+Windows双系统,也支持USB烧录。** - -同一种烧录方式(如串口烧录),在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 - -此处仅以USB烧录为例进行说明。 - -1. 请连接好电脑和待烧录开发板,需要同时连接串口和USB口,具体可参考[Hi3518EV300开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3518-0000001105201138)。 -2. 打开电脑的设备管理器,查看并记录对应的串口号。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 - - ![](/images/device-dev/quick-start/figures/hi3518-record-the-serial-port-number.png) - -3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 - - ![](/images/device-dev/quick-start/figures/hi3518-deveco-device-tool-setting.png) - -4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3518EV300开发板进行适配,无需单独修改。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果待烧录文件是直接通过拷贝的方式获取,需要手动修改待烧录文件的路径。打开待烧录文件的页签,在Partition Settings的New Opiton的下拉列表中,选择Partition\_bin,然后在Partition Opiton的Partition\_bin设置待烧录文件的路径。 - -5. 在“hi3518ev300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 - - - upload\_port:选择步骤[2](#zh-cn_topic_0000001057313128_li46411811196)中查询的串口号。 - - upload\_protocol:选择烧录协议,固定选择“hiburn-usb”。 - - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 - - ![](/images/device-dev/quick-start/figures/upload-options.png) - -6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 -7. 打开工程文件,点击![](/images/device-dev/quick-start/figures/hi3518-deveco-device-tool-logo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3518ev300\_fastboot下的**Erase**按钮,擦除U-Boot。 - - ![](/images/device-dev/quick-start/figures/erase-u-Boot.png) - -8. 执行**Erase**擦除操作后,显示如下提示信息时,请重启开发板(下电再上电)。 - - ![](/images/device-dev/quick-start/figures/hi3518-restart-the-development-board.png) - -9. 重新上电后,显示如下信息时,表示擦除U-Boot成功。 - - ![](/images/device-dev/quick-start/figures/u-boot-erased-successfully.png) - -10. 擦除完成后,点击hi3518ev300下的**Upload**按钮,启动烧录。 - - ![](/images/device-dev/quick-start/figures/hi3518-upload.png) - -11. 启动烧录后,界面提示如下信息时,表示烧录成功。 - - ![](/images/device-dev/quick-start/figures/hi3518-burning-succeeded.png) - -12. 烧录成功后,请根据镜像运行章节进行操作,启动系统。 - -## 镜像运行 - -在完成Hi3518EV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 - -1. 在Hi3518EV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >DevEco Device Tool针对Hi3518EV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 - - ![](/images/device-dev/quick-start/figures/hi3518-bootloader.png) - -2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 - - ![](/images/device-dev/quick-start/figures/hi3518-reset-success.png) - -3. 在任务栏点击**Monitor**按钮,启动串口工具。 - - ![](/images/device-dev/quick-start/figures/hi3518-monitor.png) - -4. 然后根据界面提示进行操作,直到在界面打印OHOS \#信息,表示系统启动成功。 - - ![](/images/device-dev/quick-start/figures/hi3518-reboot-success.png) - - -## 下一步学习 - -恭喜您,已完成Hi3518的快速上手!建议您下一步进入[无屏摄像头产品开发](/pages/extra/466519/)的学习 。 - diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..b0c025f77f687b7f5ddcac2c9183501284bc367f --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" @@ -0,0 +1,39 @@ +--- +title: 编译 +permalink: /pages/010201030303 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 编译 + +下方将介绍如何使用Hi3518开发板进行编译。使用安装包方式与docker方式搭建Ubuntu编译环境,编译命令相同。 + +1. 请进入源码根目录,执行如下命令进行编译: + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果使用Docker方式搭建编译环境,请在[获取Docker环境](/pages/0102010205#section15666113905015)中进入的Docker构建环境中,执行如下命令进行编译。 + + ``` + hb set(设置编译路径) + .(选择当前路径) + 选择ipcamera_hispark_aries并回车 + hb build -f(执行编译) + ``` + + **图 1** Hi3518编译设置图例-Docker方式 + ![](/images/device-dev/quick-start/figures/Hi3518编译设置图例-Docker方式.png "Hi3518编译设置图例-Docker方式") + +2. 编译结束后,出现“ipcamera\_hispark\_aries build success”字样,则证明构建成功。 + +>![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** +>烧录相关文件获取路径: +>结果文件:out/hispark\_aries/ipcamera\_hispark\_aries。 +>U-boot文件:device/hisilicon/hispark\_aries/sdk\_liteos/uboot/out/boot/u-boot-hi3518ev300.bin。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..018a48efb0348dbaa9abf0d5f0719a0ca725f7ec --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" @@ -0,0 +1,106 @@ +--- +title: 烧录 +permalink: /pages/010201030304 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 烧录 + +- [前提条件](#section14614124417580) +- [使用串口烧录](#section195291211181215) + +烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 + +DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,用户可点击Visual Studio Code左侧栏的![](/images/device-dev/quick-start/figures/2021-01-27_170334.png)图标打开DevEco Device Tool。 + +Hi3518EV300开发板的代码烧录支持USB烧录和串口烧录两种方式,其中: + +- **Windows系统:支持USB烧录和串口烧录。** +- **Linux系统:支持串口烧录**。 + +Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 + +此处仅以Linux系统下串口烧录方式为例进行说明。 + +## 前提条件 + +1. 在DevEco Device Tool工具中点击**Import Project**导入新建应用程序章节修改后的源码文件。 + + ![](/images/device-dev/quick-start/figures/import-project.png) + +2. 选择源码导入时,系统会提示该工程不是DevEco Device Tool工程,点击**Import**。 + + ![](/images/device-dev/quick-start/figures/import-project-confirm.png) + +3. MCU选择HiSilicom\_Arm下的Hi3518EV300,Board选择hi3518ev300,Framework选择Hb,然后点击**Import**完成导入。 + + ![](/images/device-dev/quick-start/figures/hi3518-import-projects.png) + + +## 使用串口烧录 + +1. 请连接好电脑和待烧录开发板,需要同时连接串口和电源口,具体可参考[Hi3518EV300开发板介绍](https://device.harmonyos.com/cn/docs/documentation/guide/quickstart-lite-introduction-hi3518-0000001105201138)。 +2. 查看并记录对应的串口号。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 + + Windows系统,打开设备管理器查看并记录对应的串口号,或在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/record-the-serial-port-number.png) + + Linux系统,在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/Snap22.png) + +3. 在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222981447.png) + +4. 在“hi3518ev300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 + + - upload\_port:选择已查询的串口号。 + - upload\_protocol:选择烧录协议,固定选择“hiburn-serial”。 + - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 + + ![](/images/device-dev/quick-start/figures/Snap24.png) + +5. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:fastboot、kernel、rootfs和userfs。 + 1. 在“hi3518ev300\_fastboot”页签,在New Option选项中选择需要修改的项,例如partition\_bin(烧录文件路径)、partition\_addr(烧录文件起始地址)、partition\_length(烧录文件分区长度)等。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177301516.png) + + 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,遵循以下原则: + >- 要求设置的烧录分区大小,要大于待烧录文件的大小。 + >- 同时,各烧录文件的分区地址设置不能出现重叠。 + >- 总的烧录分区大小不能超过16MB。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222781271.png) + + 3. 按照相同的方法修改kernel、footfs和userfs的烧录文件信息。 + +6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 +7. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击hi3518ev300下的**Upload**按钮,启动烧录。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001117329380.png) + +8. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001074287476.png) + +9. 重新上电后,界面提示如下信息时,表示烧录成功。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001073838982.png) + +10. 烧录成功后,请根据镜像运行章节进行操作,启动系统。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..2d6a31cc04a02604c94d5edb9b4c6fbe395341af --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" @@ -0,0 +1,46 @@ +--- +title: 运行 +permalink: /pages/010201030305 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 运行 + +- [镜像运行](#section1081111115589) +- [下一步学习](#section9712145420182) + +## 镜像运行 + +在完成Hi3518EV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 + +1. 在Hi3518EV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >DevEco Device Tool针对Hi3518EV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 + + ![](/images/device-dev/quick-start/figures/hi3518-bootloader.png) + +2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 + + ![](/images/device-dev/quick-start/figures/hi3518-reset-success.png) + +3. 在任务栏点击**Monitor**按钮,启动串口工具。 + + ![](/images/device-dev/quick-start/figures/hi3518-monitor.png) + +4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。 + + ![](/images/device-dev/quick-start/figures/hi3518-reboot-success.png) + + +## 下一步学习 + +恭喜您,已完成Hi3518的快速上手!建议您下一步进入[无屏摄像头产品开发](/pages/extra/470a3f/)的学习 。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 46% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 74d45523abf6b3569627e47b4190c8d9ed164296..ba3f05ab03484c9ac70fa4f345df6835d8bf5d9c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/000100020202 +permalink: /pages/010201030306 navbar: true sidebar: true prev: true @@ -9,37 +9,47 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:43 --- -# 常见问题 +# 常见问题 -- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](#section1498892119619) +- [烧写选择串口后提示失败](#section1498892119619) - [Windows电脑与单板网络连接失败](#section8512971816) - [烧写失败](#section1767804111198) - [编译构建过程中,提示找不到“python”](#zh-cn_topic_0000001053466255_section1039835245619) - [串口无回显](#zh-cn_topic_0000001053466255_section14871149155911) -## 烧写选择串口后,提示“Error: Opening COMxx: Access denied” +## 烧写选择串口后提示失败 - **现象描述** - 点击烧写并选择串口后,出现“Error: Opening COMxx: Access denied”。 + 点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。 - ![](/images/device-dev/quick-start/figures/Failed-to-open-the-serial-port.png) + **图 1** 打开串口失败图 + ![](/images/device-dev/quick-start/figures/打开串口失败图-1.png "打开串口失败图-1") - **可能原因** 串口已经被占用。 -- 解决方法 +- **解决办法** + +1. 按图依次选择下拉框,查找带有serial-xx的终端。 + + **图 2** 查找是否存在占用串口的终端 + ![](/images/device-dev/quick-start/figures/查找是否存在占用串口的终端-2.png "查找是否存在占用串口的终端-2") - 检查主机中可能占用该端口的工具,关闭即可。若是当前工具占用,可按以下步骤排查并关闭: +2. 点击标号中的垃圾桶图标,关闭串口。 - 1. 排查终端窗口列表,检查是否被monitor或其他终端占用。 + **图 3** 关闭串口终端 + ![](/images/device-dev/quick-start/figures/关闭串口终端-3.png "关闭串口终端-3") - ![](/images/device-dev/quick-start/figures/terminal-list.png) +3. 重新点击烧写,选择串口并开始烧写程序。 - 2. 找到占用,点击垃圾桶图标,关闭占用。 + **图 4** 重新启动烧写任务 + + + ![](/images/device-dev/quick-start/figures/changjian1-4.png) ## Windows电脑与单板网络连接失败 @@ -48,8 +58,8 @@ date: 2021-12-30 18:31:28 点击烧写并选择串口后,无法获取文件。 - **图 1** 网络不通,Hi3518单板无法获取文件 - ![](/images/device-dev/quick-start/figures/网络不通-Hi3518单板无法获取文件.png "网络不通-Hi3518单板无法获取文件") + **图 5** 网络不通,单板无法获取文件图 + ![](/images/device-dev/quick-start/figures/网络不通-单板无法获取文件图-5.png "网络不通-单板无法获取文件图-5") - **可能原因** @@ -62,19 +72,23 @@ date: 2021-12-30 18:31:28 1. 检查网线是否连接。 2. 点击Windows防火墙。 - ![](/images/device-dev/quick-start/figures/hi3518-network-and-firewall-setting.png) + **图 6** 网络防火墙设置图 + ![](/images/device-dev/quick-start/figures/网络防火墙设置图-6.png "网络防火墙设置图-6") 3. 点击“允许应用通过防火墙”。 - ![](/images/device-dev/quick-start/figures/hi3518-firewall-and-network-protection.png) + **图 7** 防火墙和网络保护界面图 + ![](/images/device-dev/quick-start/figures/防火墙和网络保护界面图-7.png "防火墙和网络保护界面图-7") 4. 查找Visual Studio Code应用。 - ![](/images/device-dev/quick-start/figures/hi3518-selecting-the-visual-studio-code-application.png) + **图 8** 查找Visual Studio Code应用图 + ![](/images/device-dev/quick-start/figures/查找Visual-Studio-Code应用图-8.png "查找Visual-Studio-Code应用图-8") 5. 勾选Visual Studio Code的专用和公用网络的访问权限。 - ![](/images/device-dev/quick-start/figures/hi3518-allowing-the-visual-studio-code-application-to-access-the-network.png) + **图 9** 允许Visual Studio Code应用访问网络 + ![](/images/device-dev/quick-start/figures/允许Visual-Studio-Code应用访问网络-9.png "允许Visual-Studio-Code应用访问网络-9") ## 烧写失败 @@ -96,24 +110,18 @@ date: 2021-12-30 18:31:28 - **现象描述** - ![](/images/device-dev/quick-start/figures/hi3518-error-for-not-finding-python.png) - + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171774086.png) -- **可能原因1** - 没有装python。 - -- **解决办法** - - 请按照[安装Python环境](/pages/0001000102)。 +- **可能原因** -- **可能原因2** + usr/bin目录下没有python软链接。 - ![](/images/device-dev/quick-start/figures/hi3518-reason-no-python-soft-link.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171615534.png) - **解决办法** - usr/bin目录下没有python软链接,请运行以下命令: + 请运行以下命令: ``` # cd /usr/bin/ @@ -124,7 +132,7 @@ date: 2021-12-30 18:31:28 例: - ![](/images/device-dev/quick-start/figures/hi3518-solution-set-python-soft-link.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001216535401.png) ## 串口无回显 @@ -164,10 +172,10 @@ date: 2021-12-30 18:31:28 2. 根据USB烧写步骤烧写U-boot文件。 - 按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)/[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3518_upload-0000001057313128)中描述的USB烧写方法,选择对应单板的U-boot文件进行烧写。 + 按照[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/hi3518_upload-0000001057313128)中描述的USB烧写方法,选择对应单板的U-boot文件进行烧写。 3. 烧写完成后,登录串口如下图所示。 - ![](/images/device-dev/quick-start/figures/login-serial-port.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001216535397.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" index f4d412e8668d253e11039843d8c9c2920ffe36c4..16f1b5be4c63afd1f336e487e385671a0612c2ea 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/01.Hi3861\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: Hi3861开发板介绍 -permalink: /pages/0001000300 +permalink: /pages/0102010401 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:43 --- -# Hi3861开发板介绍 +# Hi3861开发板介绍 - [简介](#section19352114194115) - [资源和约束](#section82610215014) @@ -20,32 +20,36 @@ date: 2021-12-30 18:31:28 ## 简介 -Hi3861 WLAN模组是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。 +Hi3861开发板是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。 -**图 1** Hi3861 WLAN模组外观图 -![](/images/device-dev/quick-start/figures/Hi3861-WLAN模组外观图.png "Hi3861-WLAN模组外观图") +**图 1** Hi3861开发板外观图 +![](/images/device-dev/quick-start/figures/Hi3861开发板外观图.png "Hi3861开发板外观图") -另外,Hi3861 WLAN模组还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。 +另外,Hi3861开发板还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。 -**图 2** Hi3861底板外观图 -![](/images/device-dev/quick-start/figures/Hi3861底板外观图.png "Hi3861底板外观图") +**图 2** Hi3861底板外观图 + + +![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171455564.png) - RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。 - Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。 - Hi3861芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI(Synchronous Peripheral Interface)、UART(Universal Asynchronous Receiver & Transmitter)、I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路ADC(Analog to Digital Converter),同时支持高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;芯片内置SRAM(Static Random Access Memory)和Flash,可独立运行,并支持在Flash上运行程序。 - Hi3861芯片适用于智能家电等物联网智能终端领域。 - **图 3** Hi3861功能框图 - ![](/images/device-dev/quick-start/figures/Hi3861功能框图.png "Hi3861功能框图") + **图 3** Hi3861功能框图 + + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171455566.png) ## 资源和约束 -Hi3861 WLAN模组资源十分有限,整板共2MB FLASH,352KB RAM。在编写业务代码时,需注意资源使用效率。 +Hi3861开发板资源十分有限,整板共2MB FLASH,352KB RAM。在编写业务代码时,需注意资源使用效率。 ## 开发板规格 -**表 1** Hi3861 WLAN模组规格清单 +**表 1** Hi3861开发板规格清单

平台类型

-

开发工具

-

用途

+ - - - - - - - - - - - - - - - - - - - - - - @@ -109,10 +73,6 @@ Hi3861开发板需要的工具如下表所示。 ## 安装Linux编译工具 ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- 如果通过“HPM组件方式”或“HPM包管理器命令行工具方式”获取源码,不需要安装gcc\_riscv32编译工具。 ->- (推荐)如果通过“镜像站点方式”或“代码仓库方式”获取源码,需要安装gcc\_riscv32编译工具。安装gcc\_riscv32编译工具时,请确保编译工具的环境变量路径唯一。 - ### 安装编译依赖基础软件(仅Ubuntu 20+需要) 执行以下命令进行安装: @@ -123,20 +83,19 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ### 安装Scons -1. 打开Linux编译服务器终端。 -2. 运行如下命令,安装SCons安装包。 +1. 运行如下命令,安装SCons安装包。 ``` python3 -m pip install scons ``` -3. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。 +2. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。 ``` scons -v ``` - **图 2** SCons安装成功界面,版本要求3.0.4以上 + **图 1** SCons安装成功界面,版本要求3.0.4以上 ![](/images/device-dev/quick-start/figures/SCons安装成功界面-版本要求3-0-4以上.png "SCons安装成功界面-版本要求3-0-4以上") @@ -232,14 +191,14 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ### 安装gcc\_riscv32(WLAN模组类编译工具链) >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- Hi3861平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。 ->- 通过下述步骤2-15,我们编译好了gcc\_riscv32镜像,提供给开发者[直接下载](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz)使用。直接下载gcc\_riscv32镜像的开发者可省略下述2-15步。 +>- Hi3861开发板平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。 +>- 通过下述步骤2-15,我们编译好了gcc\_riscv32 镜像,提供给开发者[直接下载](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz)使用。直接下载 gcc\_riscv32 镜像的开发者可省略下述2-15步。 1. 打开Linux编译服务器终端。 2. 环境准备,请安装"gcc, g++, bison, flex, makeinfo"软件,确保工具链能正确编译。 ``` - sudo apt-get install gcc g++ flex bison texinfo + sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install flex bison && sudo apt-get install texinfo ``` 3. 下载riscv-gnu-toolchain交叉编译工具链。 @@ -321,19 +280,10 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev 16. 设置环境变量。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果直接采用编译好的riscv32 gcc包,请参照如下步骤设置环境变量: - >1. 将压缩包解压到根目录 - > ``` - > tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ - > ``` - >2. 设置环境变量。 - > ``` - > vim ~/.bashrc - > ``` - >3. 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 - > ``` - > export PATH=~/gcc_riscv32/bin:$PATH - > ``` + >如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录: + >``` + >tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ + >``` ``` vim ~/.bashrc @@ -358,14 +308,3 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ``` -## 安装USB转串口驱动 - -相关步骤在Windows工作台操作。 - -1. 点击链接[下载CH341SER USB转串口](http://www.hihope.org/download/download.aspx?mtt=8)驱动程序。 -2. 点击安装包,安装驱动程序。 -3. 驱动安装完成后,重新插拔USB接口,串口信息显示如下图所示。 - - ![](/images/device-dev/quick-start/figures/serial-port-entry.png) - - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" similarity index 46% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" index 091a3d3cafdeef87a374dbf69428773df7bcaf50..5da37d35e01365fd1578e17444c1c0ac7cb55a1f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -1,6 +1,6 @@ --- -title: 运行 -permalink: /pages/000100020001 +title: 新建应用程序 +permalink: /pages/010201030102 navbar: true sidebar: true prev: true @@ -9,23 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 运行Hello World +# 新建应用程序 -- [修改源码](#section79601457101015) -- [调测验证](#section1621064881419) - - [printf打印](#section5204547123316) - - [根据asm文件进行问题定位](#section15919111423416) - -- [运行结果](#section18115713118) -- [下一步学习](#section9712145420182) - -本示例将演示如何编写简单业务,输出“Hello World”,初步了解OpenHarmony如何运行在开发板上。 - -## 修改源码 - -bugfix和新增业务两种情况,涉及源码修改。下面以新增业务(my\_first\_app)为例,向开发者介绍如何进行源码修改。 +下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world.”。请在[获取源码](/pages/0102010203)章节下载的源码目录中进行下述操作。 1. 确定目录结构。 @@ -100,73 +88,3 @@ bugfix和新增业务两种情况,涉及源码修改。下面以新增业务 - myapp是目标,指向./applications/sample/wifi-iot/app/my\_first\_app/BUILD.gn中的static\_library\("myapp"\)。 -## 调测验证 - -目前调试验证的方法有两种,分别为通过printf打印日志、通过asm文件定位panic问题,开发者可以根据具体业务情况选择。 - -由于本示例业务简单,采用printf打印日志的调试方式即可。下面开始介绍这两种调试手段的使用方法。 - -### printf打印 - -代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示。 - -``` -void HelloWorld(void) -{ - printf("[DEMO] Hello world.\n"); -} -``` - -### 根据asm文件进行问题定位 - -系统异常退出时,会在串口上打印异常退出原因调用栈信息,如下文所示。通过解析异常栈信息可以定位异常位置。 - -``` -=======KERNEL PANIC======= -**********************Call Stack********************* -Call Stack 0 -- 4860d8 addr:f784c -Call Stack 1 -- 47b2b2 addr:f788c -Call Stack 2 -- 3e562c addr:f789c -Call Stack 3 -- 4101de addr:f78ac -Call Stack 4 -- 3e5f32 addr:f78cc -Call Stack 5 -- 3f78c0 addr:f78ec -Call Stack 6 -- 3f5e24 addr:f78fc -********************Call Stack end******************* -``` - -为解析上述调用栈信息,需要使用到Hi3861\_wifiiot\_app.asm文件,该文件记录了代码中函数在Flash上的符号地址以及反汇编信息。asm文件会随版本大包一同构建输出,存放在./out/wifiiot/路径下。 - -1. 将调用栈CallStack信息保存到txt文档中,以便于编辑。(可选) -2. 打开asm文件,并搜索CallStack中的地址,列出对应的函数名 信息。通常只需找出前几个栈信息对应的函数,就可明确异常代码方向。 - - ``` - Call Stack 0 -- 4860d8 addr:f784c -- WadRecvCB - Call Stack 1 -- 47b2b2 addr:f788c -- wal_sdp_process_rx_data - Call Stack 2 -- 3e562c addr:f789c - Call Stack 3 -- 4101de addr:f78ac - Call Stack 4 -- 3e5f32 addr:f78cc - Call Stack 5 -- 3f78c0 addr:f78ec - Call Stack 6 -- 3f5e24 addr:f78fc - ``` - -3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。 - - ![](/images/device-dev/quick-start/figures/WadRecvCB-function.png) - -4. 完成代码排查及修改。 - -## 运行结果 - -示例代码编译、烧录、运行、调测后,在串口界面会显示如下结果: - -``` -ready to OS start -FileSystem mount ok. -wifi init success! -[DEMO] Hello world. -``` - -## 下一步学习 - -恭喜,您已完成Hi3861 WLAN模组快速上手!建议您下一步进入[WLAN产品开发](/pages/extra/da3986/)的学习 。 - diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b3b5968e361c75b22772624120d22b7a17d9593 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" @@ -0,0 +1,85 @@ +--- +title: 编译 +permalink: /pages/010201030103 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 编译 + +- [编译(Docker方式搭建环境)](#section681942105819) +- [编译(安装包方式搭建环境)](#section17726113335715) + +本节描述如何进行Hi3861 开发板的编译,根据上方搭建Ubuntu环境方式的不同,编译方式也有所区别。 + +- 如果Ubuntu编译环境通过Docker方式安装,请参见下方[编译(Docker方式搭建环境)](#section681942105819)。 +- 如果Ubuntu编译环境通过安装包方式安装,请参见下方[编译(安装包方式搭建环境)](#section17726113335715)。 + +## 编译(Docker方式搭建环境) + +1. 请在[获取Docker环境](/pages/0102010205#section15666113905015)中进入的Docker构建环境中,执行如下命令进行编译: + + ``` + hb set(设置编译路径) + .(选择当前路径) + 选择wifiiot_hispark_pegasus@hisilicon并回车 + hb build -f(执行编译) + ``` + + **图 1** Hi3861编译设置图例-Docker方式 + ![](/images/device-dev/quick-start/figures/Hi3861编译设置图例-Docker方式.png "Hi3861编译设置图例-Docker方式") + +2. 编译结束后,出现“wifiiot\_hispark\_pegasus build success”字样,则证明构建成功。 + + >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** + >烧录结果文件文件获取路径:out/hispark\_pegasus/wifiiot\_hispark\_pegasus。 + + +## 编译(安装包方式搭建环境) + +1. 打开DevEco Device Tool工具,点击“View \> Terminal”,进入终端界面。 + + **图 2** IDE终端工具打开方法 + + + ![](/images/device-dev/quick-start/figures/1.png) + +2. 进入代码根路径,并在终端窗口,执行脚本命令“hb set”、“.”,选择需要编译的版本“wifiiot\_hispark\_pegasus”。 + + **图 3** 在终端界面选择目标构建版本示意图 + + + ![](/images/device-dev/quick-start/figures/3.png) + +3. 执行“hb build”启动版本构建。 + + **图 4** 在终端界面执行编译命令示意图 + + + ![](/images/device-dev/quick-start/figures/4.png) + +4. 编译结束后,如果出现“wifiiot\_hispark\_pegasus build success”字样,则证明构建成功,如下图所示。 + + **图 5** 编译成功示意图 + + + ![](/images/device-dev/quick-start/figures/5.png) + +5. 构建成功后,会在./out/wifiiot/路径中生成以下文件,使用如下命令可以查看,至此编译构建流程结束。 + + ``` + ls -l out/hispark_pegasus/wifiiot_hispark_pegasus/ + ``` + + **图 6** 编译文件存放目录示意图 + + + ![](/images/device-dev/quick-start/figures/3-0.png) + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..a4ba7669801f78320a6ae396ad09b17ae73c12f5 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" @@ -0,0 +1,93 @@ +--- +title: 烧录 +permalink: /pages/010201030104 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 烧录 + +- [前提条件](#section1535374111495) +- [使用串口烧录](#section5551201122719) + +烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 + +DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,用户可点击Visual Studio Code左侧栏的![](/images/device-dev/quick-start/figures/2021-01-27_170334.png)图标打开DevEco Device Tool。 + +**Hi3861V100开发板支持串口烧录方式,Linux系统串口烧录协议为hiburn-serial。**具体操作步骤如下: + +## 前提条件 + +1. 在DevEco Device Tool工具中点击**Import Project**导入新建应用程序章节修改后的源码文件。 + + ![](/images/device-dev/quick-start/figures/import-project.png) + +2. 选择源码导入时,系统会提示该工程不是DevEco Device Tool工程,点击**Import**。 + + ![](/images/device-dev/quick-start/figures/import-project-confirm.png) + +3. MCU选择Hi3861,Board选择Hi3861,Framework选择Hb,然后点击**Import**完成导入。 + + ![](/images/device-dev/quick-start/figures/hi3861-import-projects.png) + + +## 使用串口烧录 + +1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](https://device.harmonyos.com/cn/docs/documentation/guide/quickstart-lite-introduction-hi3861-0000001105041324)[Hi3861V100开发板介绍](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-lite-introduction-hi3861.md)。 +2. 查看并记录对应的串口号。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果对应的串口异常,请根据[Hi3861V100开发板串口驱动安装](https://device.harmonyos.com/cn/docs/documentation/guide/hi3861-drivers-0000001058153433)安装USB转串口的驱动程序。 + + Window系统,打开设备管理器查看并记录对应的串口号,或在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/hi3861-record-the-serial-port-number.png) + + Linux系统,在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/Snap23.png) + +3. 在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222999125.png) + +4. 在“hi3861”页签,设置烧录选项,包括upload\_port、upload\_protocol和upload\_partitions。 + + - upload\_port:选择已查询的串口号。 + - upload\_protocol:选择烧录协议,选择“hiburn-serial”。 + - upload\_partitions:选择待烧录的文件,默认选择hi3861\_app。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177798424.png) + +5. 检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。 + 1. 在“hi3861\_app”页签,在New Option选项中选择需要修改的项,例如partition\_bin(烧录文件路径)、partition\_addr(烧录文件起始地址)、partition\_length(烧录文件分区长度)等。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177480146.png) + + 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001223000051.png) + +6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 +7. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。 + + ![](/images/device-dev/quick-start/figures/hi3861-upload.png) + +8. 启动烧录后,显示如下提示信息时,请按开发板上的RST按钮重启开发板。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001174595590.png) + +9. 重新上电后,界面提示如下信息时,表示烧录成功。 + + ![](/images/device-dev/quick-start/figures/hi3861-burning-succeeded.png) + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/05.\350\260\203\350\257\225\351\252\214\350\257\201.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/05.\350\260\203\350\257\225\351\252\214\350\257\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..63a4a6dc2fd6e7f1228a65a00fe3eef7b23e3ae0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/05.\350\260\203\350\257\225\351\252\214\350\257\201.md" @@ -0,0 +1,74 @@ +--- +title: 调试验证 +permalink: /pages/010201030105 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 调试验证 + +- [printf打印](#section42891145143811) +- [根据asm文件进行问题定位](#section754719373917) + +完成烧录之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。 + +1. 通过printf打印日志 +2. 通过asm文件定位panic问题 + +由于本示例业务简单,采用printf打印日志的调试方式即可。下方将介绍这两种调试手段的使用方法。 + +## printf打印 + +代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示: + +``` +void HelloWorld(void) +{ + printf("[DEMO] Hello world.\n"); +} +``` + +## 根据asm文件进行问题定位 + +系统异常退出时,会在串口上打印异常退出原因调用栈信息,如下文所示。通过解析异常栈信息可以定位异常位置。 + +``` +=======KERNEL PANIC======= +**********************Call Stack********************* +Call Stack 0 -- 4860d8 addr:f784c +Call Stack 1 -- 47b2b2 addr:f788c +Call Stack 2 -- 3e562c addr:f789c +Call Stack 3 -- 4101de addr:f78ac +Call Stack 4 -- 3e5f32 addr:f78cc +Call Stack 5 -- 3f78c0 addr:f78ec +Call Stack 6 -- 3f5e24 addr:f78fc +********************Call Stack end******************* +``` + +为解析上述调用栈信息,需要使用到Hi3861\_wifiiot\_app.asm文件,该文件记录了代码中函数在Flash上的符号地址以及反汇编信息。asm文件会随版本打包一同构建输出,存放在./out/wifiiot/路径下。 + +1. 将调用栈CallStack信息保存到txt文档中,以便于编辑。(可选) +2. 打开asm文件,并搜索CallStack中的地址,列出对应的函数名 信息。通常只需找出前几个栈信息对应的函数,就可明确异常代码方向。 + + ``` + Call Stack 0 -- 4860d8 addr:f784c -- WadRecvCB + Call Stack 1 -- 47b2b2 addr:f788c -- wal_sdp_process_rx_data + Call Stack 2 -- 3e562c addr:f789c + Call Stack 3 -- 4101de addr:f78ac + Call Stack 4 -- 3e5f32 addr:f78cc + Call Stack 5 -- 3f78c0 addr:f78ec + Call Stack 6 -- 3f5e24 addr:f78fc + ``` + +3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001185334336.png) + +4. 完成代码排查及修改。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/06.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/06.\350\277\220\350\241\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..4579241f6f12916d010bb021f77ba0a1848899d9 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/06.\350\277\220\350\241\214.md" @@ -0,0 +1,33 @@ +--- +title: 运行 +permalink: /pages/010201030106 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 运行 + +- [运行结果](#section18115713118) +- [下一步学习](#section9712145420182) + +## 运行结果 + +示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果: + +``` +ready to OS start +FileSystem mount ok. +wifi init success! +[DEMO] Hello world. +``` + +## 下一步学习 + +恭喜,您已完成Hi3861开发板快速上手!建议您下一步进入[WLAN产品开发](/pages/0107010101)的学习 。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/07.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/07.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 72ee2d8b1239485a3bafc9cd675ccf65780315e3..ded487461c2c576fe49c681b734f6d7e61d92112 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3861\345\274\200\345\217\221\346\235\277/07.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/000100020002 +permalink: /pages/010201030107 navbar: true sidebar: true prev: true @@ -9,121 +9,22 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 常见问题 +# 常见问题 -- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](#section1221016541119) -- [安装python3过程中,提示“-bash: make: command not found”](#section1913477181213) -- [安装python3过程中,提示“zlib not available”](#section108211415131210) -- [安装python3过程中,提示“No module named '\_ctypes'”](#section2062268124) - [编译构建过程中,提示“No module named 'Crypto'”](#section982315398121) - [编译构建过程中,提示“No module named 'ecdsa'”](#section102035451216) - [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](#section4498158162320) - [编译构建过程中,提示找不到“-lgcc”](#section11181036112615) - [编译构建过程中,提示找不到“python”](#section1571810194619) - [编译构建过程中,提示找不到“python3”](#section108385316482) +- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](#section1221016541119) +- [安装python3过程中,提示“-bash: make: command not found”](#section1913477181213) +- [安装python3过程中,提示“zlib not available”](#section108211415131210) +- [安装python3过程中,提示“No module named '\_ctypes'”](#section2062268124) - [安装 kconfiglib时,遇到lsb\_release错误](#section691681635814) -## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” - -- **现象描述** - - 安装python3过程中出现以下错误: - - ``` - configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details - ``` - -- **可能原因** - - 环境中未安装“gcc”。 - -- **解决办法** - - 1、通过命令“apt-get install gcc”在线安装。 - - 2、完成后,重新安装python3。 - - -## 安装python3过程中,提示“-bash: make: command not found” - -- **现象描述** - - 安装python3过程中出现以下错误: - - ``` - -bash: make: command not found - ``` - -- **可能原因** - - 环境中未安装“make”。 - -- **解决办法** - - 1、通过命令“apt-get install make”在线安装。 - - 2、完成后,重新安装python3。 - - -## 安装python3过程中,提示“zlib not available” - -- **现象描述** - - 安装python3过程中出现以下错误: - - ``` - zipimport.ZipImportError: can't decompress data; zlib not available - ``` - -- **可能原因** - - 环境中未安装“zlib”。 - -- **解决办法** - - 方法1:通过命令“apt-get install zlib”在线安装。 - - 方法2:如果软件源中没有该软件,请从“www.zlib.net”下载版本代码,并离线安装。 - - ![](/images/device-dev/quick-start/figures/download-zlib.png) - - 完成下载后,通过以下命令安装: - - ``` - # tar xvf zlib-1.2.11.tar.gz - # cd zlib-1.2.11 - # ./configure - # make && make install - ``` - - 完成后,重新安装python3。 - - -## 安装python3过程中,提示“No module named '\_ctypes'” - -- **现象描述** - - 安装python3过程中出现以下错误: - - ``` - ModuleNotFoundError:No module named ‘_ctypes’ - ``` - - -- **可能原因** - - 环境中未安装“libffi”和“libffi-devel”。 - - -- **解决办法** - - 1、通过命令“apt-get install libffi\* -y”,在线安装。 - - 2、完成后,重新安装python3。 - - ## 编译构建过程中,提示“No module named 'Crypto'” - **现象描述** @@ -144,11 +45,11 @@ date: 2021-12-30 18:31:28 方法1:通过命令“pip3 install Crypto”,在线安装。 - 方法2:离线安装 + 方法2:离线安装。 通过网页[https://pypi.org/project/pycrypto/\#files](https://pypi.org/project/pycrypto/#files),下载源码。 - ![](/images/device-dev/quick-start/figures/Download-the-source-code.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171615542.png) 将源码放置在Linux服务器中,解压,并安装“python3 setup.py install”。 @@ -179,7 +80,7 @@ date: 2021-12-30 18:31:28 通过网页[https://pypi.org/project/ecdsa/\#files](https://pypi.org/project/ecdsa/#files),下载安装包。 - ![](/images/device-dev/quick-start/figures/download-ecdsa.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171455574.png) 将安装包放置Linux服务器中,并安装“pip3 install ecdsa-0.15-py2.py3-none-any.whl”。 @@ -206,11 +107,11 @@ date: 2021-12-30 18:31:28 方法1:通过命令“pip3 install six”,在线安装。 - 方法2:离线安装 + 方法2:离线安装。 通过网页[https://pypi.org/project/six/\#files](https://pypi.org/project/six/#files),下载安装包。 - ![](/images/device-dev/quick-start/figures/download-six.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001217013871.png) 将源码放置在Linux服务器中,并安装“pip3 install six-1.14.0-py2.py3-none-any.whl”。 @@ -263,15 +164,21 @@ date: 2021-12-30 18:31:28 - **解决办法** - 请按照[安装Python环境](/pages/0001000102) + 请使用如下命令安装Python,下方以Python3.8为例。 + + ``` + sudo apt-get install python3.8 + ``` - **可能原因2** - ![](/images/device-dev/quick-start/figures/reason-no-python-soft-link.png) + usr/bin目录下没有python软链接 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171774098.png) - **解决办法** - usr/bin目录下没有python软链接,请运行以下命令添加软链接: + 请运行以下命令添加软链接: ``` # cd /usr/bin/ @@ -282,7 +189,7 @@ date: 2021-12-30 18:31:28 例: - ![](/images/device-dev/quick-start/figures/solution-add-soft-link.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001171934032.png) ## 编译构建过程中,提示找不到“python3” @@ -298,7 +205,106 @@ date: 2021-12-30 18:31:28 - **解决办法** - 请按照[安装python](/pages/0001000102)。 + 请使用如下命令安装Python3。 + + ``` + sudo apt-get install python3.8 + ``` + + +## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” + +- **现象描述** + + 安装python3过程中出现以下错误: + + ``` + configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details + ``` + +- **可能原因** + + 环境中未安装“gcc”。 + +- **解决办法** + 1. 通过命令“apt-get install gcc”在线安装。 + 2. 完成后,重新安装python3。 + + +## 安装python3过程中,提示“-bash: make: command not found” + +- **现象描述** + + 安装python3过程中出现以下错误: + + ``` + -bash: make: command not found + ``` + +- **可能原因** + + 环境中未安装“make”。 + +- **解决办法** + 1. 通过命令“apt-get install make”在线安装。 + 2. 完成后,重新安装python3。 + + +## 安装python3过程中,提示“zlib not available” + +- **现象描述** + + 安装python3过程中出现以下错误: + + ``` + zipimport.ZipImportError: can't decompress data; zlib not avaliable + ``` + +- **可能原因** + + 环境中未安装“zlib”。 + +- **解决办法** + + 方法1:通过命令“apt-get install zlib”在线安装。 + + 方法2:如果软件源中没有该软件,请从“www.zlib.net”下载版本代码,并离线安装。 + + ![](/images/device-dev/quick-start/figures/10.png) + + 完成下载后,通过以下命令安装: + + ``` + # tar xvf zlib-1.2.11.tar.gz + # cd zlib-1.2.11 + # ./configure + # make && make install + ``` + + 完成后,重新安装python3。 + + +## 安装python3过程中,提示“No module named '\_ctypes'” + +- **现象描述** + + 安装python3过程中出现以下错误: + + ``` + ModuleNotFoundError:No module named ‘_ctypes’ + ``` + + +- **可能原因** + + 环境中未安装“libffi”和“libffi-devel”。 + + +- **解决办法** + + 1、通过命令“apt-get install libffi\* -y”,在线安装。 + + 2、完成后,重新安装python3。 ## 安装 kconfiglib时,遇到lsb\_release错误 @@ -313,10 +319,10 @@ date: 2021-12-30 18:31:28 - **可能原因** - lsb\_release模块基于的python版本与现有python版本不一致 + lsb\_release模块基于的python版本与现有python版本不一致。 - **解决办法** - 执行"find / -name lsb\_release",找到lsb\_release位置并删除,如:"sudo rm -rf /usr/bin/lsb\_release" + 执行"find / -name lsb\_release",找到lsb\_release位置并删除,如:"sudo rm -rf /usr/bin/lsb\_release"。 diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..bdb91850a782fd712bea83915703b9d6b5f42f0d --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" @@ -0,0 +1,83 @@ +--- +title: 安装开发板环境 +permalink: /pages/010201030201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 安装开发板环境 + +- [Hi3516工具要求](#section179175261196) + - [硬件要求](#section5840424125014) + - [软件要求](#section965634210501) + +- [安装Linux服务器工具](#section182916865219) + - [安装编译依赖基础软件(仅Ubuntu 20+需要)](#section45512412251) + - [安装文件打包工具及Java虚拟机环境](#section16199102083717) + + +## Hi3516工具要求 + +### 硬件要求 + +- Hi3516DV300 IoT Camera开发板 +- USB转串口线、网线(Linux工作台通过USB转串口线、网线与Hi3516DV300 开发板连接) + +### 软件要求 + +>![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** +>本节描述安装包方式搭建编译环境的操作步骤。如果使用Docker方式安装编译环境,请跳过此章节,直接从[新建应用程序](/pages/010201030202)开始操作。 + +Hi3516开发板对Linux服务器通用环境配置需要的工具及其用途如下表所示。 + +**表 1** Linux服务器开发工具及用途 + + +

开发工具

获取途径

+

用途

Linux服务器

+

编译基础软件包(仅ubuntu 20+需要)

编译基础软件包(仅ubuntu 20+需要)

-

编译依赖的基础软件包

-

通过互联网获取

+

编译依赖的基础软件包

Linux服务器

-

SCons3.0.4+

+

SCons3.0.4+

编译构建工具

-

通过互联网获取

+

编译构建工具

Linux服务器

-

python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa

-

编译构建工具

+

python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa

通过互联网获取

+

编译构建工具

Linux服务器

+

gcc riscv32

gcc riscv32

-

编译构建工具

-

通过互联网获取

-

Windows工作台

-

CH341SER.EXE

-

USB转串口驱动

-

http://www.wch.cn/search?q=ch340g&t=downloads

+

编译构建工具

+ + + + + + + + + + + + + +

开发工具

+

用途

+

编译基础软件包(仅ubuntu 20+需要)

+

编译依赖的基础软件包

+

dosfstools、mtools、mtd-utils

+

文件打包工具

+

Java 虚拟机环境

+

编译、调试和运行Java程序

+
+ +## 安装Linux服务器工具 + +### 安装编译依赖基础软件(仅Ubuntu 20+需要) + +执行以下命令进行安装: + +``` +sudo apt-get install build-essential gcc g++ make zlib* libffi-dev +``` + +### 安装文件打包工具及Java虚拟机环境 + +运行如下命令,安装dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。 + +``` +sudo apt-get install dosfstools mtools mtd-utils default-jre default-jdk +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" index 100cde6dbe46d3f2bafa31a0666bd12ea45ca9e2..d6de4ece2f2c6a0eadee4afa30e875836e245595 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\350\277\220\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/02.\346\226\260\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -1,6 +1,6 @@ --- -title: 运行 -permalink: /pages/000100020101 +title: 新建应用程序 +permalink: /pages/010201030202 navbar: true sidebar: true prev: true @@ -9,23 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 运行Hello OHOS(编译、烧录) +# 新建应用程序 -- [新建应用程序](#section204672145202) -- [编译](#section1077671315253) -- [烧录](#section1347011412201) - - [使用网口烧录](#section1935410617363) - - [镜像运行](#section24721014162010) +下方将通过修改源码的方式展示如何编写简单程序,输出“Hello OHOS!”。请在[获取源码](/pages/0102010203)章节下载的源码目录中进行下述操作。 -- [执行应用程序](#section5276734182615) - -本节指导开发者在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。 - -## 新建应用程序 - -1. 新建目录及源码 +1. 新建目录及源码。 新建**applications/sample/camera/apps/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 @@ -42,7 +32,7 @@ date: 2021-12-30 18:31:28 } ``` -2. 新建编译组织文件 +2. 新建编译组织文件。 新建**applications/sample/camera/apps/BUILD.gn**文件,内容如下所示: @@ -61,7 +51,7 @@ date: 2021-12-30 18:31:28 } ``` -3. 添加新组件 +3. 添加新组件。 修改文件**build/lite/components/applications.json**,添加组件hello\_world\_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -123,7 +113,7 @@ date: 2021-12-30 18:31:28 ], ``` -4. 修改单板配置文件 +4. 修改单板配置文件。 修改文件**vendor/hisilicon/hispark\_taurus/config.json**,新增hello\_world\_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -142,107 +132,3 @@ date: 2021-12-30 18:31:28 ``` -## 编译 - -如果Linux编译环境通过Docker方式安装,具体编译过程请参见[Docker方式获取编译环境](/pages/000a00#section107932281315)的编译操作。如果Linux编译环境通过软件包方式安装,请进入源码根目录,执行如下命令进行编译: - -``` -hb set(设置编译路径) -.(选择当前路径) -选择ipcamera_hispark_taurus@hisilicon并回车 -hb build -f(执行编译) -``` - -**图 1** Hi3516编译设置图例 -![](/images/device-dev/quick-start/figures/Hi3516编译设置图例.png "Hi3516编译设置图例") - -结果文件生成在out/hispark\_taurus/ipcamera\_hispark\_taurus目录下。 - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->Hi3516DV300单板的U-boot文件获取路径:device/hisilicon/hispark\_taurus/sdk\_liteos/uboot/out/boot/u-boot-hi3516dv300.bin - -## 烧录 - -Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三种方式。此处仅以网口烧录为例进行说明。 - -### 使用网口烧录 - -Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 - -1. 请连接好电脑和待烧录开发板,需要同时连接串口、网口和电源,具体可参考[Hi3516DV300开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3516-0000001152041033)。 -2. 打开电脑的设备管理器,查看并记录对应的串口号。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 - - ![](/images/device-dev/quick-start/figures/hi3516-record-the-serial-port-number.png) - -3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 - - ![](/images/device-dev/quick-start/figures/hi3516-deveco-device-tool-setting.png) - -4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3516DV300开发板进行适配,无需单独修改。 -5. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 - - - upload\_port:选择步骤[2](#zh-cn_topic_0000001056443961_li142386399535)中查询的串口号。 - - upload\_protocol:选择烧录协议,固定选择“hiburn-net”。 - - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 - - ![](/images/device-dev/quick-start/figures/hi3516-upload-options.png) - -6. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075)。 -7. 设置网口烧录的IP地址信息,设置如下选项: - - - upload\_net\_server\_ip:选择步骤6中设置的IP地址信息。例如192.168.1.2 - - upload\_net\_client\_mask:设置开发板的子网掩码,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如255.255.255.0 - - upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1 - - upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3 - - ![](/images/device-dev/quick-start/figures/ip-address-information.png) - -8. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 -9. 打开工程文件,点击![](/images/device-dev/quick-start/figures/hi3516-deveco-device-tool-logo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。 - - ![](/images/device-dev/quick-start/figures/hi3516-upload-start-burning.png) - -10. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 - - ![](/images/device-dev/quick-start/figures/hi3516-restart-the-development-board.png) - -11. 重新上电后,界面提示如下信息时,表示烧录成功。 - - ![](/images/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png) - -12. 烧录成功后,请根据镜像运行章节进行操作,启动系统。 - -### 镜像运行 - -在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 - -1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 - - ![](/images/device-dev/quick-start/figures/bootloader.png) - -2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 - - ![](/images/device-dev/quick-start/figures/reset_success.png) - -3. 在任务栏点击**Monitor**按钮,启动串口工具。 - - ![](/images/device-dev/quick-start/figures/monitor.png) - -4. 然后根据界面提示进行操作,直到在界面打印**OHOS \#**信息,表示系统启动成功。 - - ![](/images/device-dev/quick-start/figures/reboot_success.png) - - -## 执行应用程序 - -根目录下,在命令行输入指令“**./bin/helloworld**”执行写入的demo程序,显示成功结果如下图所示。 - -**图 2** 启动并成功执行应用程序图 -![](/images/device-dev/quick-start/figures/启动并成功执行应用程序图.png "启动并成功执行应用程序图") - diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..6e3ef5e370d996ce05953b3aad468c523721d2d7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\274\226\350\257\221.md" @@ -0,0 +1,40 @@ +--- +title: 编译 +permalink: /pages/010201030203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 编译 + +下方将介绍如何使用Hi3516开发板进行编译。使用安装包方式与docker方式搭建Ubuntu编译环境,编译步骤相同。 + +1. 请进入源码根目录,执行如下命令进行编译: + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果使用Docker方式搭建编译环境,请在[获取Docker环境](/pages/0102010205#section15666113905015)中进入的Docker构建环境中,执行如下命令进行编译。 + + ``` + hb set(设置编译路径) + .(选择当前路径) + 选择ipcamera_hispark_taurus并回车 + hb build -f(执行编译) + ``` + + **图 1** Hi3516编译设置图例-Docker方式 + ![](/images/device-dev/quick-start/figures/Hi3516编译设置图例-Docker方式.png "Hi3516编译设置图例-Docker方式") + +2. 编译结束后,出现“ipcamera\_hispark\_taurus build success”字样,则证明构建成功。 + + >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** + >烧录相关文件获取路径: + >结果文件:out/hispark\_taurus/ipcamera\_hispark\_taurus。 + >U-boot文件:device/hisilicon/hispark\_taurus/sdk\_liteos/uboot/out/boot/u-boot-hi3516dv300.bin。 + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..68e9eaa1e2ab573468cf63afc6e0405ba7a995fb --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/04.\347\203\247\345\275\225.md" @@ -0,0 +1,106 @@ +--- +title: 烧录 +permalink: /pages/010201030204 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 烧录 + +- [前提条件](#section762111572589) +- [使用网口烧录](#section12323175612487) + +烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 + +DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,用户可点击Visual Studio Code左侧栏的![](/images/device-dev/quick-start/figures/2021-01-27_170334.png)图标打开DevEco Device Tool。 + +Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三种方式。此处仅以网口烧录为例进行说明,其它方式请参考[Hi3516DV300开发板烧录](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3516-upload-0000001052148681#section1760842019292)。 + +## 前提条件 + +1. 在DevEco Device Tool工具中点击**Import Project**导入新建应用程序章节修改后的源码文件。 + + ![](/images/device-dev/quick-start/figures/import-project.png) + +2. 选择源码导入时,系统会提示该工程不是DevEco Device Tool工程,点击**Import**。 + + ![](/images/device-dev/quick-start/figures/import-project-confirm.png) + +3. MCU选择HiSilicom\_Arm下的Hi3516DV300,Board选择hi3516dv300,Framework选择Hb,然后点击**Import**完成导入。 + + ![](/images/device-dev/quick-start/figures/hi3516-import-projects.png) + + +## 使用网口烧录 + +1. 请连接好电脑和待烧录开发板,需要同时连接串口、网口和电源,具体可参考[Hi3516DV300开发板介绍](https://device.harmonyos.com/cn/docs/documentation/guide/quickstart-lite-introduction-hi3516-0000001152041033)。 +2. 查看并记录对应的串口号。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 + + Windows系统,打开设备管理器查看并记录对应的串口号,或在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/record-the-serial-port-number.png) + + Linux系统,在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/Snap22.png) + +3. 在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222969587.png) + +4. 在“hi3516dv300”页签,设置烧录选项,包括upload\_partitions、upload\_port和upload\_protocol。 + + - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 + - upload\_port:选择已查询的串口号。 + - upload\_protocol:选择烧录协议,固定选择“hiburn-net”。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177474882.png) + +5. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/documentation/guide/set_ipaddress-0000001141825075)。 +6. 设置网口烧录的IP地址信息,设置如下选项: + + - upload\_net\_server\_ip:选择步骤6中设置的IP地址信息。例如192.168.1.2 + - upload\_net\_client\_mask:设置开发板的子网掩码,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如255.255.255.0 + - upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1 + - upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3 + + ![](/images/device-dev/quick-start/figures/ip-address-information.png) + +7. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:fastboot、kernel、rootfs和userfs。 + 1. 在“hi3516dv300\_fastboot”页签,在New Option选项中选择需要修改的项,例如partition\_bin(烧录文件路径)、partition\_addr(烧录文件起始地址)、partition\_length(烧录文件分区长度)等。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222994321.png) + + 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001223185957.png) + + 3. 按照相同的方法修改kernel、rootfs和userfs的烧录文件信息。 + +8. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 +9. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。 + + ![](/images/device-dev/quick-start/figures/hi3516-upload-start-burning.png) + +10. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 + + ![](/images/device-dev/quick-start/figures/hi3516-restart-the-development-board.png) + +11. 重新上电后,界面提示如下信息时,表示烧录成功。 + + ![](/images/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png) + +12. 烧录成功后,请根据镜像运行章节进行操作,启动系统。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..7f5cc74d5b25cc60433c46f3c7afdddd01e4ce60 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/05.\350\277\220\350\241\214.md" @@ -0,0 +1,46 @@ +--- +title: 运行 +permalink: /pages/010201030205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:42 +--- +# 运行 + +- [镜像运行](#section11324753143912) +- [下一步学习](#section9712145420182) + +## 镜像运行 + +在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 + +1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 + + ![](/images/device-dev/quick-start/figures/bootloader.png) + +2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 + + ![](/images/device-dev/quick-start/figures/reset_success.png) + +3. 在任务栏点击**Monitor**按钮,启动串口工具。 + + ![](/images/device-dev/quick-start/figures/monitor.png) + +4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。 + + ![](/images/device-dev/quick-start/figures/reboot_success.png) + + +## 下一步学习 + +恭喜您,已完成Hi3516的快速上手!建议您下一步进入[带屏摄像头产品开发](/pages/extra/470a3f/)的学习 。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 47% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" index f4eee21a3c496043f245f8d337837a5b68683a12..44fa7dfd2dbf648d18fb2305d36ab860314cedea 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/03.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/000100020102 +permalink: /pages/010201030206 navbar: true sidebar: true prev: true @@ -9,37 +9,47 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 常见问题 +# 常见问题 -- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](#section627268185113) +- [烧写选择串口后提示“Error: Opening COMxx: Access denied”](#section627268185113) - [Windows电脑与单板网络连接失败](#section195391036568) - [烧写失败](#section571164016565) - [编译构建过程中,提示找不到“python”](#section1039835245619) - [串口无回显](#section14871149155911) -## 烧写选择串口后,提示“Error: Opening COMxx: Access denied” +## 烧写选择串口后提示“Error: Opening COMxx: Access denied” - **现象描述** - 点击烧写并选择串口后,出现“Error: Opening COMxx: Access denied”。 + 点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。 - ![](/images/device-dev/quick-start/figures/Failed-to-open-the-serial-port.png) + **图 1** 打开串口失败图 + ![](/images/device-dev/quick-start/figures/打开串口失败图.png "打开串口失败图") - **可能原因** 串口已经被占用。 -- 解决方法 +- **解决办法** + +1. 按图依次选择下拉框,查找带有serial-xx的终端。 + + **图 2** 查找是否存在占用串口的终端 + ![](/images/device-dev/quick-start/figures/查找是否存在占用串口的终端.png "查找是否存在占用串口的终端") + +2. 点击标号中的垃圾桶图标,关闭串口。 - 检查主机中可能占用该端口的工具,关闭即可。若是当前工具占用,可按以下步骤排查并关闭: + **图 3** 关闭串口终端 + ![](/images/device-dev/quick-start/figures/关闭串口终端.png "关闭串口终端") - 1. 排查终端窗口列表,检查是否被monitor或其他终端占用。 +3. 重新点击烧写,选择串口并开始烧写程序。 - ![](/images/device-dev/quick-start/figures/terminal-list.png) + **图 4** 重新启动烧写任务 + - 2. 找到占用,点击垃圾桶图标,关闭占用。 + ![](/images/device-dev/quick-start/figures/changjian1.png) ## Windows电脑与单板网络连接失败 @@ -48,8 +58,8 @@ date: 2021-12-30 18:31:28 点击烧写并选择串口后,无法获取文件。 - **图 1** 网络不通,Hi3516单板无法获取文件 - ![](/images/device-dev/quick-start/figures/网络不通-Hi3516单板无法获取文件.png "网络不通-Hi3516单板无法获取文件") + **图 5** 网络不通,单板无法获取文件图 + ![](/images/device-dev/quick-start/figures/网络不通-单板无法获取文件图.png "网络不通-单板无法获取文件图") - **可能原因** @@ -62,19 +72,23 @@ date: 2021-12-30 18:31:28 1. 检查网线是否连接。 2. 点击Windows防火墙。 - ![](/images/device-dev/quick-start/figures/hi3516-network-and-firewall-setting.png) + **图 6** 网络防火墙设置图 + ![](/images/device-dev/quick-start/figures/网络防火墙设置图.png "网络防火墙设置图") 3. 点击“允许应用通过防火墙”。 - ![](/images/device-dev/quick-start/figures/hi3516-firewall-and-network-protection.png) + **图 7** 防火墙和网络保护界面图 + ![](/images/device-dev/quick-start/figures/防火墙和网络保护界面图.png "防火墙和网络保护界面图") 4. 查找Visual Studio Code应用。 - ![](/images/device-dev/quick-start/figures/hi3516-selecting-the-visual-studio-code-application.png) + **图 8** 查找Visual Studio Code应用图 + ![](/images/device-dev/quick-start/figures/查找Visual-Studio-Code应用图.png "查找Visual-Studio-Code应用图") 5. 勾选Visual Studio Code的专用和公用网络的访问权限。 - ![](/images/device-dev/quick-start/figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png) + **图 9** 允许Visual Studio Code应用访问网络 + ![](/images/device-dev/quick-start/figures/允许Visual-Studio-Code应用访问网络.png "允许Visual-Studio-Code应用访问网络") ## 烧写失败 @@ -96,24 +110,30 @@ date: 2021-12-30 18:31:28 - **现象描述** - ![](/images/device-dev/quick-start/figures/symptom-for-not-finding-python.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001216693913.png) - -- **可能原因1** +- **可能原因**1 没有装python。 -- **解决办法** +- **解决办法**1 - 请按照[安装Python环境](/pages/0001000102)。 + 请使用如下命令安装Python,下方以Python3.8为例。 -- **可能原因2** + ``` + sudo apt-get install python3.8 + ``` - ![](/images/device-dev/quick-start/figures/reason-for-not-finding-python.png) -- **解决办法** +- **可能原因**2 + + usr/bin目录下没有python软链接。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001217013865.png) + +- **解决办法**2 - usr/bin目录下没有python软链接,请运行以下命令: + 请运行以下命令: ``` # cd /usr/bin/ @@ -124,7 +144,7 @@ date: 2021-12-30 18:31:28 例: - ![](/images/device-dev/quick-start/figures/solution.png) + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001216693915.png) ## 串口无回显 @@ -141,7 +161,7 @@ date: 2021-12-30 18:31:28 修改串口号。 - 请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按镜像运行修改串口号。 + 请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按镜像运行内[步骤1](#section627268185113)修改串口号。 - **可能原因2** @@ -164,11 +184,11 @@ date: 2021-12-30 18:31:28 2. 根据USB烧写步骤烧写U-boot文件。 - 按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)/[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3518_upload-0000001057313128)中描述的USB烧写方法,选择对应单板的U-boot文件进行烧写。 + 按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_upload-0000001052148681)中描述的USB烧写方法,选择对应单板的U-boot文件进行烧写。 3. 烧写完成后,登录串口如下图所示。 - **图 2** U-boot烧写完成串口显示图 + **图 10** U-boot烧写完成串口显示图 ![](/images/device-dev/quick-start/figures/U-boot烧写完成串口显示图.png "U-boot烧写完成串口显示图") diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" similarity index 55% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" index 256d944d4e8e47d3a6eb5648f32fd378ce8e2607..67031f48723893742b912ffbc1a462745362448a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/03.Hi3518\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: 安装开发板环境 -permalink: /pages/000100020200 +permalink: /pages/010201030301 navbar: true sidebar: true prev: true @@ -9,16 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:42 --- -# 安装开发板环境 +# 安装开发板环境 - [Hi3518环境搭建](#section1724111409282) - [硬件要求](#section487353718276) - [软件要求](#section17315193935817) - [安装Linux服务器工具](#section8831868501) - - [将Linux shell改为bash](#section434110241084) - [安装编译依赖基础软件(仅Ubuntu 20+需要)](#section25911132141020) - [安装文件打包工具](#section390214473129) @@ -28,18 +27,12 @@ date: 2021-12-30 18:31:28 ### 硬件要求 - Hi3518EV300 IoT Camera开发板 -- USB转串口线、网线(Windows工作台通过USB转串口线、网线与开发板连接) - - 各硬件连接关系如下图所示。 - - **图 1** Hi3518开发硬件连线图 - ![](/images/device-dev/quick-start/figures/Hi3518开发硬件连线图.png "Hi3518开发硬件连线图") - +- USB转串口线、网线(Linux工作台通过USB转串口线、网线与开发板连接) ### 软件要求 >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->本节描述安装包方式搭建编译环境的操作步骤。如果是Docker方式安装编译环境,请跳过此章节以及下述[安装Linux服务器工具](#section8831868501)章节。 +>本节描述安装包方式搭建编译环境的操作步骤。如果是Docker方式安装编译环境,请跳过此章节,从[新建应用程序](/pages/010201030302)开始操作。 Hi3518开发板对Linux服务器通用环境配置需要的工具及其获取途径如下表所示。 @@ -54,14 +47,7 @@ Hi3518开发板对Linux服务器通用环境配置需要的工具及其获取途

bash

-

命令行处理工具

-

系统配置

-

编译基础软件包(仅ubuntu 20+需要)

+

编译基础软件包(仅ubuntu 20+需要)

编译依赖的基础软件包

- diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" index 105f9d0e5d792ed32d42cf7dc6858a3690a8ba1d..f6924a6f589b2277120130a214c5e490bc473465 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/03.Hi3518\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: Hi3518开发板介绍 -permalink: /pages/0001000302 +permalink: /pages/0102010403 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:43 --- -# Hi3518开发板介绍 +# Hi3518开发板介绍 - [简介](#section14815247616) - [开发板规格](#section765112478446) @@ -20,11 +20,13 @@ date: 2021-12-30 18:31:28 Hi3518EV300作为新一代智慧视觉处理SOC,集成新一代ISP\(Image Signal Processor\)以及H.265视频压缩编码器,同时采用先进低功耗工艺和低功耗架构设计,使其在低码率、高画质、低功耗等方面引领行业水平。 -**图 1** Hi3518EV300单板正面外观图 +**图 1** Hi3518EV300单板正面外观图 ![](/images/device-dev/quick-start/figures/Hi3518EV300单板正面外观图.png "Hi3518EV300单板正面外观图") -**图 2** Hi3518EV300单板背面外观图 -![](/images/device-dev/quick-start/figures/Hi3518EV300单板背面外观图.png "Hi3518EV300单板背面外观图") +**图 2** Hi3518EV300单板背面外观图 + + +![](/images/device-dev/quick-start/figures/Hi3518正背面.png) ## 开发板规格 diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250\347\256\200\344\273\213.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250\347\256\200\344\273\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..017ff6600eee6be245b99b1bfee033b0bcf71765 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250\347\256\200\344\273\213.md" @@ -0,0 +1,36 @@ +--- +title: 标准系统入门简介 +permalink: /pages/01020201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 标准系统入门简介 + +- [快速入门流程](#section7825218111517) + +开发者可通过本文快速掌握OpenHarmony标准系统的环境搭建、编译、烧录、运行等操作。标准系统的开发有以下两种方法: + +- 使用Windows环境进行开发和烧录,使用Linux环境进行编译。 +- 统一使用Linux环境进行开发、编译和烧录。 + +因目前Windows系统不支持编译,暂时无法全部使用Windows环境进行开发,开发者可根据使用习惯选择合适的开发方法。 + +本文将介绍第二种方法,**所有操作均在Linux环境下进行**。 + +## 快速入门流程 + +标准系统快速入门流程如下图所示,其中编译源码环节可根据实际情况选择docker方式或安装包方式其中一种即可。 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>Docker环境已经封装了相关编译工具,开发者在使用该Docker环境时可以省去Ubuntu编译环境及开发板环境的的搭建操作。 + +**图 1** 标准系统快速入门流程 +![](/images/device-dev/quick-start/figures/标准系统快速入门流程.png "标准系统快速入门流程") + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207\357\274\210\344\273\205Hi3516\351\234\200\350\246\201\357\274\211.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207\357\274\210\344\273\205Hi3516\351\234\200\350\246\201\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..48a2924cbcd6226468e6f1c05b2d1dd844fb3980 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207\357\274\210\344\273\205Hi3516\351\234\200\350\246\201\357\274\211.md" @@ -0,0 +1,86 @@ +--- +title: 标准系统开发环境准备(仅Hi3516需要) +permalink: /pages/01020202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 开发环境准备 + +- [系统要求](#zh-cn_topic_0000001072959308_section1865184385215) +- [安装DevEco Device Tool](#zh-cn_topic_0000001072959308_section86587531620) + +DevEco Device Tool Ubuntu版本支持OpenHarmony源码开发、编译、烧录的一站式开发环境,因此,本章节为您介绍在Ubuntu环境下,如何搭建一套完整的可视化开发环境。 + +## 系统要求 + +- Ubuntu18及以上版本,内存推荐16 GB及以上。 +- 系统的用户名不能含有中文字符。 +- 只能使用普通用户角色搭建开发环境。 + +## 安装DevEco Device Tool + +DevEco Device Tool基于Visual Studio Code进行扩展,在Visual Studio Code上以插件方式运行,Visual Studio Code版本为1.60及以上。同时,DevEco Device Tool还依赖Python工具,并要求Python为3.8\~3.9版本。 + +在安装过程中,DevEco Device Tool会自动检查Visual Studio Code和Python,如果检测到Visual Studio Code、Python未安装或版本不符合要求,安装程序会自动安装Visual Studio Code和Python。 + +1. 将Ubuntu Shell环境修改为bash。 + 1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2,将Ubuntu shell修改为bash。 + + ``` + ls -l /bin/sh + ``` + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001194078294.png) + + 2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。 + + ``` + sudo dpkg-reconfigure dash + ``` + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001238878219.png) + +2. 下载[DevEco Device Tool 3.0 Beta2](https://device.harmonyos.com/cn/ide#download_beta)Linux版本,下载时,请先使用华为开发者帐号进行登录后下载。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)。 +3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。 + 1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.200.zip为软件包名称,请根据实际进行修改。 + + ``` + unzip devicetool-linux-tool-3.0.0.300.zip + ``` + + 2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.300.sh请根据实际进行修改。 + + ``` + chmod u+x devicetool-linux-tool-3.0.0.300.sh + ``` + +4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.300.sh请根据实际进行修改。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >安装过程中,会自动检查Visual Studio Code和Python是否安装,且版本符合要求,其中Visual Studio Code为1.60及以上版本,Python为3.8\~3.9版本。如果不满足,则安装过程中会自动安装,提示“Do you want to continue?”,请输入“Y”后继续安装。 + + ``` + sudo ./devicetool-linux-tool-3.0.0.300.sh -- --install-plugins + ``` + + 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001239348791.png) + +5. 安装完成后,在Ubuntu左下角的![](/images/device-dev/quick-start/figures/zh-cn_image_0000001075566984.png)中,启动Visual Studio Code。 +6. 启动Visual Studio Code,DevEco Device Tool运行依赖C/C++、CodeLLDB插件,请点击Visual Studio Code左侧的![](/images/device-dev/quick-start/figures/button.png)按钮,分别搜索和安装C/C++、CodeLLDB插件。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果在插件市场安装C/C++和CodeLLDB插件不成功,可手动下载插件后进行安装,具体请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/documentation/guide/offline_plugin_install-0000001074376846)。 + + ![](/images/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png) + +7. 重启Visual Studio Code,点击![](/images/device-dev/quick-start/figures/zh-cn_image_0000001239226427.png)进入DevEco Device Tool工具界面。至此,DevEco Device Tool Ubuntu开发环境安装完成。![](/images/device-dev/quick-start/figures/zh-cn_image_0000001194668634.png) + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..e13f71e14d8bfbc7641545abb857f2f4e6cb2e71 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" @@ -0,0 +1,64 @@ +--- +title: 获取源码 +permalink: /pages/01020203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 获取源码 + +### 前提条件 + +1. 注册码云gitee账号。 +2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 +3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 + + ``` + git config --global user.name "yourname" + git config --global user.email "your-email-address" + git config --global credential.helper store + ``` + +4. 安装码云repo工具,可以执行如下命令。 + + ``` + curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo #如果没有权限,可下载至其他目录,并将其配置到环境变量中 + chmod a+x /usr/local/bin/repo + pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests + ``` + + +### 获取方式 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>Master主干为开发分支,开发者可通过Master主干获取最新特性。发布版本代码相对比较稳定,开发者可基于发布版本代码进行商用功能开发。 + +- **OpenHarmony主干代码获取** + + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 + + ``` + repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify + repo sync -c + repo forall -c 'git lfs pull' + ``` + + 方式二:通过repo + https下载。 + + ``` + repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify + repo sync -c + repo forall -c 'git lfs pull' + ``` + +- **OpenHarmony发布版本代码获取** + + OpenHarmony发布版本获取源码方式请参考[Release-Notes](/pages/010104)。 + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..fb60ee8ff838ce66e39bb8c855517ab6e164c624 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -0,0 +1,143 @@ +--- +title: 创建应用程序 +permalink: /pages/010202040101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 创建应用程序 + +下方将通过修改源码的方式展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。 + +这里演示在原有applications子系统下,添加hello部件以及该部件下的helloworld模块。 + +示例完整目录如下。 + +``` +applications/standard/hello +├── helloworld +│ ├── BUILD.gn +│ ├── include +│ │ └── helloworld.h +│ └── src +│ └── helloworld.c +├── ohos.build +│ +productdefine/common +└── products + └── Hi3516DV300.json +``` + +下方为新建应用程序步骤,请在[获取源码](/pages/01020203)章节下载的源码目录中进行下述操作: + +1. 新建目录及源码。 + + 新建applications/standard/hello/helloworld/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 + + ``` + #include + #include "helloworld.h" + + int main(int argc, char **argv) + { + HelloPrint(); + return 0; + } + + void HelloPrint() + { + printf("\n************************************************\n"); + printf("\n\t\tHello World!\n"); + printf("\n************************************************\n"); + } + ``` + + 再添加头文件applications/standard/hello/helloworld/include/helloworld.h,代码如下所示。 + + ``` + #ifndef HELLOWORLD_H + #define HELLOWORLD_H + #ifdef __cplusplus + #if __cplusplus + extern "C" { + #endif + #endif + + void HelloPrint(); + + #ifdef __cplusplus + #if __cplusplus + } + #endif + #endif + #endif // HELLOWORLD_H + ``` + +2. 新建编译组织文件。 + 1. 新建applications/standard/hello/helloworld/BUILD.gn文件,内容如下所示: + + ``` + import("//build/ohos.gni") # 导入编译模板 + ohos_executable("helloworld") { # 可执行模块 + sources = [ # 模块源码 + "src/helloworld.c" + ] + include_dirs = [ # 模块依赖头文件目录 + "include" + ] + cflags = [] + cflags_c = [] + cflags_cc = [] + ldflags = [] + configs = [] + deps =[] # 部件内部依赖 + + part_name = "hello" # 所属部件名称,必选 + install_enable = true # 是否默认安装(缺省默认不安装),可选 + } + ``` + + 2. 新建applications/standard/hello/ohos.build文件,添加hello部件描述,内容如下所示。 + + ``` + { + "subsystem": "applications", # 子系统名 + "parts": { # 包含部件 + "hello": { # 新建部件名 + "version": "1.0.0", # 版本 + "variants": [ # 变种版本 + "wearable", + "phone" + ], + "module_list": [ # 部件包含模块的gn目标 + "//applications/standard/hello/helloworld:helloworld" + ], + "inner_kits": [ # 提供给其他部件的接口 + ], + "test_list": [ # 测试用例 + ] + } + } + } + ``` + + ohos.build文件包含两个部分,第一部分subsystem说明该子系统的名称,parts定义该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module\_list,假如有提供给其它部件的接口,需要在inner\_kits中说明,假如有测试用例,需要在test\_list中说明,inner\_kits与test\_list没有也可以不添加。 + +3. 修改产品配置文件。 + + 在productdefine\\common\\products\\Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。 + + ``` + "usb:usb_manager_native":{}, + "applications:prebuilt_hap":{}, + "applications:hello":{}, + "wpa_supplicant-2.9:wpa_supplicant-2.9":{}, + ``` + + diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-standard-package-environment.md "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" similarity index 30% rename from website/docs/_posts/device-dev/quick-start/quickstart-standard-package-environment.md rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" index f9ad627157b82e980dff63aa76f9d797390b8343..d61285259a3a569ccae9769fe7fa1175dca9278c 100644 --- a/website/docs/_posts/device-dev/quick-start/quickstart-standard-package-environment.md +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" @@ -1,81 +1,83 @@ --- -title: quickstart-standard-package-environment.md -permalink: /pages/extra/8bd265/ +title: 编译 +permalink: /pages/010202040102 navbar: true -sidebar: false -prev: false -next: false -search: false -article: false +sidebar: true +prev: true +next: true +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:38 +date: 2022-02-12 09:01:43 --- -# 搭建Ubuntu环境\(获取源码及编译,安装包方式\) +# 源码编译 -- [安装依赖工具](#section18431165519244) -- [获取标准系统源码](#section113751052102517) - - [前提条件](#section102871547153314) - - [操作步骤](#section429012478331) +- [使用Docker方式获取编译工具链](#section181431248132513) + - [执行prebuilts](#section111934551605) + - [安装Docker](#section1466184743915) + - [获取Docker环境](#section615912103552) -- [执行prebuilts](#section0495320152619) -- [编译](#section1664835963517) +- [使用安装包方式获取编译工具链](#section65647482593) + - [安装依赖工具](#section83441888010) + - [执行prebuilts](#section6389714142011) -## 安装依赖工具 +- [编译](#section92391739152318) -安装命令如下: +安装编译工具链后,即可对源码进行编译。在Linux环境下获取编译工具链有以下两种方式,二者选其一即可: + +1. Docker方式 + + OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译工具链进行了封装,开发者可省略对应工具的安装。 + +2. 安装包方式 + + 使用安装包方式获取编译工具链时,开发者需自行安装相应的依赖工具。 + + +## 使用Docker方式获取编译工具链 + +### 执行prebuilts + +在源码根目录下执行脚本,安装编译器及二进制工具。 ``` -sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby +bash build/prebuilts_download.sh ``` ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中Python要求安装Python 3.7及以上版本,此处以Python 3.8为例。 +### 安装Docker -## 获取标准系统源码 +请参考[官方指导](https://docs.docker.com/engine/install/)。 -### 前提条件 +### 获取Docker环境 -1. 注册码云gitee账号。 -2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 +1. 获取Docker镜像。 ``` - git config --global user.name "yourname" - git config --global user.email "your-email-address" - git config --global credential.helper store + docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 ``` -4. 安装码云repo工具,可以执行如下命令。 +2. 进入源码根目录执行如下命令,从而进入Docker构建环境。 ``` - curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo #如果没有权限,可下载至其他目录,并将其配置到环境变量中 - chmod a+x /usr/local/bin/repo - pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests + docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 ``` -### 操作步骤 +## 使用安装包方式获取编译工具链 -可通过下方两种方式获取OpenHarmony主干代码,两种方式二选一即可。建议新建个文件夹,在此文件夹下执行以下命令,下载源码,此文件夹即为源码根目录。 +### 安装依赖工具 -方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 +请在终端中输入如下命令安装编译相关的依赖工具: ``` -repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' +sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby ``` -方式二:通过repo + https 下载。 - -``` -repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' -``` +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中Python要求安装Python 3.7及以上版本,此处以Python 3.8为例。 -## 执行prebuilts +### 执行prebuilts 在源码根目录下执行脚本,安装编译器及二进制工具。 @@ -83,20 +85,17 @@ repo forall -c 'git lfs pull' bash build/prebuilts_download.sh ``` -下载的prebuilts二进制默认存放在与OpenHarmony同目录下的OpenHarmony\_2.0\_canary\_prebuilts下。 - -## 编译 - -在Linux环境进行如下操作: +## 编译 1. 进入源码根目录,执行如下命令进行版本编译。 + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >使用Docker方式获取编译工具链的,请直接通过[获取Docker环境](#section615912103552)最后一步进入的Docker构建环境执行如下命令。 + ``` - ./build.sh --product-name {product_name} + ./build.sh --product-name Hi3516DV300 --ccache ``` - \{product\_name\}为当前版本支持的平台,比如:Hi3516DV300 - 2. 检查编译结果。编译完成后,log中显示如下: ``` @@ -104,10 +103,13 @@ bash build/prebuilts_download.sh =====build Hi3516DV300 successful. ``` - 编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在out/{device_name}/packages/phone/images/ 目录下。 + 编译所生成的文件都归档在out/\{device\_name\}/目录下,结果镜像输出在out/\{device\_name\}/packages/phone/images/ 目录下。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >其他模块化编译操作,可参见[编译构建指导](/pages/00040201)。 + >其他模块化编译操作,可参见[编译构建指导](/pages/01050302)。 + +3. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](/pages/010202040103)。 -3. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](/pages/00010101)。 +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>若使用Docker环境进行编译,执行exit命令即可退出Docker。 diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..afbbc90094677b7034550188d82544f0762409f9 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" @@ -0,0 +1,114 @@ +--- +title: 烧录 +permalink: /pages/010202040103 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 镜像烧录 + +- [前提条件](#section1956213516576) +- [使用网口烧录](#section14587120161217) + +标准系统烧录,在DevEco Device Tool V2.2 Beta1及以上版本支持,下方烧录操作均在DevEco Device Tool中进行。 + +DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,用户可点击Visual Studio Code左侧栏的![](/images/device-dev/quick-start/figures/2021-01-27_170334-10.png)图标打开DevEco Device Tool。 + +Hi3516DV300支持烧录标准系统,其烧录方式包括USB烧录、网口烧录和串口烧录三种方式,其中: + +- **Windows系统:支持USB烧录、网口烧录和串口烧录**。 +- **Linux系统:支持串口烧录和网口烧录。** + +同一种烧录方式(如网口烧录),在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 + +下方以Linux系统下,网口烧录方式为例进行OpenHarmony标准系统烧录,其他两种烧录方式请参照[Hi3516DV300烧录指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)。 + +## 前提条件 + +1. 在DevEco Device Tool工具中点击**Import Project**导入新建应用程序章节修改后的源码文件。 + + ![](/images/device-dev/quick-start/figures/import-project.png) + +2. 选择源码导入时,系统会提示该工程不是DevEco Device Tool工程,点击**Import**。 + + ![](/images/device-dev/quick-start/figures/import-project-confirm.png) + +3. MCU选择**HiSilicon\_Arm\_Linux**下的Hi3516DV300,Board选择hi3516dv300,Framework选择“Ohos-sources”,然后点击**Import**完成导入。 + + ![](/images/device-dev/quick-start/figures/hisilicon-arm-linux.png) + + +## 使用网口烧录 + +1. 请连接好电脑和待烧录开发板,需要同时连接串口和USB口,具体可参考[Hi3516DV300开发板介绍](https://device.harmonyos.com/cn/docs/documentation/guide/quickstart-lite-introduction-hi3516-0000001152041033)[Hi3516DV300开发板介绍](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-lite-introduction-hi3516.md)。 +2. 查看并记录对应的串口号。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 + + Windows系统,打开设备管理器查看并记录对应的串口号,或在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/record-the-serial-port-number.png) + + Linux系统,在DevEco Device Tool中,点击QUICK ACCESS \> DevEco Home \> Device,查看并记录对应的串口号。 + + ![](/images/device-dev/quick-start/figures/Snap22.png) + +3. 在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177608370.png) + +4. 在“hi3516dv300”页签,设置烧录选项,包括upload\_partitions、upload\_port和upload\_protocol。 + + - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、boot、updater、misc、system、vendor和userdata。 + - upload\_port:选择已查询的串口号。 + - upload\_protocol:选择烧录协议,固定选择“hiburn-usb”。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001177478136.png) + +5. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:fastboot、boot、updater、misc、system、vendor和userdata。 + 1. 在“hi3516dv300\_fastboot”页签,在New Option选项中选择需要修改的项,例如partition\_bin(烧录文件路径)、partition\_addr(烧录文件起始地址)、partition\_length(烧录文件分区长度)等。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222997983.png) + + 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001222794413.png) + + 3. 按照相同的方法修改boot、updater和misc的烧录文件信息。 + +6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 +7. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击fastboot下的**Erase**按钮,擦除U-Boot。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001163045527.png) + +8. 执行**Erase**擦除操作后,显示如下提示信息时,请重启开发板(插拔USB连线)。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001114129426.png) + +9. 重新上电后,显示如下信息时,表示擦除U-Boot成功。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001113969536.png) + +10. 擦除完成后,点击hi3516dv300下的**Upload**按钮,启动烧录。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >如果您是第一次在工作台烧录Hi3516DV300/Hi3518EV300开发板,可能烧录失败,提示“not find the Devices”,请根据[Hi3516DV300/Hi3518EV300开发板USB驱动安装](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)进行处理后再重新烧录。 + + ![](/images/device-dev/quick-start/figures/1-11.png) + +11. 启动烧录后,界面提示如下信息时,表示烧录成功。 + + ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001160649343.png) + +12. 烧录完成后,请根据标准系统镜像运行进行下一步操作,完成系统启动。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" similarity index 70% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" index 5d85c7089a18ac9bd2b3ac15db806e70aa474f12..fdd468f461651f91017d6ffcb4f95dc0c1441ce4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/01.Hi3516\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" @@ -1,6 +1,6 @@ --- title: 运行 -permalink: /pages/00010102 +permalink: /pages/010202040104 navbar: true sidebar: true prev: true @@ -9,14 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- -# 镜像运行 +# 镜像运行 -- [镜像运行](#section153991115191314) +- [启动系统](#section85351839162211) +- [运行“Hello World”](#section137849131182) - [下一步](#section5600113114323) -## 镜像运行 +## 启动系统 烧录完成后通过以下步骤运行系统: @@ -41,7 +42,7 @@ date: 2021-12-30 18:31:29 setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000' ``` - ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001172030062.png) + ![](/images/device-dev/quick-start/figures/setenv-bootargs.png) 4. 保存参数设置。 @@ -60,7 +61,13 @@ date: 2021-12-30 18:31:29 ![](/images/device-dev/quick-start/figures/start-the-system.png) +## 运行“Hello World” + +设备启动后打开串口工具,在任意目录下输入命令helloworld后回车,即出现“Hello World!”字样。 + +![](/images/device-dev/quick-start/figures/zh-cn_image_0000001193533352.png) + ## 下一步 -恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](/pages/00060100),进一步熟悉OpenHarmony的开发。 +恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](/pages/01070201),进一步熟悉OpenHarmony的开发。 diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..4fab9700699edc5ada9cf210f9cc023ff8a950d9 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/01.\345\210\233\345\273\272\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -0,0 +1,143 @@ +--- +title: 创建应用程序 +permalink: /pages/010202040201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 创建应用程序 + +下方将通过修改源码的方式展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。 + +这里演示在原有applications子系统下,添加hello部件以及该部件下的helloworld模块。 + +示例完整目录如下。 + +``` +applications/standard/hello +├── helloworld +│ ├── BUILD.gn +│ ├── include +│ │ └── helloworld.h +│ └── src +│ └── helloworld.c +├── ohos.build +│ +productdefine/common +└── products + └── rk3568.json +``` + +下方为新建应用程序步骤,请在[获取源码](/pages/01020203)章节下载的源码目录中进行下述操作: + +1. 新建目录及源码。 + + 新建applications/standard/hello/helloworld/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 + + ``` + #include + #include "helloworld.h" + + int main(int argc, char **argv) + { + HelloPrint(); + return 0; + } + + void HelloPrint() + { + printf("\n************************************************\n"); + printf("\n\t\tHello World!\n"); + printf("\n************************************************\n"); + } + ``` + + 再添加头文件applications/standard/hello/helloworld/include/helloworld.h,代码如下所示。 + + ``` + #ifndef HELLOWORLD_H + #define HELLOWORLD_H + #ifdef __cplusplus + #if __cplusplus + extern "C" { + #endif + #endif + + void HelloPrint(); + + #ifdef __cplusplus + #if __cplusplus + } + #endif + #endif + #endif // HELLOWORLD_H + ``` + +2. 新建编译组织文件。 + 1. 新建applications/standard/hello/helloworld/BUILD.gn文件,内容如下所示: + + ``` + import("//build/ohos.gni") # 导入编译模板 + ohos_executable("helloworld") { # 可执行模块 + sources = [ # 模块源码 + "src/helloworld.c" + ] + include_dirs = [ # 模块依赖头文件目录 + "include" + ] + cflags = [] + cflags_c = [] + cflags_cc = [] + ldflags = [] + configs = [] + deps =[] # 部件内部依赖 + + part_name = "hello" # 所属部件名称,必选 + install_enable = true # 是否默认安装(缺省默认不安装),可选 + } + ``` + + 2. 新建applications/standard/hello/ohos.build文件,添加hello部件描述,内容如下所示。 + + ``` + { + "subsystem": "applications", # 子系统名 + "parts": { # 包含部件 + "hello": { # 新建部件名 + "version": "1.0.0", # 版本 + "variants": [ # 变种版本 + "wearable", + "phone" + ], + "module_list": [ # 部件包含模块的gn目标 + "//applications/standard/hello/helloworld:helloworld" + ], + "inner_kits": [ # 提供给其他部件的接口 + ], + "test_list": [ # 测试用例 + ] + } + } + } + ``` + + ohos.build文件包含两个部分,第一部分subsystem说明该子系统的名称,parts定义该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module\_list,假如有提供给其它部件的接口,需要在inner\_kits中说明,假如有测试用例,需要在test\_list中说明,inner\_kits与test\_list没有也可以不添加。 + +3. 修改产品配置文件。 + + 在productdefine\\common\\products\\rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。 + + ``` + "usb:usb_manager_native":{}, + "applications:prebuilt_hap":{}, + "applications:hello":{}, + "wpa_supplicant-2.9:wpa_supplicant-2.9":{}, + ``` + + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..efbec4f01b37dbe4b85535c9342ad2775fddfa9a --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/02.\347\274\226\350\257\221.md" @@ -0,0 +1,115 @@ +--- +title: 编译 +permalink: /pages/010202040202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 源码编译 + +- [使用Docker方式获取编译工具链](#section181431248132513) + - [执行prebuilts](#section111934551605) + - [安装Docker](#section1466184743915) + - [获取Docker环境](#section615912103552) + +- [使用安装包方式获取编译工具链](#section65647482593) + - [安装依赖工具](#section83441888010) + - [执行prebuilts](#section6389714142011) + +- [编译](#section92391739152318) + +安装编译工具链后,即可对源码进行编译。在Linux环境下获取编译工具链有以下两种方式,二者选其一即可: + +1. Docker方式 + + OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译工具链进行了封装,开发者可省略对应工具的安装。 + +2. 安装包方式 + + 使用安装包方式获取编译工具链时,开发者需自行安装相应的依赖工具。 + + +## 使用Docker方式获取编译工具链 + +### 执行prebuilts + +在源码根目录下执行脚本,安装编译器及二进制工具。 + +``` +bash build/prebuilts_download.sh +``` + +### 安装Docker + +请参考[官方指导](https://docs.docker.com/engine/install/)。 + +### 获取Docker环境 + +1. 获取Docker镜像。 + + ``` + docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 + ``` + +2. 进入源码根目录执行如下命令,从而进入Docker构建环境。 + + ``` + docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 + ``` + + +## 使用安装包方式获取编译工具链 + +### 安装依赖工具 + +请在终端中输入如下命令安装编译相关的依赖工具: + +``` +sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby +``` + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中Python要求安装Python 3.7及以上版本,此处以Python 3.8为例。 + +### 执行prebuilts + +在源码根目录下执行脚本,安装编译器及二进制工具。 + +``` +bash build/prebuilts_download.sh +``` + +## 编译 + +1. 进入源码根目录,执行如下命令进行版本编译。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >使用Docker方式获取编译工具链的,请直接通过[获取Docker环境](#section615912103552)最后一步进入的Docker构建环境执行如下命令。 + + ``` + ./build.sh --product-name rk3568 --ccache + ``` + +2. 检查编译结果。编译完成后,log中显示如下: + + ``` + post_process + =====build rk3568 successful. + ``` + + 编译所生成的文件都归档在out/\{device\_name\}/目录下,结果镜像输出在out/\{device\_name\}/packages/phone/images/ 目录下。 + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >其他模块化编译操作,可参见[编译构建指导](/pages/01050302)。 + +3. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](/pages/010202040103)。 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>若使用Docker环境进行编译,执行exit命令即可退出Docker。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..644d6e192e6413a5c277c843a3d41293f6b0ae18 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/03.\347\203\247\345\275\225.md" @@ -0,0 +1,17 @@ +--- +title: 烧录 +permalink: /pages/010202040203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 镜像烧录 + +请参考:[HiHope\_DAYU200烧写工具及指南](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97/HiHope-DAYU200%E9%95%9C%E5%83%8F%E7%83%A7%E5%BD%95%E6%8C%87%E5%8D%97.pdf)。 + diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..90ad207628cb603d734c5350504761e2f9f2c850 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.RK3568\345\274\200\345\217\221\346\235\277/04.\350\277\220\350\241\214.md" @@ -0,0 +1,36 @@ +--- +title: 运行 +permalink: /pages/010202040204 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# 镜像运行 + +- [启动系统](#section646361191511) +- [运行“Hello World”](#section11845976150) + +## 启动系统 + +镜像烧录完成并连接电源线之后,系统将会自动启动。开发板附带的屏幕呈现以下界面,表明系统已运行成功。 + +**图 1** 系统启动效果图 +![](/images/device-dev/quick-start/figures/系统启动效果图.jpg "系统启动效果图") + +## 运行“Hello World” + +- 设备启动后打开串口工具(以putty为例),波特率设置为1500000,连接设备。 + + ![](/images/device-dev/quick-start/figures/rk3568-run-configuration.png) + +- 打开串口后,在任意目录(以设备根目录为例)下输入命令helloworld后回车,即出现“Hello World!”字样。 + + ![](/images/device-dev/quick-start/figures/rk3568-helloworld.png) + + diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/05.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 55% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/05.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 10b9599db6e3e08fde281ad68c572b04245d5e9c..15867cb729af1776033b803d1235c661c5a50ad3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/05.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/00010103 +permalink: /pages/01020205 navbar: true sidebar: true prev: true @@ -9,13 +9,17 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- -# 常见问题 +# 常见问题 + +- [编译构建过程中,提示"ImportError: No module named apt\_pkg"](#section1864714601214) + +## 编译构建过程中,提示"ImportError: No module named apt\_pkg" - **现象描述** - Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt\_pkg" + Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt\_pkg"。 - **可能原因** diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\345\205\245\351\227\250\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/01.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" similarity index 48% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\345\205\245\351\227\250\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/01.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" index 7209cf5cd8b57cb459bcdcb74980d0dfa0089ac4..f67346630f3f48dfd3ee568954371d9391ff45d1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/01.\345\205\245\351\227\250\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/01.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- -title: 入门介绍 -permalink: /pages/00010100 +title: Hi3516开发板介绍 +permalink: /pages/0102020601 navbar: true sidebar: true prev: true @@ -9,54 +9,42 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:43 --- -# 入门介绍 +# Hi3516开发板介绍 -- [快速入门流程](#section7825218111517) - [开发板简介](#zh-cn_topic_0000001053666242_section047719215429) - [开发板规格](#zh-cn_topic_0000001053666242_section15192203316533) -开发者可通过本文快速掌握OpenHarmony标准系统的环境搭建、编译、烧录、启动等操作。标准系统可以使用Windows环境进行开发、烧录,使用Linux环境进行编译。 - -本文将以当前推荐的Hi3516DV300开发板为例对上述操作进行说明。 - -## 快速入门流程 - -标准系统快速入门流程如下图所示,其中“搭建Ubuntu环境及编译”环节可根据实际情况选择docker方式或工具包方式其中一种即可。 - -**图 1** 标准环境快速入门流程 -![](/images/device-dev/quick-start/figures/标准环境快速入门流程.png "标准环境快速入门流程") - ## 开发板简介 -Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 +Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 -**图 2** Hi3516单板正面外观图 -![](/images/device-dev/quick-start/figures/Hi3516单板正面外观图-0.png "Hi3516单板正面外观图-0") +**图 1** Hi3516单板正面外观图 +![](/images/device-dev/quick-start/figures/Hi3516单板正面外观图.png "Hi3516单板正面外观图") ## 开发板规格 **表 1** Hi3516开发板规格清单 -

规格类型

diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" index b2fb86d26cc5f5c8c1dac6397d23e89ffba2c020..a827e864108b1d23bb119e899de385297e5c3810 100644 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/04.\351\231\204\345\275\225/02.Hi3516\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: Hi3516开发板介绍 -permalink: /pages/0001000301 +permalink: /pages/0102010402 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:28 +date: 2022-02-12 09:01:43 --- -# Hi3516开发板介绍 +# Hi3516开发板介绍 - [简介](#section26131214194212) - [开发板规格](#section15192203316533) @@ -20,8 +20,10 @@ date: 2021-12-30 18:31:28 Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 -**图 1** Hi3516单板正面外观图 -![](/images/device-dev/quick-start/figures/Hi3516单板正面外观图.png "Hi3516单板正面外观图") +**图 1** Hi3516单板正面外观图 + + +![](/images/device-dev/quick-start/figures/3516正面.png) ## 开发板规格 @@ -41,10 +43,10 @@ Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代I

外部器件

  • 以太网口
  • 音频视频
    • 1路语音输入
    • 1路单声道(AC_L)输出,接3W功放(LM4871)
    • MicroHDMI(1路HDMI 1.4)
    +
  • 以太网口
  • 音频视频
    • 1路语音输入
    • 1路单声道(AC_L)输出,接3W功放(LM4871)
    • MicroHDMI(1路HDMI 1.4)
  • 摄像头
    • 传感器IMX335
    • 镜头M12,焦距4mm,光圈1.8
  • 显示屏
    • LCD连接器(2.35寸)
    • LCD连接器(5.5寸)
    -
  • 外部器件及接口
    • SD卡接口
    • JTAG/I2S 接口
    • ADC接口
    • 舵机接口
    • Grove连接器
    • USB2.0(Type C)
    • 功能按键3个,2个用户自定义按键,1个升级按键
    • LED指示灯,绿灯,红灯
    +
  • 外部器件及接口
    • SD卡接口
    • JTAG/I2S 接口
    • ADC接口
    • 舵机接口
    • Grove连接器
    • USB2.0(Type C)
    • 功能按键3个,2个用户自定义按键,1个升级按键
    • LED指示灯,绿灯,红灯

规格类型

+ - - - - - diff --git "a/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/02.RK3568\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/02.RK3568\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..56c0fd9ed6dee7c9bcc5320358ad0134d6e1f808 --- /dev/null +++ "b/website/docs/01.OpenHarmony/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/06.\351\231\204\345\275\225/02.RK3568\345\274\200\345\217\221\346\235\277\344\273\213\347\273\215.md" @@ -0,0 +1,16 @@ +--- +title: RK3568开发板介绍 +permalink: /pages/0102020602 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:43 +--- +# RK3568开发板介绍 + +参见:[润和HH-SCDAYU200开发套件](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/README.md)。 \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" "b/website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" rename to "website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" index 5de6ba1194c9deee3854f2e868f42cc85d8d1362..67b04d9da003989262d8758ceb83309983bcbe61 100644 --- "a/website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" +++ "b/website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/01.\351\232\220\347\247\201\344\277\235\346\212\244.md" @@ -1,6 +1,6 @@ --- title: 隐私保护 -permalink: /pages/00020000 +permalink: /pages/01030101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 隐私保护 @@ -208,9 +208,9 @@ date: 2021-12-30 18:31:29 从技术上保证数据处理活动的安全性,包括个人数据的加密存储、安全传输等安全机制,系统应默认开启或采取安全保护措施。 -- 对于个人数据的访问需要有保护机制,主要包括身份认证和访问控制。身份认证(如用户名、密码)限定只有经过认证的用户才能访问数据,可应用于多用户场景;访问控制(如[权限控制](/pages/00020001#li201725506375))可应用于对应用程序的限制。 +- 对于个人数据的访问需要有保护机制,主要包括身份认证和访问控制。身份认证(如用户名、密码)限定只有经过认证的用户才能访问数据,可应用于多用户场景;访问控制(如[权限控制](/pages/01030102#li201725506375))可应用于对应用程序的限制。 - 分布式设备个人数据安全存储要满足密钥管理和存储服务(HUKS:Huawei Universal Keystore)的要求,包括:密钥安全存储、数据安全存储。 -- 个人数据在分布式设备间传输要满足设备间的信任绑定关系和数据传输通道的安全性要求。详细信息可以参考[设备互联安全](/pages/00020001#section26153183616)。 +- 个人数据在分布式设备间传输要满足设备间的信任绑定关系和数据传输通道的安全性要求。详细信息可以参考[设备互联安全](/pages/01030102#section26153183616)。 - 认证凭证数据(密码、口令、指纹等)须加密存储。 **本地化处理** diff --git "a/website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" "b/website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" rename to "website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" index 4b0a82e7f4e7830c47a1415aef4fdd797e88d4a3..1f294f30917281786a3fc0c9836eadc13d3c4c08 100644 --- "a/website/docs/01.\346\226\207\346\241\243/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" +++ "b/website/docs/01.OpenHarmony/03.\345\205\274\345\256\271\346\200\247\344\270\216\345\256\211\345\205\250/01.\351\232\220\347\247\201\344\270\216\345\256\211\345\205\250\350\247\204\350\214\203/02.\345\256\211\345\205\250\346\214\207\345\215\227.md" @@ -1,6 +1,6 @@ --- title: 安全指南 -permalink: /pages/00020001 +permalink: /pages/01030102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 安全指南 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" index ccc650740c94274cdf9af9222c6dceed0ee3f082..f298b07863afc7b6a56f5f26d3f054ac107b9e26 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" @@ -1,6 +1,6 @@ --- title: 移植须知 -permalink: /pages/0003010000 +permalink: /pages/0104010101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 移植须知 @@ -46,7 +46,7 @@ OpenHarmony整体工程较为复杂,目录及实现为系统本身功能,如 -

规格类型

规格清单

+

规格清单

处理器及内部存储

+

处理器及内部存储

  • Hi3516DV300芯片
  • DDR3 1GB
  • eMMC4.5,8GB容量
+
  • Hi3516DV300芯片
  • DDR3 1GB
  • eMMC4.5,8GB容量

外部器件

+

外部器件

  • 以太网口
  • 音频视频
    • 1路语音输入
    • 1路单声道(AC_L)输出,接3W功率放大器(LM4871)
    • MicroHDMI(1路HDMI 1.4)
    +
  • 以太网口
  • 音频视频
    • 1路语音输入
    • 1路单声道(AC_L)输出,接3W功放(LM4871)
    • MicroHDMI(1路HDMI 1.4)
  • 摄像头
    • 传感器IMX335
    • 镜头M12,焦距4mm,光圈1.8
  • 显示屏
    • LCD连接器(2.35寸)
    • LCD连接器(5.5寸)
    -
  • 外部器件及接口
    • SD卡接口
    • JTAG/I2S接口
    • ADC接口
    • 舵机接口
    • Grove连接器
    • USB2.0(Type C)
    • 功能按键3个,2个用户自定义按键,1个升级按键
    • LED指示灯,绿灯,红灯
    +
  • 外部器件及接口
    • SD卡接口
    • JTAG/I2S接口
    • ADC接口
    • 舵机接口
    • Grove连接器
    • USB2.0(Type C)
    • 功能按键3个,2个用户自定义按键,1个升级按键
    • LED指示灯,绿灯,红灯

/device

板级相关实现,各个三方厂商按照OpenHarmony规范适配实现,device下具体目录结构及移植过程参见板级系统移植

+

板级相关实现,各个三方厂商按照OpenHarmony规范适配实现,device下具体目录结构及移植过程参见板级系统移植

/vendor

@@ -92,6 +92,6 @@ OpenHarmony的device目录是基础芯片的适配目录,如果在三方芯片 ## 移植规范 -- 满足OpenHarmony[开源贡献基本规范和准则](/pages/000c00)。 -- 三方芯片适配所需要贡献的代码主要在device、vendor和arch三个目录,参照[内核目录规范](/pages/0003010100)和[板级目录规范](/pages/0003010200#section6204129143013)满足基本目录命名和使用规范。 +- 满足OpenHarmony[开源贡献基本规范和准则](/pages/010d01)。 +- 三方芯片适配所需要贡献的代码主要在device、vendor和arch三个目录,参照[内核目录规范](/pages/0104010201)和[板级目录规范](/pages/0104010301#section6204129143013)满足基本目录命名和使用规范。 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" index eede1bf3dae0aab30755491a589591affe916d1e..6e0879b4e4ddbc069e2ee4625608ff7aa06a0666 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272\351\200\202\351\205\215\346\265\201\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 编译构建适配流程 -permalink: /pages/0003010001 +permalink: /pages/0104010102 navbar: true sidebar: true prev: true @@ -9,13 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 编译构建适配流程 - [编译构建适配流程](#section2159183845319) -编译构建的详细介绍请见[编译构建子系统介绍](/pages/00040200)。新增三方芯片时,编译相关的适配流程如下: +编译构建的详细介绍请见[编译构建子系统介绍](/pages/01050301)。新增三方芯片时,编译相关的适配流程如下: ## 编译构建适配流程 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" index 72fa30876847a7cc7f6b8023d67165246e8c32f1..8c39c3ffa71621e90b2c97590b06415c01d273f9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 移植概述 -permalink: /pages/0003010100 +permalink: /pages/0104010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 移植概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" index b4d9566eb43c9df6ab4be941395d6ee036348f0f..757e81378aaa766df9f57759a23d33a6f4fb9f1c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/02.\345\206\205\346\240\270\345\237\272\347\241\200\351\200\202\351\205\215.md" @@ -1,6 +1,6 @@ --- title: 内核基础适配 -permalink: /pages/0003010101 +permalink: /pages/0104010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 内核基础适配 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" index 9f2422c9bdc023a5a96df57e21e72b5c39b5392b..bf318ff8dbeed5960ade7b3fe9718e9e578bb138 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\345\206\205\346\240\270\347\247\273\346\244\215/03.\345\206\205\346\240\270\347\247\273\346\244\215\351\252\214\350\257\201.md" @@ -1,6 +1,6 @@ --- title: 内核移植验证 -permalink: /pages/0003010102 +permalink: /pages/0104010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 内核移植验证 @@ -68,5 +68,5 @@ LITE_OS_SEC_TEXT_INIT int main(void) } ``` -第一个任务运行正常后,说明最小系统的核心流程基本OK;由于xts用例框架对外依赖较多,主要是utils、bootstrap的链接脚本和编译框架,暂时无法支撑内核单独跑xts;此处略过内核测试套的测试,可以通过[XTS测试套](/pages/0003010206)来覆盖最小系统是否完整移植成功。 +第一个任务运行正常后,说明最小系统的核心流程基本OK;由于xts用例框架对外依赖较多,主要是utils、bootstrap的链接脚本和编译框架,暂时无法支撑内核单独跑xts;此处略过内核测试套的测试,可以通过[XTS测试套](/pages/0104010307)来覆盖最小系统是否完整移植成功。 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" index 65373b215e7b336469b595c0493d23e19b7e657b..9de36b0c664e8b4c75a4d904f087526a3e1efa08 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 移植概述 -permalink: /pages/0003010200 +permalink: /pages/0104010301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 移植概述 @@ -30,7 +30,7 @@ date: 2021-12-30 18:31:29 ## 板级目录规范 -板级系统编译适配参考[编译系统介绍](/pages/0003010001),板级相关的驱动、SDK、目录、HAL实现存放在device目录,目录结构和具体描述如下: +板级系统编译适配参考[编译系统介绍](/pages/0104010102),板级相关的驱动、SDK、目录、HAL实现存放在device目录,目录结构和具体描述如下: ``` . diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" index 88469c693b59a6ce3d56c397e1e8672eeca6f982..17c4db3a2a78f0d68adff64499805a730c97fb5d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/02.\346\235\277\347\272\247\351\251\261\345\212\250\351\200\202\351\205\215.md" @@ -1,6 +1,6 @@ --- title: 板级驱动适配 -permalink: /pages/0003010201 +permalink: /pages/0104010302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 板级驱动适配 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" index 9e26d9da7042ad59441decd21b3bcd9e2c360482..0cc4c4b3682e1be4d3777a38c227f604ff11db05 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/03.HAL\345\261\202\345\256\236\347\216\260.md" @@ -1,6 +1,6 @@ --- title: HAL层实现 -permalink: /pages/0003010202 +permalink: /pages/0104010303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # HAL层实现 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" index 6beadb5f326aa6b8090f54ee081642ae5141a6c8..3d93eeb0a2aaf15c6268c77d46810c1011409be5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/04.\347\263\273\347\273\237\347\273\204\344\273\266\350\260\203\347\224\250.md" @@ -1,6 +1,6 @@ --- title: 系统组件调用 -permalink: /pages/0003010203 +permalink: /pages/0104010304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 系统组件调用 @@ -35,5 +35,5 @@ date: 2021-12-30 18:31:29 DFX子系统主要包含DFR(Design for Reliability,可靠性)和DFT(Design for Testability,可测试性)特性,为开发者提供代码维测信息。 -**DFX子系统使用说明,请参考:[DFX子系统使用指导](/pages/00040e00)** +**DFX子系统使用说明,请参考:[DFX子系统使用指导](/pages/01051001)** diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" index 24db099876b201c652e0afad31756c38bd939f9e..2aa49ff740fc88db2a8982fefd4fcfd61cda543e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/05.lwIP\347\273\204\344\273\266\351\200\202\351\205\215.md" @@ -1,6 +1,6 @@ --- title: lwIP组件适配 -permalink: /pages/0003010204 +permalink: /pages/0104010305 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # lwIP组件适配 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" index 80dc53c00924c8291f7aca80d4791aa3e463364a..07189783ff7b690d5a89272510af300739791594 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/06.\344\270\211\346\226\271\347\273\204\344\273\266\351\200\202\351\205\215.md" @@ -1,6 +1,6 @@ --- title: 三方组件适配 -permalink: /pages/0003010205 +permalink: /pages/0104010306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 三方组件适配 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" index 356e9a863209cbb1d5704698cd878e8dd6650863..f7a928030bf6179033eaf5d656ca555a06510f84 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\346\235\277\347\272\247\347\263\273\347\273\237\347\247\273\346\244\215/07.XTS\350\256\244\350\257\201.md" @@ -1,6 +1,6 @@ --- title: XTS认证 -permalink: /pages/0003010206 +permalink: /pages/0104010307 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # XTS认证 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 9d12da0d039b74eea2f108f96dc1c27ba2a5176c..38aed6bb384bf72fafd048b6ca86c692d1990ac1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/02.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/04.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/00030103 +permalink: /pages/01040104 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" index a135f391d81033104c805be446a62a4a8508289c..f1d3d3e39614c12ec4e2504e5e097a09328ddace 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/01.\347\247\273\346\244\215\351\241\273\347\237\245.md" @@ -1,6 +1,6 @@ --- title: 移植须知 -permalink: /pages/0003020000 +permalink: /pages/0104020101 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 移植须知 -本文详细介绍如何将OpenHarmony[小型系统](/pages/00010000)的linux和LiteOS-A内核移植到新的开发板上,要求读者具有一定的嵌入式系统开发经验。建议先查看[入门指导](/pages/extra/197245/),以了解OpenHarmony软件架构、目录结构、内核子系统和驱动子系统相关知识。当前小型系统已适配的开发板如下表所示: + **表 1** OpenHarmony小型系统已适配的开发板 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" index c3f154fe5e2bd385c59f852d93b2f22fe5b103f8..afede00d326ba15f0b7dcb41ea955ff47dc6138b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\347\247\273\346\244\215\345\207\206\345\244\207/02.\347\274\226\350\257\221\346\236\204\345\273\272.md" @@ -1,6 +1,6 @@ --- title: 编译构建 -permalink: /pages/0003020001 +permalink: /pages/0104020102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 编译构建 @@ -19,7 +19,7 @@ date: 2021-12-30 18:31:29 ## 编译环境搭建 -首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[linux环境搭建](/pages/0001000102)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像: +首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[linux环境搭建](/pages/0102010204)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像: ``` sudo apt-get install gcc-arm-linux-gnueabi @@ -27,7 +27,7 @@ sudo apt-get install gcc-arm-linux-gnueabi ## 编译构建系统介绍 -编译构建流程、编译脚本编写、目录规则、独立编译单个组件、独立编译芯片解决方案等介绍请见[编译构建子系统介绍](/pages/00040200)。 +编译构建流程、编译脚本编写、目录规则、独立编译单个组件、独立编译芯片解决方案等介绍请见[编译构建子系统介绍](/pages/01050301)。 ## 新建芯片解决方案 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" index 8c5a721c4faa1deab05c4254ee9559f69a89e056..b0fb69344a41c7ffaac67d64658ae329ff6d6bdf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/01.LiteOS-A\345\206\205\346\240\270.md" @@ -1,6 +1,6 @@ --- title: LiteOS-A内核 -permalink: /pages/0003020100 +permalink: /pages/0104020201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # LiteOS-A内核 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" index 1227590733fdedfff59e4466eae10b5ee1746f00..67e172eca792ce1fc4cb7b6958b3154ef1b285d6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\347\247\273\346\244\215\345\206\205\346\240\270/02.Linux\345\206\205\346\240\270.md" @@ -1,6 +1,6 @@ --- title: Linux内核 -permalink: /pages/0003020101 +permalink: /pages/0104020202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # Linux内核 @@ -71,7 +71,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后 ## 验证 -调试init进程、启动shell和运行简单的用户态程序,验证内核移植是否成功。OpenHarmony[小型系统](/pages/00010000)的OS镜像结构以及linux用户态的启动流程如下图1所示: +调试init进程、启动shell和运行简单的用户态程序,验证内核移植是否成功。OpenHarmony[小型系统](/pages/01020101)的OS镜像结构以及linux用户态的启动流程如下图1所示: **图 1** 基于linux内核的OS镜像结构和用户态程序启动流程 ![](/images/device-dev/porting/figure/基于linux内核的OS镜像结构和用户态程序启动流程.png "基于linux内核的OS镜像结构和用户态程序启动流程") @@ -80,7 +80,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后 1. 制作根文件系统镜像。 - 请参考[新建芯片解决方案和产品解决方案](/pages/00040200)生成根文件系统镜像rootfs.img。从上图可以看到启动过程与产品配置强相关,在制作rootfs.img过程中请完成如下四种配置: + 请参考[新建芯片解决方案和产品解决方案](/pages/01050301)生成根文件系统镜像rootfs.img。从上图可以看到启动过程与产品配置强相关,在制作rootfs.img过程中请完成如下四种配置: - 组件配置 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" index d5c1378737b8b8a47870cc51aa15ef30c17df7fe..41ffd08f60bbbf1be8c998f2b011f429dabb5de8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/01.\347\247\273\346\244\215\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 移植概述 -permalink: /pages/0003020200 +permalink: /pages/0104020301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 移植概述 @@ -18,5 +18,5 @@ date: 2021-12-30 18:31:29 **图 1** OpenHarmony 驱动分类 ![](/images/device-dev/porting/figure/OpenHarmony-驱动分类.png "OpenHarmony-驱动分类") -HDF驱动被设计为可以跨OS使用的驱动程序,HDF驱动框架会为驱动达成这个目标提供有力的支撑。开发HDF驱动中,请尽可能只使用HDF驱动框架提供的接口,否则会导致驱动丧失跨OS使用的特性。在开始驱动开发前,建议先了解[HDF驱动框架](/pages/0004010000)。 +HDF驱动被设计为可以跨OS使用的驱动程序,HDF驱动框架会为驱动达成这个目标提供有力的支撑。开发HDF驱动中,请尽可能只使用HDF驱动框架提供的接口,否则会导致驱动丧失跨OS使用的特性。在开始驱动开发前,建议先了解[HDF驱动框架](/pages/0105020101)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" index 83d939476b335fb3138b31d81120924be6c75b30..9c20790501a712ca5c562d98d0b925af4380d284 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/02.\345\271\263\345\217\260\351\251\261\345\212\250\347\247\273\346\244\215.md" @@ -1,6 +1,6 @@ --- title: 平台驱动移植 -permalink: /pages/0003020201 +permalink: /pages/0104020302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 平台驱动移植 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" index 1432c6a9111d66b38a852b7467e1b0fbe17e6264..03138791b853894f79360d0fabb2c2f0f550c7ee 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/03.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/02.\345\260\217\345\236\213\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/03.\351\251\261\345\212\250\347\247\273\346\244\215/03.\345\231\250\344\273\266\351\251\261\345\212\250\347\247\273\346\244\215.md" @@ -1,6 +1,6 @@ --- title: 器件驱动移植 -permalink: /pages/0003020202 +permalink: /pages/0104020303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 器件驱动移植 @@ -78,7 +78,7 @@ date: 2021-12-30 18:31:29 本节描述如何移植触摸屏驱动。触摸屏的器件驱动被放置在源码目录//drivers/framework/model/input/driver/touchscreen中。 移植触摸屏驱动主要工作是向系统注册ChipDevice模型实例。 -详细的驱动开发指导,请参考 [TOUCHSCREEN开发指导](/pages/0004010301)。 +详细的驱动开发指导,请参考 [TOUCHSCREEN开发指导](/pages/0105020402)。 1. 创建触摸屏器件驱动 @@ -212,7 +212,7 @@ WLAN驱动分为两部分,一部分负责管理WLAN设备,另一个部分负
>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->详细的接口开发指导,请参考[WLAN开发](/pages/0004010303)。 +>详细的接口开发指导,请参考[WLAN开发](/pages/0105020404)。 具体的移植步骤如下: diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" index 540570fc6f2af865844907eedb1032dbf189ab2e..4d5ef561952df2951b60783bd9d5fb870d1e7370 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\240\207\345\207\206\347\263\273\347\273\237\347\247\273\346\244\215\346\214\207\345\215\227.md" @@ -1,6 +1,6 @@ --- title: 标准系统移植指南 -permalink: /pages/00030300 +permalink: /pages/01040301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 标准系统移植指南 @@ -211,7 +211,7 @@ root { } ``` -更详细的驱动开发指导,请参考 [LCD](/pages/0004010300)。 +更详细的驱动开发指导,请参考 [LCD](/pages/0105020401)。 ### 2. 触摸屏 @@ -300,7 +300,7 @@ HDF_INIT(g_touchXXXXChipEntry); } ``` -更详细的驱动开发指导,请参考 [TOUCHSCREEN](/pages/0004010301)。 +更详细的驱动开发指导,请参考 [TOUCHSCREEN](/pages/0105020402)。 ### 3. WLAN @@ -518,7 +518,7 @@ HDF_DEVICE_ROOT := $(HDF_DIR_PREFIX)/../device obj-$(CONFIG_DRIVERS_WLAN_XXX) += $(HDF_DEVICE_ROOT)/MySoCVendor/peripheral/build/standard/ ``` -当在内核中开启DRIVERS\_WLAN\_XXX开关时,会调用//device/MySoCVendor/peripheral/build/standard/中的makefile。更多详细的开发手册,请参考[WLAN开发](/pages/0006000000)。 +当在内核中开启DRIVERS\_WLAN\_XXX开关时,会调用//device/MySoCVendor/peripheral/build/standard/中的makefile。更多详细的开发手册,请参考[WLAN开发](/pages/0107010101)。 ### 4. 开发移植示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" index 36e2cf3b239d0c3efb9045c315f8e0ecae5acd2b..44bfb64b75d82e4c2e835a4882da28df869f4ebd 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/04.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/03.\346\240\207\345\207\206\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\214\207\345\257\274/02.\344\270\200\347\247\215\345\277\253\351\200\237\347\247\273\346\244\215OpenHarmonyLinux\345\206\205\346\240\270\347\232\204\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ --- title: 一种快速移植OpenHarmonyLinux内核的方法 -permalink: /pages/00030301 +permalink: /pages/01040302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 一种快速移植OpenHarmony Linux内核的方法 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" index 88b5b9d5b649a2412ffe7254064518be83f2a8c1..f569253fdfdc459e74dd727b6a498ff7467669f3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/00030000 +permalink: /pages/01040401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # 概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" index 48936486adfa1fff58ab3a70eca41756f6eaf698..fe3068e5e70761e8a4d3e90bcd5a4f117c8735ee 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/02.CMake\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" @@ -1,6 +1,6 @@ --- title: CMake方式组织编译的库移植 -permalink: /pages/00030001 +permalink: /pages/01040402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # CMake方式组织编译的库移植 @@ -240,7 +240,7 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库, 1. 搭建OpenHarmony环境 - 以hi3518ev300为例,编译出OpenHarmony镜像,烧写到开发板,参考[开发Hi3518第一个示例程序](/pages/000100020201)。 + 以hi3518ev300为例,编译出OpenHarmony镜像,烧写到开发板,参考[开发Hi3518第一个示例程序](/pages/010201030305)。 进入系统如下所示: diff --git "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" rename to "website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" index 0a3164e391c06adb2f0a4aac19404621c477c286..fc91d943d3abb2f8f9190d878b45af50f68cdf2c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/04.\347\247\273\346\244\215/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/04.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\344\270\211\346\226\271\345\272\223\347\247\273\346\244\215\346\214\207\345\257\274/03.Makefile\346\226\271\345\274\217\347\273\204\347\273\207\347\274\226\350\257\221\347\232\204\345\272\223\347\247\273\346\244\215.md" @@ -1,6 +1,6 @@ --- title: Makefile方式组织编译的库移植 -permalink: /pages/00030002 +permalink: /pages/01040403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:43 --- # Makefile方式组织编译的库移植 @@ -161,7 +161,7 @@ date: 2021-12-30 18:31:29 ## 测试 -yxml库测试步骤与double-conversion库基本一致,可参考[CMake方式组织编译的库移植](/pages/00030001#section6686144293611)的测试过程,以下内容介绍yxml库测试用例的使用方法: +yxml库测试步骤与double-conversion库基本一致,可参考[CMake方式组织编译的库移植](/pages/01040402#section6686144293611)的测试过程,以下内容介绍yxml库测试用例的使用方法: **表 3** 生成的test目录结构示意 @@ -249,7 +249,7 @@ echo "All tests completed successfully." ## 将该库编译添加到OpenHarmony工程中 -yxml库添加的过程除了适配文件build.gn和config.gni有些许变化外,其他和double-conversion库完全一致,参考[CMake方式组织编译的库移植](/pages/00030001#section1651053153715)的配置过程。要修改的适配文件及添加后的目录结构如下: +yxml库添加的过程除了适配文件build.gn和config.gni有些许变化外,其他和double-conversion库完全一致,参考[CMake方式组织编译的库移植](/pages/01040402#section1651053153715)的配置过程。要修改的适配文件及添加后的目录结构如下: - yxml库新增的BUILD.gn实现如下: diff --git "a/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/05.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213/01.\345\270\246\345\261\217\350\247\243\345\206\263\346\226\271\346\241\210\344\271\213\346\201\222\347\216\204\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213.md" "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/05.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213/01.\345\270\246\345\261\217\350\247\243\345\206\263\346\226\271\346\241\210\344\271\213\346\201\222\347\216\204\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..1dbf49a4898861c9f9808be273ec2cb0dec5dd6e --- /dev/null +++ "b/website/docs/01.OpenHarmony/04.\347\247\273\346\244\215/05.\350\275\273\351\207\217\347\263\273\347\273\237\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213/01.\345\270\246\345\261\217\350\247\243\345\206\263\346\226\271\346\241\210\344\271\213\346\201\222\347\216\204\350\212\257\347\211\207\347\247\273\346\244\215\346\241\210\344\276\213.md" @@ -0,0 +1,1314 @@ +--- +title: 带屏解决方案之恒玄芯片移植案例 +permalink: /pages/01040501 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:44 +--- + + +# 轻量带屏解决方案之恒玄芯片移植案例 + +本文章基于恒玄科技`BES2600W`芯片的欧智通[Multi-modal V200Z-R开发板](https://gitee.com/openharmony/device_board_fnlink),进行轻量带屏开发板的标准移植,开发了智能开关面板样例,同时实现了`ace_engine_lite`、`graphic_ui`、`aafwk_lite`、`appexecfwk_lite`、`HDF`等部件基于`OpenHarmony LiteOS-M`内核的适配。移植架构上采用`Board`与`SoC`分离的方案,工具链`Newlib C`库与`Musl C`库可选,`LiteOS-M`内核编译采用`gn`结合`Kconfig`图形化配置等需求。 + +## 编译构建 + +### 目录规划 + +本案例在芯片移植架构方面进行了一些改进,以前的芯片适配目录规划为: + +``` +device +└── +    └── +``` + +这样会导致,小熊派`BearPi-HM Nano`开发板与润和的`HiSpark Pegasus`开发板使用小海思的`hi3861`的`SoC`时,需要在这两款开发板里面都放置一份重复的代码。为了解决该问题,本案例将单板厂商与`SoC`厂商进行分离,可以参考[Board和SoC解耦的设计思路](https://gitee.com/openharmony-sig/sig-content/blob/master/devboard/docs/board-soc-arch-design.md),并把芯片适配目录规划为: + +``` +device +├── board --- 单板厂商目录 +│   └── fnlink --- 单板厂商名字:欧智通 +│   └── v200zr --- 单板名:v200zr +└── soc --- SoC厂商目录 + └── bestechnic --- SoC厂商名字:恒玄 + └── bes2600 --- SoC Series名:bes2600是一个系列,里面包含bes2600w等SoC名 +``` + +产品样例目录规划为: + +``` +vendor +└── bestechnic --- 开发产品样例厂商目录,恒玄开发的带屏样例,因此以bestechnic命名 + └── display_demo --- 产品名字:以智能开关面板的带屏显示样例 +``` + +### 预编译适配 + +在进行移植之前,需要进行预编译适配。 + +预编译适配主要使用`hb set`命令,设置整个项目的根目录、单板目录、产品目录、单板公司名等环境变量,为编译做准备。 + +具体的预编译适配步骤如下: + +1. 在`vendor/bestechnic/display_demo`目录下新增`config.json`文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容: + +``` +{ + "product_name": "display_demo", --- 用于hb set进行选择时,显示的产品名称 + "type": "mini", --- 构建系统的类型,mini/small/standard + "version": "3.0", --- 构建系统的版本,1.0/2.0/3.0 + "device_company": "fnlink", --- 单板厂商名,用于编译时找到/device/board/fnlink目录 + "board": "v200zr", --- 单板名,用于编译时找到/device/board/fnlink/v200zr目录 + "kernel_type": "liteos_m", --- 内核类型,因为OpenHarmony支持多内核,一块单板可能适配了多个内核,所以需要指定某个内核进行编译 + "kernel_version": "3.0.0", --- 内核版本,一块单板可能适配了多个linux内核版本,所以需要指定某个具体的内核版本进行编译 + "subsystems": [ ] --- 选择所需要编译构建的子系统 +} +``` + +2. 在`device/board/fnlink/v200zr/liteos_m`目录下新增`config.gni`文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容: + +``` +# Kernel type, e.g. "linux", "liteos_a", "liteos_m". +kernel_type = "liteos_m" --- 内核类型,跟config.json中kernel_type对应 + +# Kernel version. +kernel_version = "3.0.0" --- 内核版本,跟config.json中kernel_version对应 +``` + +3. 验证`hb set`配置是否正确,输入`hb set`能够显示如下图片表示配置正确。 + + 执行`hb set`输入项目根目录,并且回车,`hb`命令会遍历所有`//vendor//`目录下的`config.json`,给出可选产品编译选项,`config.json`的`product_name`用于显示产品名,`device_company`和`board`用于关联出`//device/board//`目录,并且匹配`/config.gni`文件,如果能够匹配多个文件,表示该单板适配了多个内核,那么可以根据`config.json`的`kernel_type`和`kernel_version`来唯一匹配`config.gni`的`kernel_type`和`kernel_version`,即可确定了需要编译适配了哪个内核的单板。 +![hb set](/images/device-dev/porting/figure/bes2600_hb_set.png) + +​ 通过`hb env`可以查看选择出来的预编译环境变量。 + +![hb env](/images/device-dev/porting/figure/bes2600_hb_env.png) + +在执行`hb build`之前,需要准备好`LiteOS-M`内核适配,具体适配步骤请参[内核移植](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/porting-bes2600w-on-minisystem-display-demo.md#%E5%86%85%E6%A0%B8%E7%A7%BB%E6%A4%8D)。 + +## 内核移植 + +内核移植需要完成`LiteOS-M Kconfig`适配、`gn`的编译构建和内核启动最小适配。 + +### LiteOS-M Kconfig适配 + +在`//kernel/liteos_m`目录下执行`make menuconfig`命令,完成编译配置选项的选择。在`Makefile`文件中,会将`hb env`的结果转换成环境变量,即`PRODUCT_PATH`、`DEVICE_PATH`和`BOARD_COMPANY`。如下代码块所示: + +``` +$(foreach line,$(shell hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g' || true),$(eval $(line))) +ifneq ($(ohos_kernel),liteos_m) +$(error The selected product ($(ohos_product)) is not a liteos_m kernel type product) +endif +--- 将hb env的每一行输出转化为变量形式,例如将[OHOS INFO] device company: fnlink转换为ohos_device_company=fnlink + +…… + +ifeq ($(BOARD_COMPANY),) +BOARD_COMPANY:=$(ohos_device_company) +endif +…… +export BOARD_COMPANY +--- 将ohos_device_company转化为BOARD_COMPANY环境变量 +``` + +在`//kernel/liteos_m/Kconfig`文件中使用这些导出的环境变量,`Kconfiglib`采用`ulfalizer`开发基于`python`的版本,[源码地址](https://github.com/ulfalizer/Kconfiglib),[功能介绍连接参考](https://github.com/zephyrproject-rtos/zephyr/blob/main/scripts/kconfig/kconfiglib.py),里面用到了`orsource`关键字,其中`o`表示`optional`,表示这个文件是否存在可选,`r`表示`relative`,表示这个文件相对当前文件的相对路径。 + +``` +config SOC_COMPANY + string "SoC company name to locate soc build path" + help + This option specifies the SoC company name, used to locate the build path for soc. This option is set by the + SoC's Kconfig file, and should be exactly the same with SoC company path, and the user should generally avoid + modifying it via the menu configuration. + +orsource "../../device/board/*/Kconfig.liteos_m.shields" --- 将所有扩展板配置信息加载进来,因为单板厂商A提供扩展板可以给单板厂商B使用,所以这里使用*匹配所有的扩展板,而非BOARD_COMPANY。另外由于OpenHarmony支持多内核设计,Kconfig文件采用liteos_m作为后缀,在进行单板适配过程中,其他内核在适配过程中,可以使用对应的内核名作为后缀名进行扩展。 + +orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards" --- 加载BOARD_COMPANY的所有单板预定义配置 + +choice + prompt "Board Selection" + +orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards" --- 提供Board选择列表 + +endchoice + +orsource "../../device/soc/*/Kconfig.liteos_m.defconfig" --- 加载所有SoC的默认配置定义 + +choice + prompt "SoC Series Selection" + +orsource "../../device/soc/*/Kconfig.liteos_m.series" --- 提供所有SoC Series选择列表 + +endchoice + +orsource "../../device/soc/*/Kconfig.liteos_m.soc" --- 加载所有SoC配置 +``` + +从`//kernel/liteos_m/Kconfig`文件可以看出需要在`//device/board/fnlink`目录下新增如下`Kconfig`文件进行适配: + +``` +. +├── v200zr --- v200zr单板配置目录 +│   ├── Kconfig.liteos_m.board --- 提供v200zr单板的配置选项 +│   ├── Kconfig.liteos_m.defconfig.board --- 提供v200zr单板的默认配置项 +│   └── liteos_m +│   └── config.gni +├── Kconfig.liteos_m.boards --- 提供fnlink单板厂商下Boards配置信息 +├── Kconfig.liteos_m.defconfig.boards --- 提供fnlink单板厂商下Boards默认配置信息 +├── Kconfig.liteos_m.shields --- 提供fnlink单板厂商下扩展板配置信息 +└── shields --- fnlink单板厂商的扩展板目录 + ├── v200zr-t0 --- fnlink单板厂商的扩展板v200zr-t0 + │   ├── Kconfig.liteos_m.defconfig.shield --- 扩展板v200zr-t0默认配置 + │   └── Kconfig.liteos_m.shield --- 扩展板v200zr-t0配置信息 + ├── v200zr-t1 + │   ├── Kconfig.liteos_m.defconfig.shield + │   └── Kconfig.liteos_m.shield + └── Kconfig.liteos_m.shields +``` + +在 `v200zr/Kconfig.liteos_m.board`需要配置选择该单板的选项,以及它依赖的`SoC`,如下: + +``` +config BOARD_v200zr + bool "select board v200zr" + depends on SOC_BES2600W --- v200zr单板用的bes2600w的SoC,只有 bes2600w的SoC被选择后,v200zr单板配置选项才可见,可以被选择。 +``` + +在 `v200zr/Kconfig.liteos_m.defconfig.board`需要配置选择该单板后,默认定义 `BOARD` 的名字为 `"v200zr"` ,如下: + +``` +if BOARD_v200zr +config BOARD + string --- string后没有带提示,因此用户不可见 + default "v200zr" + +endif # BOARD_v200zr +``` + +从`//kernel/liteos_m/Kconfig`文件可以看出需要在`//device/soc/bestechnic`目录下新增如下`Kconfig`文件进行适配: + +``` +. +├── bes2600 --- bes2600 SoC系列 +│   ├── Kconfig.liteos_m.defconfig.bes2600w --- bestechnic芯片厂商bes2600w SoC Series配置 +│   ├── Kconfig.liteos_m.defconfig.series --- bestechnic芯片厂商bes2600默认配置 +│   ├── Kconfig.liteos_m.series --- bestechnic芯片厂商bes2600 SoC Series配置 +│   └── Kconfig.liteos_m.soc --- bestechnic芯片厂商bes2600 SoC配置 +├── Kconfig.liteos_m.defconfig --- bestechnic芯片厂商SoC默认配置 +├── Kconfig.liteos_m.series --- bestechnic芯片厂商SoC Series配置 +└── Kconfig.liteos_m.soc --- bestechnic芯片厂商 SoC配置 +``` + +在 `bes2600/Kconfig.liteos_m.series` 需要配置`bes2600 SoC series`,以及它的芯片架构等信息,如下: + +``` +config SOC_SERIES_BES2600 --- 提供bes2600 SoC Series选项 + bool "Bestechnic 2600 Series" + select ARM --- 选择bes2600后,默认选择ARM架构 + select SOC_COMPANY_BESTECHNIC --- 选择bes2600后,默认选择bestechnic芯片公司,驱动会依赖这个宏配置,选择配置编译对应厂商的驱动 + select CPU_CORTEX_M33 --- 选择bes2600后,默认选择cortex-m33 CPU + help + Enable support for Bestechnic 2600 series +``` + +在 `bes2600/Kconfig.liteos_m.soc` 需要提供`bes2600 SoC series`下有多少个具体的`SoC`可供选择,如下: + +``` +choice + prompt "Bestechnic 2600 series SoC" + depends on SOC_SERIES_BES2600 --- 只有选择了bes2600 Series后,才会出现如下配置选项 + +config SOC_BES2600W --- 增加bes2600w SoC配置选择项 + bool "SoC BES2600w" + +endchoice +``` + +在 `bes2600/Kconfig.liteos_m.defconfig.series` 需要提供`bes2600 SoC series`选择后的默认配置,如下: + +``` +if SOC_SERIES_BES2600 --- 选择了bes2600 Series后,才会增加如下默认配置选项 + +rsource "Kconfig.liteos_m.defconfig.bes2600w" --- 增加bes2600w SoC的默认配置 + +config SOC_SERIES --- 增加SOC_SERIES的默认配置 + string + default "bes2600" + +endif +``` + +配置完成后,还需要根据 `kernel/liteos_m/Makefile` 文件配置`make menuconfig`的`defconfig`保存路径: + +``` +ifeq ($(TEE:1=y),y) +tee = _tee +endif +ifeq ($(RELEASE:1=y),y) +CONFIG ?= $(PRODUCT_PATH)/kernel_configs/release$(tee).config +else +CONFIG ?= $(PRODUCT_PATH)/kernel_configs/debug$(tee).config --- 配置文件保存在$(CONFIG)中,由产品最终定义 +endif + +…… + +update_config menuconfig: + $(HIDE)test -f "$(CONFIG)" && cp -v "$(CONFIG)" .config && menuconfig $(args) && savedefconfig --out "$(CONFIG)" +``` + +在这个例子中,`defconfig`配置路径为 `$(PRODUCT_PATH)/kernel_configs/debug.config`,创建该文件后,内容为空,产品的目录文件结构如下: + +``` +. +└── display_demo + ├── config.json + └── kernel_configs + └── debug.config +``` + +配置完成后,在 `kernel/liteos_m` 目录下执行 `make menuconfig`能够对`SoC Series`/`SoC`/`Board`进行选择,如下: + +![board make menuconfig](/images/device-dev/porting/figure/bes2600_board_make_menuconfig.png) + +结果将自动保存在`$(PRODUCT_PATH)/kernel_configs/debug.config`,下次执行`make menuconfig`时会导出保存的结果。 + +### gn编译适配 + +在上一步`Kconfig`的图形化配置后,将其生成的配置结果可以作为`gn`编译的输入,以控制不同模块是否编译。另外为了解决之前`gn`编写时,随意include的问题,内核编译做了模块化编译的设计,使得整个编译逻辑更加清晰,设计思路请参考[LiteOS-M内核BUILD.gn编写指南](https://gitee.com/caoruihong/kernel_liteos_m/wikis/LiteOS-M%E5%86%85%E6%A0%B8BUILD.gn%E7%BC%96%E5%86%99%E6%8C%87%E5%8D%97)。 + +在 `kernel/liteos_m/BUILD.gn` 中,指定了`Board`和`SoC`的编译入口为`//device/board/fnlink`和`//device/soc/bestechnic`。 + +``` +deps += [ "//device/board/$device_company" ] +deps += [ "//device/soc/$LOSCFG_SOC_COMPANY" ] +``` + +在`//device/board/fnlink/BUILD.gn`中,新增内容如下: + +``` +if (ohos_kernel_type == "liteos_m") { --- 由于多内核设计,对于LiteOS-M内核适配,需要用宏来隔离 + import("//kernel/liteos_m/liteos.gni") --- 引入内核gn编写模板 + module_name = get_path_info(rebase_path("."), "name") --- 动态获取当前文件目录作为模块名,防止目录名修改后,这里还需要跟着修改 + module_group(module_name) { --- 采用module_group模板 + modules = [ --- 添加需要编译的模块 + ] + } +} +``` + +同理`//device/soc/bestechnic/BUILD.gn`也是一样。 + +### 内核启动适配 + +内核启动适配的文件路径在 `//device/soc/bestechnic/bes2600/liteos_m/sdk/bsp/rtos/liteos/liteos_m/board.c` + +内核启动适配总体思路如下: + +1. 中断向量的初始化`os_vector_init` ,初始化中断的处理函数。 +2. 内核初始化`osKernelInitialize` 。 +3. 创建线程`board_main`,进行芯片平台初始化。 +4. 内核启动,开始调度线程`osKernelStart` 。 + +其中,本章节详细对第3步进行展开,其他几步为对内核函数调用,不作详细描述。 + +第3步中`board_main`在启动`OHOS_SystemInit`之前,需要初始化必要的动作,如下: + +``` +... + if(!ret) { + ... + OhosSystemAdapterHooks(); --- 系统启动时候设置钩子,启动OpenHarmonyOHOS_SystemInit的之前完成打印和驱动的初始化 + ... + OHOS_SystemInit(); --- 启动OpenHarmony服务,以及组件初始化 + } +.... +``` + +`OhosSystemAdapterHooks`函数在`device/soc/bestechnic/bes2600/liteos_m/components/utils/src/hm_sys.c`文件中,如下: + +``` +int OhosSystemAdapterHooks(void) +{ + init_trace_system(); --- 初始化打印函数 + DeviceManagerStart(); --- 调用DeviceManagerStart函数进行HDF驱动初始化,这个过程会调用单板代码中的驱动配置文件hdf.hcs以及drivers源码实现 + return 0; +} + +``` + +### littlefs文件系统移植 + +文件系统使用的是`littlefs`,适配过程中,需要在指定路径下放置文件系统预置文件,根据配置可自动生成文件系统镜像,可以实现自动化生成和打包到烧录包中。 + +1. 配置指定目录放置打包文件系统`config.json`,通过`flash_partition_dir`指定目录: + +``` + "flash_partition_dir": "fs" --- 表示在vendor/bestechnic/display_demo/fs目录下放置文件系统预置文件 +``` + +2. 在指定目录`vendor/bestechnic/display_demo/fs`下放置两部分内容: + + - `wifi_Download_cfg.yaml`:镜像的烧录配置文件,可以根据实际情况调整分区。 + - `/data/data`:第一个/`data`是挂载的根目录;第二个`data`是根目录里面的`data`目录,里面可以存放预置文件,或者在第二个`data`的同级目录再创建一个目录,打包的时候只认第一个`data`挂载根目录。 + +3. `config.json`中根据`wifi_Download_cfg.yaml`最后调整结果。 + + - `fs_src`配置文件系统挂载名字。 + - `fs_name`是最后生成文件系统的名字。 + - `block_size`配置成`4K`对齐,建议不修改。 + - `fs_size`是生成文件系统的大小。 + - `burn_name`是烧录`bin`名字的大小。 + - `enable` 表示是否生成这个文件系统 + +4. 在`//device/soc/bestechnic/bes2600/liteos_m/components/hdf_config/hdf.hcs`文件配置文件系统的烧录的起始地址、文件系统的大小以及读数据块的大小`block_size`等信息,参考配置如下: + +``` + misc { + fs_config { + littlefs_config { + match_attr = "littlefs_config"; + mount_points = ["/data"]; + partitions = [10]; + block_size = [4096]; + block_count = [1024]; + } + } + storage_config { + flash_config { + match_attr = "flash_config"; + partitions = [10]; + owner = [0]; + description = ["littlefs"]; + start_addr = [0xB60000]; + length = [0x400000]; + options = [3]; + } + } + } +``` + +最后在`device/soc/bestechnic/bes2600/liteos_m/components/fs/fs_init.c`中,通过`hdf`加载数据,进行读写`flash`,如下: + +``` +static int32_t FsDriverInit(struct HdfDeviceObject *object) +{ + if (object == NULL) { + return HDF_FAILURE; + } + if (object->property) { + if (FsGetResource(fs, object->property) != HDF_SUCCESS) { + HDF_LOGE("%s: FsGetResource failed", __func__); + return HDF_FAILURE; + } + } + for (int i = 0; i < sizeof(fs) / sizeof(fs[0]); i++) { + if (fs[i].mount_point == NULL) + continue; + + fs[i].lfs_cfg.read = littlefs_block_read; + fs[i].lfs_cfg.prog = littlefs_block_write; + fs[i].lfs_cfg.erase = littlefs_block_erase; + fs[i].lfs_cfg.sync = littlefs_block_sync; + + fs[i].lfs_cfg.read_size = 256; + fs[i].lfs_cfg.prog_size = 256; + fs[i].lfs_cfg.cache_size = 256; + fs[i].lfs_cfg.lookahead_size = 16; + fs[i].lfs_cfg.block_cycles = 1000; + + SetDefaultMountPath(i, fs[i].mount_point); + int ret = mount(NULL, fs[i].mount_point, "littlefs", 0, &fs[i].lfs_cfg); + HDF_LOGI("%s: mount fs on '%s' %s\n", __func__, fs[i].mount_point, (ret == 0) ? "succeed" : "failed"); + } + return HDF_SUCCESS; +} +``` + + + +### C库适配 + +在轻量系统中,C库适配比较复杂,设计思路请参考[LiteOS-M内核支持musl与newlib平滑切换方案](https://gitee.com/arvinzzz/ohos_kernel_design_specification/blob/master/liteos_m/%E6%94%AF%E6%8C%81newlib/%E5%86%85%E6%A0%B8%E9%80%82%E9%85%8Dnewlib%E6%96%B9%E6%A1%88%E6%80%9D%E8%B7%AF.md),由于我们的工具链采用 [gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2](https://gitee.com/link?target=https%3A%2F%2Fdeveloper.arm.com%2F-%2Fmedia%2FFiles%2Fdownloads%2Fgnu-rm%2F10.3-2021.10%2Fgcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2) 自带`newlib`的C库,那么系统移植整体采用`newlib`的C库。那么在内核的`make menuconfig`中选择`newlib`,如下图: + +![image-20211212191013553](/images/device-dev/porting/figure/bes2600_newlib_make_menuconfig.png) + +#### malloc适配 + +malloc适配参考[The Red Hat newlib C Library-malloc](https://sourceware.org/newlib/libc.html#malloc)。实现malloc适配有以下两种方法: + +- 实现 `_sbrk_r` 函数。这种方法中,内存分配函数使用`newlib`中的。 + +- 实现 `_malloc_r`, `_realloc_r`, `_reallocf_r`, `_free_r`, `_memalign_r`, 和 `_malloc_usable_size_r`。这种方法中,内存分配函数可以使用内核的。 + +为了方便地根据业务进行内存分配算法调优和问题定位,在这两种方法中,本案例选择后者。 + +首先,由于`newlib`中已经存在这些函数的符号,因此需要用到`gcc`的`wrap`的链接选项替换这些函数符号为内核的实现,内核的实现为 `//kernel/liteos_m/kal/libc/newlib/porting/src/malloc.c`。 + +然后,在`//device/board/fnlink/v200zr/liteos_m/config.gni`的新增这些函数的`wrap`链接选项。 + +``` +board_ld_flags += [ + "-Wl,--wrap=_malloc_r", + "-Wl,--wrap=_realloc_r", + "-Wl,--wrap=_reallocf_r", + "-Wl,--wrap=_free_r", + "-Wl,--wrap=_memalign_r", + "-Wl,--wrap=_malloc_usable_size_r", +] +``` + +#### vsprintf等适配 + +参考 https://sourceware.org/newlib/libc.html#vfprintf ,实现 `vprintf`, `vfprintf`, `printf`, `snprintf` 和`sprintf`。 + +类似`malloc`适配,首先要提供这些函数的实现,`//device/soc/bestechnic/bes2600/liteos_m/components/utils/src/printf.c`,本案例直接采用开源协议友好的实现。与`malloc`适配不同的是,这个函数由芯片原厂提供。因为就打印来说,根据项目的需要,实现可大可小,内核不方便提供统一的实现。 + +然后,在`//device/board/fnlink/v200zr/liteos_m/config.gni`的新增这些函数的wrap链接选项。 + +``` +board_ld_flags += [ + "-Wl,--wrap=printf", + "-Wl,--wrap=sprintf", + "-Wl,--wrap=snprintf", + "-Wl,--wrap=vsnprintf", + "-Wl,--wrap=vprintf", +] +``` + +#### open等适配 + +这部分实现由内核统一实现,芯片适配无须关注,内核文件`//kernel/liteos_m/kal/libc/newlib/porting/src/fs.c`,适配了`newlib`的`_read`、`_write`等函数,如下: + +``` +…… +ssize_t _read(int fd, void *buf, size_t nbyte) +{ + return LOS_Read(fd, buf, nbyte); +} + +ssize_t _write(int fd, const void *buf, size_t nbyte) +{ + return LOS_Write(fd, buf, nbyte); +} + +off_t _lseek(int fd, off_t offset, int whence) +{ + return LOS_Lseek(fd, offset, whence); +} +…… +``` + +## 板级系统移植 + +### 驱动移植 + +#### SoC芯片平台HDF驱动移植 + +驱动适配相关文件放置在`drivers/adapter/platform`中,对应有`gpio`,`i2c`,`pwm`,`spi`,`uart`,`watchdog`,都是通过`HDF`机制加载,本章节以`gpio`为例进行详细说明。 + +##### GPIO驱动适配 + +`gpio`驱动适配需要完成编译的适配、源码的适配。 + +在`//drivers/adapter/platform/gpio/BUILD.gn`文件中,描述了恒玄`gpio`驱动的编译适配。如下: + +``` +module_switch = defined(LOSCFG_DRIVERS_HDF_PLATFORM_GPIO) --- 如果打开HDF的GPIO配置开关,才进行如下编译 +module_name = get_path_info(rebase_path("."), "name") + +hdf_driver(module_name) { + sources = [] + if (defined(LOSCFG_SOC_COMPANY_BESTECHNIC)) { --- 如果打开恒玄的芯片配置开关,才进行恒玄GPIO的驱动编译 + sources += [ "gpio_bes.c" ] + } + + include_dirs = [ "." ] +} +``` + +在`//drivers/adapter/platform/gpio/gpio_bes.c`文件中,描述了恒玄`gpio`驱动的源码适配。 +首先,按照`OpenHarmony`的`HDF`驱动框架加载驱动基本适配框架,如下: + +``` +struct HdfDriverEntry g_GpioDriverEntry = { + .moduleVersion = 1, + .moduleName = "BES_GPIO_MODULE_HDF", + .Bind = GpioDriverBind, + .Init = GpioDriverInit, + .Release = GpioDriverRelease, +}; +HDF_INIT(g_GpioDriverEntry); --- 通过HDF_INIT 加载GPIO驱动 +``` + +然后,在初始化的时候会获取`hcs`参数进行初始化,如下: + +``` +static int32_t GpioDriverInit(struct HdfDeviceObject *device) +{ + int32_t ret; + struct GpioCntlr *gpioCntlr = NULL; + + if (device == NULL) { + HDF_LOGE("%s: device is NULL", __func__); + return HDF_ERR_INVALID_PARAM; + } + + gpioCntlr = GpioCntlrFromDevice(device); --- gpioCntlr节点变量就可以获取具体gpio配置 + if (gpioCntlr == NULL) { + ... +``` + +编码规范和设计思想见[bes 驱动适配PR](https://gitee.com/openharmony/drivers_adapter/pulls/278)的评论。 + +#### Board外设器件HDF驱动移植 + +`Board`外设器件表示通过`SoC`平台总线连接的外设器件,在本案例中,显示屏属于外设器件,其驱动适配放在`//device/board/fnlink/drivers/liteos_m`目录中。 + +##### 显示驱动适配 + +同`SoC`驱动适配,在`//device/board/fnlink/drivers/liteos_m/display/BUILD.gn`文件中,根据`hdf_driver`模板加载驱动模块,如下: + +``` +module_name = get_path_info(rebase_path("."), "name") +hdf_driver(module_name) { + sources = [ + "zzw395.c", + ] + include_dirs = [ + "//drivers/peripheral/display/interfaces/include", + ... + ] +} +``` + +在`//device/board/fnlink/drivers/liteos_m/display/zzw395.c`文件中,根据驱动框架加载显示驱动,如下: + +``` +static struct HdfDriverEntry g_ZZW395DriverEntry = { + .moduleVersion = 1, + .moduleName = "HDF_PANEL_ZZW395", + .Bind = PanelDriverBind, + .Init = PanelDriverInit, + .Release = PanelDriverRelease, +}; + +HDF_INIT(g_ZZW395DriverEntry); +``` + +其中的驱动参数根据`hcs`配置,在`PanelDriverInit`初始化时加载,如下: + +``` +static int32_t PanelDriverInit(struct HdfDeviceObject *object) +{ + if (object == NULL) { + return HDF_FAILURE; + } + HDF_LOGD("%s entry !!!", __func__); + if (object->property) { + if (PanelGetResource(&priv, object->property) != HDF_SUCCESS) { + HDF_LOGE("%s: PanelGetResource failed", __func__); + return HDF_FAILURE; + } + } +... +``` + +### OpenHarmony子系统适配 + +`OpenHarmony`子系统适配一般包含两部分: + +- 在`config.json`中增加对应子系统和部件,这样编译系统会将该部件纳入编译目标中。 +- 针对该部件的`HAL`层接口进行硬件适配,或者可选的软件功能适配。 + +#### communication子系统适配 + +##### wifi_lite部件适配 + +首先,在`config.json`文件中,增加`communication`子系统的`wifi_lite`部件,如下: + +``` + { + "subsystem": "communication", + "components": [ + { + "component": "wifi_lite", + "optional": "true" + } + ] + }, +``` + +`wifi_lite`部件在`//build/lite/components/communication.json`文件中,描述如下: + +``` + { + "component": "wifi_lite", +…… + "targets": [ + "//foundation/communication/wifi_lite:wifi" --- wifi_lite的编译目标 + ], +…… + }, + +``` + +在`//foundation/communication/wifi_lite/BUILD.gn`文件中,描述需要适配的接口头文件路径,如下: + +``` +config("include") { + include_dirs = [ "interfaces/wifiservice" ] --- 因为wifi_lite只提供头文件,不提供wifi的具体实现,所以wifi模块暴露出适配的目录路径提供给硬件厂商来适配,厂商提供wifi协议栈源码实现。 +} + +group("wifi") { + public_configs = [ ":include" ] +} +``` + +因为在本案例中,`wifi`属于`SoC`提供的功能,所以适配源码放在`SoC`的`//device/soc/bestechnic/hals/communication/wifi_lite/wifiservice`目录下,包含`wifi_device.c`和`wifi_hotspot.c`分别适配`wifi_device.h`和`wifi_hotspot.h`。如下: + +``` +…… +WifiErrorCode Scan(void) --- wifi_device.c中扫描wifi热点的函数,对wifi_device.h中Scan函数的适配实现 +{ + WifiErrorCode ret = ERROR_WIFI_BUSY; + + + if (IsWifiActive() != WIFI_STA_ACTIVE) + return ERROR_WIFI_IFACE_INVALID; + + if (g_HalHmosWifiInfo.scan_state == SCAN_REQUEST || + g_HalHmosWifiInfo.scan_state == SCAN_TRIGGER) + return ERROR_WIFI_BUSY; + + HalHmosWifiLock(); + ret = ((HalHmosSendEvent(HMOS_ON_WIFI_SCAN_STATE_CHANGED, NULL) == 0) ? WIFI_SUCCESS : ERROR_WIFI_BUSY); + HalHmosWifiUnLock(); + + return ret; +} +…… +int GetSignalLevel(int rssi, int band) --- wifi_hotspot.c中获取wifi信号热点函数,对wifi_hotspot.h中GetSignalLevel函数的适配实现。 +{ + if (band == HOTSPOT_BAND_TYPE_2G) { + if (rssi >= RSSI_LEVEL_4_2_G) + return RSSI_LEVEL_4; + if (rssi >= RSSI_LEVEL_3_2_G) + return RSSI_LEVEL_3; + if (rssi >= RSSI_LEVEL_2_2_G) + return RSSI_LEVEL_2; + if (rssi >= RSSI_LEVEL_1_2_G) + return RSSI_LEVEL_1; + } + + if (band == HOTSPOT_BAND_TYPE_5G) { + if (rssi >= RSSI_LEVEL_4_5_G) + return RSSI_LEVEL_4; + if (rssi >= RSSI_LEVEL_3_5_G) + return RSSI_LEVEL_3; + if (rssi >= RSSI_LEVEL_2_5_G) + return RSSI_LEVEL_2; + if (rssi >= RSSI_LEVEL_1_5_G) + return RSSI_LEVEL_1; + } + return ERROR_WIFI_INVALID_ARGS; +} +``` + +##### LWIP部件适配 + +`LiteOS-M kernel`目录下默认配置了`lwip`,因而具有编译功能,可以在`kernel`组件中指定`lwip`编译的目录。如下: + +``` + { + "subsystem": "kernel", + "components": [ + { + "component": "liteos_m", + "features": [ + "ohos_kernel_liteos_m_lwip_path = \"//device/soc/bestechnic/bes2600/liteos_m/components/net/lwip-2.1\"" --- 指定在芯片厂商目录中进行适配 + ] + } + ] + }, +``` + +在`//device/soc/bestechnic/bes2600/liteos_m/components/net/lwip-2.1/BUILD.gn`文件中,描述了`lwip`的编译,如下: + +``` +import("//kernel/liteos_m/liteos.gni") +import("$LITEOSTHIRDPARTY/lwip/lwip.gni") +import("$LITEOSTOPDIR/components/net/lwip-2.1/lwip_porting.gni") + +module_switch = defined(LOSCFG_NET_LWIP_SACK) +module_name = "lwip" +kernel_module(module_name) { + sources = LWIP_PORTING_FILES + LWIPNOAPPSFILES - + [ "$LWIPDIR/api/sockets.c" ] + [ "porting/src/ethernetif.c" ] --- 增加ethernetif.c文件,用以适配ethernet网卡的初始化适配 + defines = [ "LITEOS_LWIP=1" ] + defines += [ "CHECKSUM_BY_HARDWARE=1" ] +} + +config("public") { + defines = [ "_BSD_SOURCE=1" ] + include_dirs = + [ "porting/include" ] + LWIP_PORTING_INCLUDE_DIRS + LWIP_INCLUDE_DIRS +} + +``` + +在`//device/soc/bestechnic/bes2600/liteos_m/components/net/lwip-2.1/porting/include/lwip/lwipopts.h`文件中,说明原有`lwip`配置选项保持不变,软总线会依赖这些配置选项,并且新增硬件适配的配置项,如下: + +``` +#ifndef _PORTING_LWIPOPTS_H_ +#define _PORTING_LWIPOPTS_H_ + +#include_next "lwip/lwipopts.h" --- 保持原来的配置项不变 + +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_CHECKSUM_ON_COPY 0 +#define CHECKSUM_GEN_UDP 0 --- 新增硬件适配选项 + +#endif /* _PORTING_LWIPOPTS_H_ */ + +``` + +在`//device/soc/bestechnic/bes2600/liteos_m/components/net/lwip-2.1/porting/src/ethernetif.c`文件中,说明对`ethernet`网卡初始化的适配,如下: + +``` +err_t +ethernetif_init(struct netif *netif) +{ +…… +#ifdef CHECKSUM_BY_HARDWARE + eth_hw_checksum_init(); +#endif +…… + netif->linkoutput = low_level_output; + + netif->drv_send = liteos_low_level_output; + netif->hwaddr_len = NETIF_MAX_HWADDR_LEN; + low_level_init(netif); + driverif_init(netif); + return ERR_OK; +…… +} +``` + +#### 系统基本能力适配 + +本小节主要从移植的角度出发,分析适配过程中,需要操作或者注意的事项。 + +##### startup子系统适配 + +``startup`子系统适配`bootstrap_lite`/`syspara_lite`两个部件。请在`vendor/bestechnic_bak/display_demo/config.json`中新增对应的配置选项。 + +``` +{ + "subsystem": "startup", + "components": [ + { + "component": "bootstrap_lite" --- bootstrap_lite 部件 + }, + { + "component": "syspara_lite", --- syspara_lite 部件 + "features": [ + "enable_ohos_startup_syspara_lite_use_posix_file_api = true" + ] + } + ] +}, +``` + +适配`bootstrap_lite`部件时,需要在连接脚本文件`//device/soc/bestechnic/bes2600/liteos_m/sdk/bsp/out/best2600w_liteos/_best2001.lds`中手动新增如下段: + +``` + __zinitcall_bsp_start = .; + KEEP (*(.zinitcall.bsp0.init)) + KEEP (*(.zinitcall.bsp1.init)) + KEEP (*(.zinitcall.bsp2.init)) + KEEP (*(.zinitcall.bsp3.init)) + KEEP (*(.zinitcall.bsp4.init)) + __zinitcall_bsp_end = .; + __zinitcall_device_start = .; + KEEP (*(.zinitcall.device0.init)) + KEEP (*(.zinitcall.device1.init)) + KEEP (*(.zinitcall.device2.init)) + KEEP (*(.zinitcall.device3.init)) + KEEP (*(.zinitcall.device4.init)) + __zinitcall_device_end = .; + __zinitcall_core_start = .; + KEEP (*(.zinitcall.core0.init)) + KEEP (*(.zinitcall.core1.init)) + KEEP (*(.zinitcall.core2.init)) + KEEP (*(.zinitcall.core3.init)) + KEEP (*(.zinitcall.core4.init)) + __zinitcall_core_end = .; + __zinitcall_sys_service_start = .; + KEEP (*(.zinitcall.sys.service0.init)) + KEEP (*(.zinitcall.sys.service1.init)) + KEEP (*(.zinitcall.sys.service2.init)) + KEEP (*(.zinitcall.sys.service3.init)) + KEEP (*(.zinitcall.sys.service4.init)) + __zinitcall_sys_service_end = .; + __zinitcall_sys_feature_start = .; + KEEP (*(.zinitcall.sys.feature0.init)) + KEEP (*(.zinitcall.sys.feature1.init)) + KEEP (*(.zinitcall.sys.feature2.init)) + KEEP (*(.zinitcall.sys.feature3.init)) + KEEP (*(.zinitcall.sys.feature4.init)) + __zinitcall_sys_feature_end = .; + __zinitcall_run_start = .; + KEEP (*(.zinitcall.run0.init)) + KEEP (*(.zinitcall.run1.init)) + KEEP (*(.zinitcall.run2.init)) + KEEP (*(.zinitcall.run3.init)) + KEEP (*(.zinitcall.run4.init)) + __zinitcall_run_end = .; + __zinitcall_app_service_start = .; + KEEP (*(.zinitcall.app.service0.init)) + KEEP (*(.zinitcall.app.service1.init)) + KEEP (*(.zinitcall.app.service2.init)) + KEEP (*(.zinitcall.app.service3.init)) + KEEP (*(.zinitcall.app.service4.init)) + __zinitcall_app_service_end = .; + __zinitcall_app_feature_start = .; + KEEP (*(.zinitcall.app.feature0.init)) + KEEP (*(.zinitcall.app.feature1.init)) + KEEP (*(.zinitcall.app.feature2.init)) + KEEP (*(.zinitcall.app.feature3.init)) + KEEP (*(.zinitcall.app.feature4.init)) + __zinitcall_app_feature_end = .; + __zinitcall_test_start = .; + KEEP (*(.zinitcall.test0.init)) + KEEP (*(.zinitcall.test1.init)) + KEEP (*(.zinitcall.test2.init)) + KEEP (*(.zinitcall.test3.init)) + KEEP (*(.zinitcall.test4.init)) + __zinitcall_test_end = .; + __zinitcall_exit_start = .; + KEEP (*(.zinitcall.exit0.init)) + KEEP (*(.zinitcall.exit1.init)) + KEEP (*(.zinitcall.exit2.init)) + KEEP (*(.zinitcall.exit3.init)) + KEEP (*(.zinitcall.exit4.init)) + __zinitcall_exit_end = .; +``` + +需要新增上述段是因为`bootstrap_init`提供的对外接口,见`//utils/native/lite/include/ohos_init.h`文件,采用的是灌段的形式,最终会保存到上述链接段中。主要的服务自动初始化宏如下表格所示: + +| 接口名 | 描述 | +| ---------------------- | -------------------------------- | +| SYS_SERVICE_INIT(func) | 标识核心系统服务的初始化启动入口 | +| SYS_FEATURE_INIT(func) | 标识核心系统功能的初始化启动入口 | +| APP_SERVICE_INIT(func) | 标识应用层服务的初始化启动入口 | +| APP_FEATURE_INIT(func) | 标识应用层功能的初始化启动入口 | + +![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + 通过上面加载的组件编译出来的lib文件需要手动加入强制链接。 + +​ 如在 `vendor/bestechnic/display_demo/config.json` 中配置了`bootstrap_lite` 部件 + +``` + { + "subsystem": "startup", + "components": [ + { + "component": "bootstrap_lite" + }, + ... + ] + }, +``` + +​ `bootstrap_lite`部件会编译`//base/startup/bootstrap_lite/services/source/bootstrap_service.c`,该文件中,通过`SYS_SERVICE_INIT`将`Init`函数符号灌段到`__zinitcall_sys_service_start`和`__zinitcall_sys_service_end`中,由于`Init`函数是没有显式调用它,所以需要将它强制链接到最终的镜像。如下: + +``` +static void Init(void) +{ + static Bootstrap bootstrap; + bootstrap.GetName = GetName; + bootstrap.Initialize = Initialize; + bootstrap.MessageHandle = MessageHandle; + bootstrap.GetTaskConfig = GetTaskConfig; + bootstrap.flag = FALSE; + SAMGR_GetInstance()->RegisterService((Service *)&bootstrap); +} +SYS_SERVICE_INIT(Init); --- 通过SYS启动即SYS_INIT启动就需要强制链接生成的lib +``` + +​ 在`//base/startup/bootstrap_lite/services/source/BUILD.gn`文件中,描述了在`out/v200zr/display_demo/libs` 生成 `libbootstrap.a`,如下: + +``` +static_library("bootstrap") { + sources = [ + "bootstrap_service.c", + "system_init.c", + ] + .... +``` + +​ 那么需要在 `vendor/bestechnic/display_demo/config.json` 配置强制链接库`bootstrap`,如下: + +``` + "bin_list": [ + { + "elf_name": "wifiiot", + "bsp_target_name": "best2600w_liteos", + "signature": "false", + "burn_name": "rtos_main", + "enable": "true", + "force_link_libs": [ + "bootstrap", --- 强制链接libbootstrap.a + ... + ] + }, +``` + + + +适配`syspara_lite`部件时,系统参数会最终写到文件中进行持久化保存。在轻量系统中,文件操作相关接口有`POSIX`接口与`HalFiles`接口这两套实现。 + +因为对接内核的文件系统,采用`POSIX`相关的接口,所以`features`字段中需要增加`enable_ohos_startup_syspara_lite_use_posix_file_api = true`。 + +如果对接`HalFiles`相关的接口实现的,则无须修改。 + +在适配`GetSerial`接口时,开发板不像产线生产过程那样,会写入一个具体的`Serial Number`,因而需要确定一个数据对开发板进行唯一标识。本案例采用`WiFi Mac`地址进行适配。 + +``` +#define ETH_ALEN 6 +#define MAC_BITS 4 +#define MAC_HIGH_MASK 0xf0 +#define MAC_LOW_MASK 0x0f +#define HEX_A 0xa +#define CHAR_NUM_OFFSET 0x30 +#define CHAR_CAPITAL_OFFSET 0x37 +#define STR_END_FLAG '\0' + +typedef unsigned char u8; + +static char serialNumber[2*ETH_ALEN + 1]; --- 最后一位留作'\0'结束符标识 + + +static char Hex2Char(u8 hex) +{ + if (hex < HEX_A) { + return hex + CHAR_NUM_OFFSET; --- 将数值0转为char的'0' + } else { + return hex + CHAR_CAPITAL_OFFSET; --- 将数值0xa转为char的'A' + } +} + +const char* HalGetSerial(void) +{ + char macAddr[ETH_ALEN]; + // as devboard has no production serial number, we just + // use wifi mac address as device serial number. + if (serialNumber[0] == STR_END_FLAG) { --- 只有第一次调用时,才去获取mac地址 + extern int bwifi_get_own_mac(u8 *addr); + bwifi_get_own_mac(macAddr); --- 获取mac地址 + int j = 0; + for (int i = 0; i < ETH_ALEN; i++) { + u8 lowFour, highFour; + highFour = (macAddr[i] & MAC_HIGH_MASK) >> MAC_BITS; + serialNumber[j] = Hex2Char(highFour); + j++; + lowFour = macAddr[i] & MAC_LOW_MASK; + serialNumber[j] = Hex2Char(lowFour); + j++; + } --- 将mac地址值转化为serial number + } + return serialNumber; +} +``` + + + +##### hiviewdfx子系统适配 + +进行`hiviewdfx`子系统适配需要添加`hilog_lite`部件,直接在`config.json`文件配置即可。 + +``` +{ + "subsystem": "hiviewdfx", + "components": [ + { + "component": "hilog_lite", + "optional": "true" + } + ] +}, +``` + +配置完成之后,在`//device/soc/bestechnic/bes2600/liteos_m/components/utils/src/hm_sys.c`中注册日志输出实现函数。 + +``` +boolean HilogProc_Impl(const HiLogContent *hilogContent, uint32 len) +{ + char tempOutStr[LOG_FMT_MAX_LEN] = {0}; + if (LogContentFmt(tempOutStr, sizeof(tempOutStr), hilogContent) > 0) { + printf(tempOutStr); + } + return TRUE; +} + +HiviewRegisterHilogProc(HilogProc_Impl); +``` + +##### distributedschedule子系统适配 + +进行`distributedschedule`子系统适配需要添加`samgr_lite`部件,直接在`config.json`配置即可。 + +``` +{ + "subsystem": "distributedschedule", + "components": [ + { + "component": "samgr_lite", + "features": [ + "config_ohos_distributedschedule_samgr_lite_shared_task_size = 4096" + ] + } + ] +}, +``` + +在轻量系统中,`samgr_lite`配置的共享任务栈大小默认为`0x800`。当函数调用栈较大时,会出现栈溢出的问题。在本次适配过程中,将其调整为`0x1000`。 + +##### utils子系统适配 + +进行`utils`子系统适配需要添加`kv_store`/`js_builtin`/`timer_task`/`kal_timer`部件,直接在`config.json`配置即可。 + +``` +{ + "subsystem": "utils", + "components": [ + { + "component": "kv_store", + "features": [ + "enable_ohos_utils_native_lite_kv_store_use_posix_kv_api = true" + ] + }, + { + "component": "js_builtin" + }, + { + "component": "timer_task" + }, + { + "component": "kal_timer", + } + ] +}, +``` + +与适配`syspara_lite`部件类似,适配`kv_store`部件时,键值对会写到文件中。在轻量系统中,文件操作相关接口有`POSIX`接口与`HalFiles`接口这两套实现。因为对接内核的文件系统,采用`POSIX`相关的接口,所以`features`需要增加`enable_ohos_utils_native_lite_kv_store_use_posix_kv_api = true`。如果对接`HalFiles`相关的接口实现的,则无须修改。 + +#### 图形显示子系统适配 + +##### graphic子系统适配 + +进行`graphic`子系统适配需要添加`graphic_utils`部件,直接在`config.json`配置即可。 + +``` + "components": [ + { + "component": "graphic_utils", + "features": [ + "enable_ohos_graphic_utils_product_config = true" + ] + }, + { + "component": "ui" + } + ] + } +``` + +`graphic`配置文件见 `//vendor/bestechnic/display_demo/graphic_config/product_graphic_lite_config.h`。 + +`graphic`适配见`//device/soc/bestechnic/bes2600/liteos_m/components/ui`, 主要功能如下: + +- `display_device`:实例化`BaseGfxEngine`。 +- `touch_input`:实例化`PointerInputDevice`。 +- `UiMainTask`:初始化字体引擎,执行渲染任务等。 + +`graphic`子系统层次: + +``` +aafwk_lite + appexecfwk_lite (AMS + BMS) + | +ace_engine_lite + jerryscript + i18n_lite + resmgr_lite + utils/native/lite/... (ACE,JS引擎及其依赖) + | +graphic_ui + graphic_utils (图形框架) + | +giflib + libjpeg + libpng + qrcodegen + freetype... (图形第三方库) +``` + +图形应用示例见文件`//vendor/bestechnic/display_demo/tests/app.cpp`,如下: + +``` +/* ui app entry */ +void RunApp() +{ +#ifdef UI_TEST + AnimatorDemoStart(); --- native ui demo +#elif defined(ABILITY_TEST) + StartJSApp(); --- js demo +#endif +} + +void AppEntry(void) +{ + UiMain(); +} + +APP_FEATURE_INIT(AppEntry); +``` + +##### ace子系统适配 + +进行`ace`子系统适配需要添加`ace_engine_lite`部件,直接在`config.json`配置即可。 + + { + "subsystem": "ace", + "components": [ + { + "component": "ace_engine_lite", + "features": [ + "enable_ohos_ace_engine_lite_product_config = true" + ] + } + ] + }, + +`ace_engine_lite`部件配置文件见 `//vendor/bestechnic/display_demo/ace_lite_config/product_acelite_config.h`。 + +`ace_lite`的应用采用js语言进行开发,详细步骤如下: + +1. 用`DevEco Studio`编写js应用,参考[轻量级智能穿戴开发](https://developer.harmonyos.com/cn/docs/documentation/doc-references/lite-wearable-file-0000001176751380)。 +2. 使用预览功能进行预览,并且得到js包:`entry\.preview\intermediates\res\debug\lite\assets\js\default`。 +3. 将js包放到对应的文件系统目录下,文件系统路径为`vendor/bestechnic/display_demo/fs/data/data/js`,如下: + +``` +├── app.js +├── common +├── i18n +├── manifest.json +└── pages +``` + +4. 最终编译生成系统镜像,烧录到单板后,系统会从`app.js`加载启动`ace`的应用。 + +##### aafwk子系统适配 + +进行`aafwk`子系统适配需要添加`aafwk_lite`部件,直接在`config.json`配置即可。 + +``` + { + "subsystem": "aafwk", + "components": [ + { + "component": "aafwk_lite", + "features": [ + "enable_ohos_appexecfwk_feature_ability = true", --- 支持FA特性,即包含图形能力 + "config_ohos_aafwk_ams_task_size = 4096" --- 配置ams栈的大小 + ] + } + ] + }, +``` + +`aafwk_lite`相关的应用样例见`vendor/bestechnic/display_demo/tests/ability`目录,包含`launcher`和`js app`这两类应用,应用的函数调用流程描述如下: + +1. `launcher`应用,通过`InstallLauncher`安装`BundleName`为 `"com.huawei.launcher"`的`native ui`应用,在`AbilityMgrSliteFeature`启动后会调用`AbilityMgrHandler::StartLauncher()`启动`launcher`应用。 + +2. `StartJSApp`应用,通过`StartAbility`启动任意`Want`,通过将`want data`传递`JS_APP_PATH`, + `SetWantData(&want, JS_APP_PATH, strlen(JS_APP_PATH) + 1)`。 + +##### appexecfwk子系统适配 + +进行`appexecfwk`子系统适配需要添加`appexecfwk_lite`部件,直接在`config.json`配置即可。 + +``` + { + "subsystem": "appexecfwk", + "components": [ + { + "component": "appexecfwk_lite" + } + ] + }, +``` + +## 兼容性认证 + +### 产品兼容性规范 + +产品兼容性规范文档请参考[产品兼容性SIG介绍](https://gitee.com/openharmony-sig/compatibility/tree/master)。 + +### XTS用例 + +`XTS`测试参考资料见[xts参考资料](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-xts-guide.md),进行`XTS`子系统适配需要添加`xts_acts`/`xts_tools`部件,直接在`config.json`配置即可,配置如下: + + { + "subsystem": "xts", + "components": [ + { "component": "xts_acts", "features": + [ + "config_ohos_xts_acts_utils_lite_kv_store_data_path = \"/data\"", + "enable_ohos_test_xts_acts_use_thirdparty_lwip = true" + ] + }, + { "component": "xts_tools", "features":[] } + ] + } + +其中, + +- `config_ohos_xts_acts_utils_lite_kv_store_data_path` 是配置挂载文件系统根目录的名字。 +- `enable_ohos_test_xts_acts_use_thirdparty_lwip` 表示如果使用`thirdparty/lwip`目录下的源码编译,则设置为`true`,否则设置为`false`。 + +全部跑完会有显示`xx Tests xx Failures xx Ignored`,如下: + +``` +... +[16:53:43:438]../../../test/xts/acts/utils_lite/kv_store_hal/src/kvstore_func_test.c:793:testKvStoreMaxSize004:PASS +[16:53:43:438]+-------------------------------------------+ +[16:53:43:438] +[16:53:43:438]----------------------- +[16:53:43:438]32 Tests 0 Failures 0 Ignored +[16:53:43:438]OK +[16:53:43:439]All the test suites finished! +``` + +### 报告提交 + +将上图`XTS`用例的情况保存为测试报告,上传到`OpenHarmony`兼容性测试网站进行认证,作为`sig`仓库转正到`master`仓库的必要条件。详细步骤如下: + +步骤1:将`XTS`测试报告压缩成`zip`文件。 + +步骤2:生成测试报告的`SHA`校验码。本案例是将`zip`文件传到在线生成`hash`的[网站]( https://tool.lmeee.com/jiami/filehash)生成`SHA`校验码。 + +步骤3:进入`OpenHarmony`[兼容性测试网站](https://www.openharmony.cn/old/#/Compatibility_test)上传报告。 + + - 其中`API Level`填写报告中的`"sdkApiLevel"`字段 + - `OS`版本号填写报告中的`"OS Version"`字段。 + +## todo + +后续会补充以下方面的移植: + +- 蓝牙 +- `bms`包安装 +- 音频播放 +- 验证运行`JS`的`bytecode` +- 分布式能力:`dsoftbus`、`dms`、`dm` +- 分布式音乐播放器样例 + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" index e2adf8d5af26a2920dd88856e566ecae286df69e..dd6687c8b68c1f502237c291e8542df20c129f17 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 内核概述 -permalink: /pages/0004000000 +permalink: /pages/0105010101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 内核概述 @@ -64,7 +64,7 @@ CPU体系架构分为通用架构定义和特定架构定义两层,通用架
-LiteOS-M已经支持ARM Cortex-M3、ARM Cortex-M4、ARM Cortex-M7、ARM Cortex-M33、RISC-V等主流架构,如果需要扩展CPU体系架构,请参考[芯片架构适配点](/pages/0003010100#section137431650339)。 +LiteOS-M已经支持ARM Cortex-M3、ARM Cortex-M4、ARM Cortex-M7、ARM Cortex-M33、RISC-V等主流架构,如果需要扩展CPU体系架构,请参考[芯片架构适配点](/pages/0104010201#section137431650339)。 ### 运行机制 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 70c80122e4f4d3d6085d5314b11110d34f40503f..1f338e2ecaee8b287cbcbf4352a3a454dcd91725 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000010000 +permalink: /pages/01050101020101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index b571f4e6bae5c45b56a405afc6ee350f7830e3b9..93bc81602b584ee8e144d0105af918f0997deee6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040000010001 +permalink: /pages/01050101020102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 2ef8e615c81a57892335419e0b38b778c681e627..658b1dec5834cadb7c53fecbbfd3cc92a18c5238 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000010100 +permalink: /pages/01050101020201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index a52640f5a2859b43d7a809754753c33a1fa98cd0..4be1a20ebdbb54969eb3563f554b2bef4e92973d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/02.\344\273\273\345\212\241\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040000010101 +permalink: /pages/01050101020202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 @@ -53,7 +53,7 @@ OpenHarmony LiteOS-M内核的任务管理模块提供下面几种功能,接口

删除指定的任务。

-

控制任务状态

+

控制任务状态

LOS_TaskResume

@@ -62,7 +62,17 @@ OpenHarmony LiteOS-M内核的任务管理模块提供下面几种功能,接口

LOS_TaskSuspend

-

挂起指定的任务,然后切换任务

+

挂起指定的任务,然后切换任务。

+ + +

LOS_TaskJoin

+ +

挂起当前任务,等待指定任务运行结束并回收其任务控制块资源。

+ + +

LOS_TaskDetach

+ +

修改任务的joinable属性为detach属性,detach属性的任务运行结束会自动回收任务控制块资源。

LOS_TaskDelay

@@ -257,7 +267,7 @@ UINT32 Example_TaskLo(VOID) UINT32 Example_TskCaseEntry(VOID) { UINT32 ret; - TSK_INIT_PARAM_S initParam; + TSK_INIT_PARAM_S initParam = { 0 }; /* 锁任务调度,防止新创建的任务比本任务高而发生调度 */ LOS_TaskLock(); @@ -268,7 +278,7 @@ UINT32 Example_TskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "TaskHi"; initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; - + initParam.uwResved = LOS_TASK_ATTR_JOINABLE; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiId, &initParam); if (ret != LOS_OK) { @@ -284,6 +294,7 @@ UINT32 Example_TskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_LO; initParam.pcName = "TaskLo"; initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; + initParam.uwResved = 0; /* detach 属性 */ /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskLoId, &initParam); @@ -298,6 +309,12 @@ UINT32 Example_TskCaseEntry(VOID) /* 解锁任务调度,此时会发生任务调度,执行就绪队列中最高优先级任务 */ LOS_TaskUnlock(); + ret = LOS_TaskJoin(g_taskHiId, NULL); + if (ret != LOS_OK) { + printf("Join Example_TaskHi Failed!\n"); + } else { + printf("Join Example_TaskHi Success!\n"); + } return LOS_OK; } ``` @@ -315,5 +332,6 @@ Enter TaskLo Handler. TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. +Join Example_TaskHi Success! ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 93cce1852b21435f87a75b7a08dd08017c9c08cf..48e1acfcb943f2baf0754a9593c7e0911081ba33 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000010200 +permalink: /pages/01050101020301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" index 5d026c8b256893315bff2038178b1368fcafcf7f..49ebdae2109cc405bccc6f17a88140a622a929c2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\351\235\231\346\200\201\345\206\205\345\255\230.md" @@ -1,6 +1,6 @@ --- title: 静态内存 -permalink: /pages/00040000010201 +permalink: /pages/01050101020302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 静态内存 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" index 2ab4498f6d104099080b7b676e4d233a96e2b2f8..ebd4a3ec5a310e5e6f10b33d2f614530f3ccbac5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\345\212\250\346\200\201\345\206\205\345\255\230.md" @@ -1,6 +1,6 @@ --- title: 动态内存 -permalink: /pages/00040000010202 +permalink: /pages/01050101020303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 动态内存 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 89% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 38d223944ade26a8201ec04f94613e2ccec0e72b..c8fdc82064c6815f03b4e5b04eb4c8e1023ae526 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/0004000001030000 +permalink: /pages/0105010102040101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 @@ -42,11 +42,11 @@ typedef struct tagEvent { ### 事件运作原理 -**事件初始化:**会创建一个事件控制块,该控制块维护一个已处理的事件集合,以及等待特定事件的任务链表。 +**事件初始化**:会创建一个事件控制块,该控制块维护一个已处理的事件集合,以及等待特定事件的任务链表。 -**写事件:**会向事件控制块写入指定的事件,事件控制块更新事件集合,并遍历任务链表,根据任务等待具体条件满足情况决定是否唤醒相关任务。 +**写事件**:会向事件控制块写入指定的事件,事件控制块更新事件集合,并遍历任务链表,根据任务等待具体条件满足情况决定是否唤醒相关任务。 -**读事件:**如果读取的事件已存在时,会直接同步返回。其他情况会根据超时时间以及事件触发情况,来决定返回时机:等待的事件条件在超时时间耗尽之前到达,阻塞任务会被直接唤醒,否则超时时间耗尽该任务才会被唤醒。 +**读事件**:如果读取的事件已存在时,会直接同步返回。其他情况会根据超时时间以及事件触发情况,来决定返回时机:等待的事件条件在超时时间耗尽之前到达,阻塞任务会被直接唤醒,否则超时时间耗尽该任务才会被唤醒。 读事件条件满足与否取决于入参eventMask和mode,eventMask即需要关注的事件类型掩码。mode是具体处理方式,分以下三种情况: @@ -54,9 +54,9 @@ typedef struct tagEvent { - LOS\_WAITMODE\_OR:逻辑或,基于接口传入的事件类型掩码eventMask,只要这些事件中有任一种事件发生就可以读取成功,否则该任务将阻塞等待或者返回错误码。 - LOS\_WAITMODE\_CLR:这是一种附加读取模式,需要与所有事件模式或任一事件模式结合使用(LOS\_WAITMODE\_AND | LOS\_WAITMODE\_CLR或 LOS\_WAITMODE\_OR | LOS\_WAITMODE\_CLR)。在这种模式下,当设置的所有事件模式或任一事件模式读取成功后,会自动清除事件控制块中对应的事件类型位。 -**事件清零:**根据指定掩码,去对事件控制块的事件集合进行清零操作。当掩码为0时,表示将事件集合全部清零。当掩码为0xffff时,表示不清除任何事件,保持事件集合原状。 +**事件清零**:根据指定掩码,去对事件控制块的事件集合进行清零操作。当掩码为0时,表示将事件集合全部清零。当掩码为0xffff时,表示不清除任何事件,保持事件集合原状。 -**事件销毁:**销毁指定的事件控制块。 +**事件销毁**:销毁指定的事件控制块。 **图 1** 事件运作原理图 ![](/images/device-dev/kernel/figure/事件运作原理图.png "事件运作原理图") diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index e4c826667723df24f975e9908a78534369ae3610..0b83c053e6c247eba245eba187bf3a9325a4c8b1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/0004000001030001 +permalink: /pages/0105010102040102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 6adfb74ec8325eb9773c7fb92f4488da49f9f25a..24dbd691c6fa0de5f8bd69a4595ebfcd2e8d1bd2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/0004000001030100 +permalink: /pages/0105010102040201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index 5b331a716eecb9d134302bc24ac6e6cac1d7aea3..2d86617b3ca69526816585417f993498ddfd8d50 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\272\222\346\226\245\351\224\201/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/0004000001030101 +permalink: /pages/0105010102040202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 572806b27ce1bd68f2133e29c23cf355b4139946..cb394d8ca323773f50d6a94ae05bb60f6cdd0e88 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/0004000001030200 +permalink: /pages/0105010102040301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index 403d5d723e5abf97b1ff9dc1b116138bfb47b580..5e0de681ee42aeac86903b4afdd67e291098394d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\346\266\210\346\201\257\351\230\237\345\210\227/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/0004000001030201 +permalink: /pages/0105010102040302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 72fe1331cd8ab3cd5dc4bcbb25a19eef6e592ec1..e700fba9b3fbbc6e311013afa72d8742a3d87120 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/0004000001030300 +permalink: /pages/0105010102040401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index c0a622a548ce20a0e611acc6aa0758ccda7f9cea..3a9ddd43b40640dad55e0a42406650f89c3c942a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\344\277\241\345\217\267\351\207\217/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/0004000001030301 +permalink: /pages/0105010102040402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index c1aefe32abcd3d6aa2db35799e89f8265a73d9d1..05ee0da6e115c9a47f9270920ad8065650be0367 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000010400 +permalink: /pages/01050101020501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index df46edd408d638ca1fad99f731d3d1d7eb969f00..6bd9d56d29d55d2a1cb94da46276578053d6a3bc 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040000010401 +permalink: /pages/01050101020502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 555ded2697e5b20b78dd0fa03a9b6242a4559024..f4541374357c6a96e81b307323d8a01e44138cd6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000010500 +permalink: /pages/01050101020601 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index 8cce3a358d453d50d6c1c39b4decd27057e7882e..09f78f95b95343b4ccecaab002f257e03e4b2782 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040000010501 +permalink: /pages/01050101020602 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" index 347b12e0743cacad423dc1db2f8b36e5c5a3c0c3..bd066b2e34722091613e0c8ab55b7f1b171cdcbb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/01.C++\346\224\257\346\214\201.md" @@ -1,6 +1,6 @@ --- title: C++支持 -permalink: /pages/000400000200 +permalink: /pages/010501010301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # C++支持 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index b05caa68cff225b57ce76d2d964a14b10ea1d70c..f41f1de30741d3aba77e83e7ec5a75b79dad1471 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040000020100 +permalink: /pages/01050101030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index fca302fc6a8fc2ccaa7e4c411c0fb49496bf1496..cc3b25503a159aa99b16201748947727a5b0b7a8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/02.CPU\345\215\240\347\224\250\347\216\207/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040000020101 +permalink: /pages/01050101030202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:29 +date: 2022-02-12 09:01:44 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" index 309556c44673a034e441fc238883b34398eb9023..13d8288d71d07a35411d59ebe609ab0a1444e560 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" @@ -1,6 +1,6 @@ --- title: FAT -permalink: /pages/00040000020200 +permalink: /pages/01050101030301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # FAT diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 32540ab0290bfd7f60e5830a0be0a05dca6c486f..00314f3965e3e11849127521d86dabe8324c2b01 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/0004000002020100 +permalink: /pages/0105010103030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 81% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" index 2f5b5986bc01d4a64d7359b631331386a9a59fb5..b0bf518ac42be58d0cace080a1e48d76265c0052 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/03.\346\211\251\345\261\225\347\273\204\344\273\266/03.\346\226\207\344\273\266\347\263\273\347\273\237/02.LittleFS/02.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/0004000002020101 +permalink: /pages/0105010103030202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 开发指导 @@ -51,6 +51,29 @@ block\_count 可以被擦除的块数量,这取决于块设备的容量及擦 代码实现如下: ``` +#include "lfs.h" +#include "stdio.h" + +lfs_t lfs; +lfs_file_t file; + +const struct lfs_config cfg = { + // block device operations + .read = user_provided_block_device_read, + .prog = user_provided_block_device_prog, + .erase = user_provided_block_device_erase, + .sync = user_provided_block_device_sync, + + // block device configuration + .read_size = 16, + .prog_size = 16, + .block_size = 4096, + .block_count = 128, + .cache_size = 16, + .lookahead_size = 16, + .block_cycles = 500, +}; + int main(void) { // mount the filesystem int err = lfs_mount(&lfs, &cfg); diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" index 1902d7fe9b5f3409b8effc2b0c63d36e90894887..35b5a093051b37493181065ae4718153e5028c10 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" @@ -1,6 +1,6 @@ --- title: 内存信息统计 -permalink: /pages/00040000030000 +permalink: /pages/01050101040101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 内存信息统计 @@ -30,7 +30,7 @@ date: 2021-12-30 18:31:30 - 碎片率:衡量内存池的碎片化程度,碎片率高表现为内存池剩余内存很多,但是最大空闲内存块很小,可以用公式(fragment=100-100\*最大空闲内存块大小/剩余内存大小)来度量; -- 其他参数:通过调用接口(详见[内存管理](/pages/00040000010200)章节接口说明),扫描内存池的节点信息,统计出相关信息。 +- 其他参数:通过调用接口(详见[内存管理](/pages/01050101020301)章节接口说明),扫描内存池的节点信息,统计出相关信息。 ## 功能配置 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" index f72f95d86ffea2b9504f56a8c84eae00cbfaca4a..6f8f135e4f085a3bb60c90687ad9abc394484695 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" @@ -1,6 +1,6 @@ --- title: 内存泄漏检测 -permalink: /pages/00040000030001 +permalink: /pages/01050101040102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 内存泄漏检测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" index 3fc7a52a78e067ab4423e6b212d18d89c3035181..2fdbab1ebf03730f56eb25c5ae24461ee82a7940 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/01.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" @@ -1,6 +1,6 @@ --- title: 踩内存检测 -permalink: /pages/00040000030002 +permalink: /pages/01050101040103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 踩内存检测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" index 0f763203c0573a5b5642090b5439376985f3e434..99efd2326d72e97c0a592b35a87e69c2e017f1e1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/02.\345\274\202\345\270\270\350\260\203\346\265\213.md" @@ -1,6 +1,6 @@ --- title: 异常调测 -permalink: /pages/000400000301 +permalink: /pages/010501010402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 异常调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" index 70658771f5c02540ded2f953a701e52857c4fb7a..8518ff70ee407915b964a6d29f80e626494f53bb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/03.Trace\350\260\203\346\265\213.md" @@ -1,6 +1,6 @@ --- title: Trace调测 -permalink: /pages/000400000302 +permalink: /pages/010501010403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # Trace调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" index a1be2d60e1c9a80dceaf34feeaa0ca2c2c9e6a87..d413d5c8ae19d150fa55aaa7d2a290cdf00ab070 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/04.\345\206\205\346\240\270\350\260\203\346\265\213/04.LMS\350\260\203\346\265\213.md" @@ -1,6 +1,6 @@ --- title: LMS调测 -permalink: /pages/000400000303 +permalink: /pages/010501010404 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # LMS调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" index 2949a5fd1849f2f916ea9cad871017545a87516e..9432cc336bda380fb6f13860950a2b47373e523b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/01.\345\206\205\346\240\270\347\274\226\347\240\201\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: 内核编码规范 -permalink: /pages/000400000400 +permalink: /pages/010501010501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 内核编码规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" index af91802960972dafd657ab9da937fc9162cd6865..baef6dd453073e3615e4ea6f5d4f81e6c2aaca3a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/02.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" @@ -1,6 +1,6 @@ --- title: 双向链表 -permalink: /pages/00040000040100 +permalink: /pages/01050101050201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 双向链表 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" index 465a9b92581a7b2d88b0c9dbb3746193ad9e542e..cec52e8fa0b475a97bde073118f71c7462a635c2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/01.CMSIS\346\224\257\346\214\201.md" @@ -1,6 +1,6 @@ --- title: CMSIS支持 -permalink: /pages/00040000040200 +permalink: /pages/01050101050301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # CMSIS支持 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" index 265f3dd1a9772a84ab7aafc08836720ddd5901eb..136fe59333a5a383d2b15f86dff23ae3ff4b6ef1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/01.\350\275\273\351\207\217\347\263\273\347\273\237\345\206\205\346\240\270/05.\351\231\204\345\275\225/03.\346\240\207\345\207\206\345\272\223\346\224\257\346\214\201/02.POSIX\346\224\257\346\214\201.md" @@ -1,6 +1,6 @@ --- title: POSIX支持 -permalink: /pages/00040000040201 +permalink: /pages/01050101050302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # POSIX支持 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" index 7665be5dff62d110bc39756b308cb68cd9cb4b6f..b742ad84b744bf2757beb93233cc36f513023c73 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/01.\345\206\205\346\240\270\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 内核概述 -permalink: /pages/0004000100 +permalink: /pages/0105010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 内核概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" index 37e0daab49873d67ec0432b87282a7fc257b42d7..9c52a3a2fdcf97b870e081d40a55a3cfea2bfae3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/01.\345\206\205\346\240\270\346\200\201\345\220\257\345\212\250.md" @@ -1,6 +1,6 @@ --- title: 内核态启动 -permalink: /pages/000400010100 +permalink: /pages/010501020201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 内核态启动 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" index 76423ac71d33212176dc561cf579e23038966ba9..b83e50d0c43d34df37cca3f19e25e9fa4e344d5c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/02.\345\206\205\346\240\270\345\220\257\345\212\250/02.\347\224\250\346\210\267\346\200\201\345\220\257\345\212\250.md" @@ -1,6 +1,6 @@ --- title: 用户态启动 -permalink: /pages/000400010101 +permalink: /pages/010501020202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 用户态启动 @@ -52,7 +52,7 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) - 启动关键系统程序或服务,如交互进程shell。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >在OpenHarmony 中**init**进程通过读取/etc/init.cfg,根据配置执行指定命令,或启动指定进程(详见:[init启动引导](/pages/00040d01))。 + >在OpenHarmony 中**init**进程通过读取/etc/init.cfg,根据配置执行指定命令,或启动指定进程(详见:[init启动引导](/pages/01050e02))。 - 监控回收孤儿进程,清理子进程中的僵尸进程。 @@ -61,7 +61,7 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) 用户态程序常见编译方式有如下两种: -1. [利用框架编译用户态进程](/pages/000100020101)。 +1. [利用框架编译用户态进程](/pages/010202040101)。 2. 手动编译 实例: @@ -70,7 +70,7 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) clang --target=arm-liteos --sysroot=prebuilts/lite/sysroot -o helloworld helloworld.c ``` - **clang**:参考[LLVM安装指导](/pages/0001000102)安装LLVM编译器。 + **clang**:参考[LLVM安装指导](/pages/0102010204)安装LLVM编译器。 **--target**:--target=arm-liteos,指定编译平台为arm-liteos。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" index 7cf0a1b882612e9424603fb284b33b8d048803fa..030108c11a7ed637f9e046e1803bc6e4c4cf871a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/01.\344\270\255\346\226\255\345\217\212\345\274\202\345\270\270\345\244\204\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 中断及异常处理 -permalink: /pages/000400010200 +permalink: /pages/010501020301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 中断及异常处理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" index 2e6ae9a80952d28aabbad466969a207958bee681..8e73aaa03e8fbe1812810b07467fde29d63aedb7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/01.\350\277\233\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 进程 -permalink: /pages/00040001020100 +permalink: /pages/01050102030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 进程 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" index 12c2f707b289003013a71ed11515b23167ce7106..31b722dd01bce270722af39f76273419932638ac 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/02.\344\273\273\345\212\241.md" @@ -1,6 +1,6 @@ --- title: 任务 -permalink: /pages/00040001020101 +permalink: /pages/01050102030202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 任务 @@ -45,7 +45,7 @@ OpenHarmony 内核的任务一共有32个优先级\(0-31\),最高优先级为0 - 退出(Exit):任务运行结束,等待父任务回收其控制块资源。 **图 1** 任务状态迁移示意图 - +![](/images/device-dev/kernel/figure/任务状态迁移示意图.png "任务状态迁移示意图") **任务状态迁移说明:** @@ -114,7 +114,7 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起

删除指定的任务

-

任务状态控制

+

任务状态控制

LOS_TaskResume

@@ -126,6 +126,16 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起

挂起指定的任务

+

LOS_TaskJoin

+ +

挂起当前任务,等待指定任务运行结束并回收其任务控制块资源

+ + +

LOS_TaskDetach

+ +

修改任务的joinable属性为detach属性,detach属性的任务运行结束会自动回收任务控制块资源

+ +

LOS_TaskDelay

任务延时等待

@@ -221,11 +231,11 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起 - 指定任务名 - 指定任务的栈大小 - 指定任务的优先级 - - 指定任务的属性,是否支持LOS\_TASK\_STATUS\_DETACHED属性 + - 指定任务的属性,LOS\_TASK\_ATTR\_JOINABLE和LOS\_TASK\_STATUS\_DETACHED属性 - 多核运行时,可以选择设置任务的绑核属性 2. 任务参与调度运行,执行用户指定的业务代码。 -3. 任务执行结束,如果任务设置了LOS\_TASK\_STATUS\_DETACHED属性,则任务运行结束后自动回收任务资源,如果未设置LOS\_TASK\_STATUS\_DETACHED属性,则需要调用LOS\_TaskDelete接口回收任务资源。 +3. 任务执行结束,如果设置了LOS\_TASK\_STATUS\_DETACHED属性,则自动回收任务资源,如果任务设置了LOS\_TASK\_ATTR\_JOINABLE属性,则需要调用LOS_TaskJoin回收任务资源,默认为LOS\_TASK\_STATUS\_DETACHED属性。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** >- 内核态具有最高权限,可以操作任意进程内的任务。 @@ -296,7 +306,7 @@ UINT32 ExampleTaskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "HIGH_NAME"; initParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; - initParam.uwResved = LOS_TASK_STATUS_DETACHED; + initParam.uwResved = LOS_TASK_ATTR_JOINABLE; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiID, &initParam); @@ -325,6 +335,13 @@ UINT32 ExampleTaskCaseEntry(VOID) /* 解锁任务调度,此时会发生任务调度,执行就绪列表中最高优先级任务 */ LOS_TaskUnlock(); + ret = LOS_TaskJoin(g_taskHiID, NULL); + if (ret != LOS_OK) { + PRINTK("Join ExampleTaskHi Failed!\n"); + } else { + PRINTK("Join ExampleTaskHi Success!\n"); + } + while(1){}; return LOS_OK; } @@ -342,5 +359,6 @@ TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. TaskHi LOS_TaskDelete Success. +Join ExampleTaskHi Success! ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" index 8be28410caed4999478e139743ae4273a44306ab..068eb77db6277e38c21fa562b7d4b9029846578f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/02.\350\277\233\347\250\213\347\256\241\347\220\206/03.\350\260\203\345\272\246\345\231\250.md" @@ -1,6 +1,6 @@ --- title: 调度器 -permalink: /pages/00040001020102 +permalink: /pages/01050102030203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 调度器 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" index 6307e94b487e3c6b9147ed419f4526080fd18268..6595d9bc73cf7475810fa0fdf0786c045ebc1dac 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/01.\345\240\206\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 堆内存管理 -permalink: /pages/00040001020200 +permalink: /pages/01050102030301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 堆内存管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" index 7f232a68a25dcf12d9b9083e9150accbfb6c7087..10438f964b697c70bc255860cc811c9363bb742b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/02.\347\211\251\347\220\206\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 物理内存管理 -permalink: /pages/00040001020201 +permalink: /pages/01050102030302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 物理内存管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" index f692f0cdb68e2e535a5d891e5935ac0d2fcb48a8..cd18c9395cafe7eed049ea5ea61fd02c7d1c65ac 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/03.\350\231\232\346\213\237\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 虚拟内存管理 -permalink: /pages/00040001020202 +permalink: /pages/01050102030303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 虚拟内存管理 @@ -107,7 +107,7 @@ date: 2021-12-30 18:31:30 虚拟内存管理中,虚拟地址空间是连续的,但是其映射的物理内存并不一定是连续的,如下图所示。可执行程序加载运行,CPU访问虚拟地址空间的代码或数据时存在两种情况: -- CPU访问的虚拟地址所在的页,如V0,已经与具体的物理页P0做映射,CPU通过找到进程对应的页表条目(详见[虚实映射](/pages/00040001020203)),根据页表条目中的物理地址信息访问物理内存中的内容并返回。 +- CPU访问的虚拟地址所在的页,如V0,已经与具体的物理页P0做映射,CPU通过找到进程对应的页表条目(详见[虚实映射](/pages/01050102030304)),根据页表条目中的物理地址信息访问物理内存中的内容并返回。 - CPU访问的虚拟地址所在的页,如V2,没有与具体的物理页做映射,系统会触发缺页异常,系统申请一个物理页,并把相应的信息拷贝到物理页中,并且把物理页的起始地址更新到页表条目中。此时CPU重新执行访问虚拟内存的指令便能够访问到具体的代码或数据。 **图 1** 内存映射示意图 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" index d615d54a8dbbc726cbac29d218bcb681e33e3c52..2662128097be706ef7cdbfbb7e96eceb500dc51e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/03.\345\206\205\345\255\230\347\256\241\347\220\206/04.\350\231\232\345\256\236\346\230\240\345\260\204.md" @@ -1,6 +1,6 @@ --- title: 虚实映射 -permalink: /pages/00040001020203 +permalink: /pages/01050102030304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 虚实映射 @@ -31,7 +31,7 @@ date: 2021-12-30 18:31:30 虚实映射其实就是一个建立页表的过程。MMU有多级页表,LiteOS-A内核采用二级页表描述进程空间。每个一级页表条目描述符占用4个字节,可表示1MiB的内存空间的映射关系,即1GiB用户空间(LiteOS-A内核中用户空间占用1GiB)的虚拟内存空间需要1024个。系统创建用户进程时,在内存中申请一块4KiB大小的内存块作为一级页表的存储区域,二级页表根据当前进程的需要做动态的内存申请。 -- 用户程序加载启动时,会将代码段、数据段映射进虚拟内存空间(详细可参考[动态加载与链接](/pages/000400010301)),此时并没有物理页做实际的映射; +- 用户程序加载启动时,会将代码段、数据段映射进虚拟内存空间(详细可参考[动态加载与链接](/pages/010501020402)),此时并没有物理页做实际的映射; - 程序执行时,如下图粗箭头所示,CPU访问虚拟地址,通过MMU查找是否有对应的物理内存,若该虚拟地址无对应的物理地址则触发缺页异常,内核申请物理内存并将虚实映射关系及对应的属性配置信息写进页表,并把页表条目缓存至TLB,接着CPU可直接通过转换关系访问实际的物理内存; - 若CPU访问已缓存至TLB的页表条目,无需再访问保存在内存中的页表,可加快查找速度。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" index a8c654eeac787d38134aada521c239c2395346b3..21a59dfde0ce35c0493c04c466fa2536b0eb1408 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/01.\344\272\213\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 事件 -permalink: /pages/00040001020300 +permalink: /pages/01050102030401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 事件 @@ -61,11 +61,11 @@ typedef struct tagEvent { ### 事件运作原理 -**事件初始化:**会创建一个事件控制块,该控制块维护一个已处理的事件集合,以及等待特定事件的任务链表。 +**事件初始化**:会创建一个事件控制块,该控制块维护一个已处理的事件集合,以及等待特定事件的任务链表。 -**写事件:**会向事件控制块写入指定的事件,事件控制块更新事件集合,并遍历任务链表,根据任务等待具体条件满足情况决定是否唤醒相关任务。 +**写事件**:会向事件控制块写入指定的事件,事件控制块更新事件集合,并遍历任务链表,根据任务等待具体条件满足情况决定是否唤醒相关任务。 -**读事件:**如果读取的事件已存在时,会直接同步返回。其他情况会根据超时时间以及事件触发情况,来决定返回时机:等待的事件条件在超时时间耗尽之前到达,阻塞任务会被直接唤醒,否则超时时间耗尽该任务才会被唤醒。 +**读事件**:如果读取的事件已存在时,会直接同步返回。其他情况会根据超时时间以及事件触发情况,来决定返回时机:等待的事件条件在超时时间耗尽之前到达,阻塞任务会被直接唤醒,否则超时时间耗尽该任务才会被唤醒。 读事件条件满足与否取决于入参eventMask和mode,eventMask即需要关注的事件类型掩码。mode是具体处理方式,分以下三种情况: @@ -73,9 +73,9 @@ typedef struct tagEvent { - LOS\_WAITMODE\_OR:逻辑或,基于接口传入的事件类型掩码eventMask,只要这些事件中有任一种事件发生就可以读取成功,否则该任务将阻塞等待或者返回错误码。 - LOS\_WAITMODE\_CLR:这是一种附加读取模式,需要与所有事件模式或任一事件模式结合使用(LOS\_WAITMODE\_AND | LOS\_WAITMODE\_CLR或 LOS\_WAITMODE\_OR | LOS\_WAITMODE\_CLR)。在这种模式下,当设置的所有事件模式或任一事件模式读取成功后,会自动清除事件控制块中对应的事件类型位。 -**事件清零:**根据指定掩码,去对事件控制块的事件集合进行清零操作。当掩码为0时,表示将事件集合全部清零。当掩码为0xffff时,表示不清除任何事件,保持事件集合原状。 +**事件清零**:根据指定掩码,去对事件控制块的事件集合进行清零操作。当掩码为0时,表示将事件集合全部清零。当掩码为0xffff时,表示不清除任何事件,保持事件集合原状。 -**事件销毁:**销毁指定的事件控制块。 +**事件销毁**:销毁指定的事件控制块。 **图 1** 事件运作原理图 ![](/images/device-dev/kernel/figure/事件运作原理图-21.png "事件运作原理图-21") diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" index 1e95e89d593f751ca7579c503751bfa4280992f0..ace79a20a72ae736640cbad94560449409d8b96b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/02.\344\277\241\345\217\267\351\207\217.md" @@ -1,6 +1,6 @@ --- title: 信号量 -permalink: /pages/00040001020301 +permalink: /pages/01050102030402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 信号量 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" index 5e1f18ba22f308e30ac4cecb4fbec69bdb9649a8..f4515be39477e5a06603eccc038ed2f3e6e67b8c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/03.\344\272\222\346\226\245\351\224\201.md" @@ -1,6 +1,6 @@ --- title: 互斥锁 -permalink: /pages/00040001020302 +permalink: /pages/01050102030403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 互斥锁 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" index e544d3fa39f48286d8fe4f8156de830ddc516b12..30fe865f26a7d514924579b4c728e1009c254ce3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/04.\346\266\210\346\201\257\351\230\237\345\210\227.md" @@ -1,6 +1,6 @@ --- title: 消息队列 -permalink: /pages/00040001020303 +permalink: /pages/01050102030404 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 消息队列 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" index 696b4860dbc26483d6158c057e16e577c7962447..feb9c102fd1790b0946f6e0d55e0e61efa739750 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/05.\350\257\273\345\206\231\351\224\201.md" @@ -1,6 +1,6 @@ --- title: 读写锁 -permalink: /pages/00040001020304 +permalink: /pages/01050102030405 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 读写锁 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" index 00412c0245e1d79d90a192cd1ee179dacc357797..8b7664ee49cd238d6f31565d83c73e4eb7754ff0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/06.\347\224\250\346\210\267\346\200\201\345\277\253\351\200\237\344\272\222\346\226\245\351\224\201.md" @@ -1,6 +1,6 @@ --- title: 用户态快速互斥锁 -permalink: /pages/00040001020305 +permalink: /pages/01050102030406 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 用户态快速互斥锁 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" index 88fcad5b5ca0a3bbecc71b770b971c610f870116..b0ae58aee4b9054095e6933fc489a89965dcc20a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/04.\345\206\205\346\240\270\351\200\232\344\277\241\346\234\272\345\210\266/07.\344\277\241\345\217\267.md" @@ -1,6 +1,6 @@ --- title: 信号 -permalink: /pages/00040001020306 +permalink: /pages/01050102030407 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 信号 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" index e3666f1cf166ea8aaa0dcd145da4bf6e192ba2a3..8385539c7919a2a569ec5e9441bbc04ce803b24f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/05.\346\227\266\351\227\264\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 时间管理 -permalink: /pages/000400010204 +permalink: /pages/010501020305 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 时间管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" index 673ba4f498418fec7273c3ffa9b67bf6bf3d24fa..a6a5bfe7710ae10dd05be17d62dc9f9391d4a325 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/06.\350\275\257\344\273\266\345\256\232\346\227\266\345\231\250.md" @@ -1,6 +1,6 @@ --- title: 软件定时器 -permalink: /pages/000400010205 +permalink: /pages/010501020306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 软件定时器 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" index 5c281cd6841c5bbd8b77b5d683381f760392b23f..a416e93f522872b6b2779e1753c671a799a5be33 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/03.\345\237\272\347\241\200\345\206\205\346\240\270/07.\345\216\237\345\255\220\346\223\215\344\275\234.md" @@ -1,6 +1,6 @@ --- title: 原子操作 -permalink: /pages/000400010206 +permalink: /pages/010501020307 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 原子操作 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" index a9995c797bdace8d212c43fbf40a5e319ed99dec..814c5cb0af5d421442982d884349e43024942078 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/01.\347\263\273\347\273\237\350\260\203\347\224\250.md" @@ -1,6 +1,6 @@ --- title: 系统调用 -permalink: /pages/000400010300 +permalink: /pages/010501020401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 系统调用 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" index 36a5fff5569e47f4cc0a0a3c50500ba8b057da28..4985e850177605ba2dd706f6d3404471ae8e1b3e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/02.\345\212\250\346\200\201\345\212\240\350\275\275\344\270\216\351\223\276\346\216\245.md" @@ -1,6 +1,6 @@ --- title: 动态加载与链接 -permalink: /pages/000400010301 +permalink: /pages/010501020402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 动态加载与链接 @@ -60,7 +60,7 @@ LOS\_DoExecveFile INT32 LOS\_DoExecveFile\(const CHAR \*fileName, CHAR \* const \*argv, CHAR \* const \*envp\); -**函数功能:**根据fileName执行一个新的用户程序。 +**函数功能**:根据fileName执行一个新的用户程序。 **参数说明:** diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" index 6afeaff12f683e1fde8936d1448d2c05a46c962e..9182456f7798b7fe54d722d87076e28990c7e5d8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/03.\350\231\232\346\213\237\345\212\250\346\200\201\345\205\261\344\272\253\345\272\223.md" @@ -1,6 +1,6 @@ --- title: 虚拟动态共享库 -permalink: /pages/000400010302 +permalink: /pages/010501020403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 虚拟动态共享库 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" index 1c06529e9fd6f8cf5c1b51a8ac8f135a61cd7fa1..939a52b678b4c530ffc2d928fa88f760b971f108 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/04.\350\275\273\351\207\217\347\272\247\350\277\233\347\250\213\351\227\264\351\200\232\344\277\241.md" @@ -1,6 +1,6 @@ --- title: 轻量级进程间通信 -permalink: /pages/000400010303 +permalink: /pages/010501020404 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 轻量级进程间通信 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" index 2b1f7ba847678eb4e6399584c45dd52dc3741b87..e2616c10ca1a07e26871ee9e72c6cdb71a3682e0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/01.\350\231\232\346\213\237\346\226\207\344\273\266\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 虚拟文件系统 -permalink: /pages/00040001030400 +permalink: /pages/01050102040501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # 虚拟文件系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" index 448bc0014374fb45d0f0a278b5f2e65a82433f6f..e8f4620e09c0b12d90c152724b18f35185b90f66 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/01.FAT.md" @@ -1,6 +1,6 @@ --- title: FAT -permalink: /pages/0004000103040100 +permalink: /pages/0105010204050201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # FAT diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" index 32aa3a4cfb8ad57b5fbb409a1f062fbc91bbd3ee..09e031ba90f1e3ca3c993bccd20f05faf240a8aa 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/02.JFFS2.md" @@ -1,6 +1,6 @@ --- title: JFFS2 -permalink: /pages/0004000103040101 +permalink: /pages/0105010204050202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:44 --- # JFFS2 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" index 38f8890edf1607f9470e22d1fbe053fd4865cadf..7d52e32873b4004c74a1522f9be695e9f504cb82 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/03.NFS.md" @@ -1,6 +1,6 @@ --- title: NFS -permalink: /pages/0004000103040102 +permalink: /pages/0105010204050203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # NFS diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" index 922d3a4ffd0713d82402d94311a7a77cb8fdb7f0..7c6f821ab1c7beec5c2f4e03477bff40d7b3d6d0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/04.Ramfs.md" @@ -1,6 +1,6 @@ --- title: Ramfs -permalink: /pages/0004000103040103 +permalink: /pages/0105010204050204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # Ramfs diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" index d73c81a4bd5bc79cb54c6444fa92b066331b3a96..9b09ce5bcbaea42e45ecec994521a93349a64e49 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/02.\346\224\257\346\214\201\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237/05.Procfs.md" @@ -1,6 +1,6 @@ --- title: Procfs -permalink: /pages/0004000103040104 +permalink: /pages/0105010204050205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # Procfs diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" index 52c81735c22ea88e80699abb4d6cf1a6c02ce2cf..3d1eabefc426eff88434cbcac25f86721ad9442d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/04.\346\211\251\345\261\225\347\273\204\344\273\266/05.\346\226\207\344\273\266\347\263\273\347\273\237/03.\351\200\202\351\205\215\346\226\260\347\232\204\346\226\207\344\273\266\347\263\273\347\273\237.md" @@ -1,6 +1,6 @@ --- title: 适配新的文件系统 -permalink: /pages/00040001030402 +permalink: /pages/01050102040503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # 适配新的文件系统 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" index 61b798c3b98af37a32a4ad6667d8f4cce7f4e020..17c5cebc1b0aa5c1330fd983b0184a4c3585cb8a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/01.Shell\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: Shell介绍 -permalink: /pages/00040001040000 +permalink: /pages/01050102050101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # Shell介绍 @@ -23,7 +23,7 @@ OpenHarmony内核提供的Shell支持调试常用的基本功能,包含系统 - 网络相关命令:支持查询接到开发板的其他设备的IP、查询本机IP、测试网络连接、设置开发板的AP和station模式等相关功能。 - 新增命令的详细流程可参见[Shell命令开发指导](/pages/00040001040001)和[Shell命令编程实例](/pages/00040001040002)。 + 新增命令的详细流程可参见[Shell命令开发指导](/pages/01050102050102)和[Shell命令编程实例](/pages/01050102050103)。 ## 注意事项 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" index 293ebefc5e53dbc2d8009e8a515d51e84d05e6a5..49dec29f09b31582b51db03243a03d9d81ed4eb6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/02.Shell\345\221\275\344\273\244\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: Shell命令开发指导 -permalink: /pages/00040001040001 +permalink: /pages/01050102050102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # Shell命令开发指导 @@ -172,7 +172,7 @@ date: 2021-12-30 18:31:30 4. 输入Shell命令,有两种输入方式: - 在串口工具中直接输入Shell命令。 - - 在telnet工具中输入Shell命令(telnet使用方式详见[telnet](/pages/000400010400030208))。 + - 在telnet工具中输入Shell命令(telnet使用方式详见[telnet](/pages/010501020501040309))。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" index 527c5de8509e9faf719a0aba6496e369e9f0c3c8..02c3052cbb0178dc2b31c1f3cda0128426f068d4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/03.Shell\345\221\275\344\273\244\347\274\226\347\250\213\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: Shell命令编程实例 -permalink: /pages/00040001040002 +permalink: /pages/01050102050103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # Shell命令编程实例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" index c71cbbbc104482631f5ff0f195bafa7055bbee7b..5800488e82f93a0dfdd0365e7d4ab2adb43e3c6c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/01.cpup.md" @@ -1,6 +1,6 @@ --- title: cpup -permalink: /pages/000400010400030000 +permalink: /pages/010501020501040101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # cpup diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" index f17c5ac6bfb7e2321fd3772b50d6bc2a377dddda..12e808f2d7e6051c2d8cbe794c73692c1351d5d0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/02.date.md" @@ -1,6 +1,6 @@ --- title: date -permalink: /pages/000400010400030001 +permalink: /pages/010501020501040102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # date diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" index ca6a40e1cd20d5aaf95db9085a1cee57f64716ee..0798cfb69b45d735e35aeeb9b4b297f22515fbc4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/03.dmesg.md" @@ -1,6 +1,6 @@ --- title: dmesg -permalink: /pages/000400010400030002 +permalink: /pages/010501020501040103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # dmesg diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" index 0bdf1de0a5676ad78bea26aaa4083d70365ef00a..53dd13ac23db7a8bbc843ea7b8b7eb4e0cef60e1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/04.exec.md" @@ -1,6 +1,6 @@ --- title: exec -permalink: /pages/000400010400030003 +permalink: /pages/010501020501040104 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # exec diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" index 6f73236f8001aa52753f80901dd832ba21f5be86..f7b14f5a3c28aa6809831184c547b384a4ec8299 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/05.free.md" @@ -1,6 +1,6 @@ --- title: free -permalink: /pages/000400010400030004 +permalink: /pages/010501020501040105 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # free diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" index 72e717b1477321a72297bdbe86952e889aa1d863..7afb5a0e1afc5e2871fcaac947e5abf839452185 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/06.help.md" @@ -1,6 +1,6 @@ --- title: help -permalink: /pages/000400010400030005 +permalink: /pages/010501020501040106 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # help diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" index 3704e23f81eed4543654607e38df1c2baf1392d7..3c65493e08c76f0a60ac1ef3c4a1d9efd50b6ff4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/07.hwi.md" @@ -1,6 +1,6 @@ --- title: hwi -permalink: /pages/000400010400030006 +permalink: /pages/010501020501040107 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # hwi diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" index fa0ecc85db165ef7bb011c7c7465b0911a51954f..bf606d364424dab5194b007bb1eb13c3e97a5722 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/08.kill.md" @@ -1,6 +1,6 @@ --- title: kill -permalink: /pages/000400010400030007 +permalink: /pages/010501020501040108 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # kill diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" index c5d1a93fd050afff7418934f98f41fcf05acf66f..f8dc071fad1bc3e51fd4ddd3b2a4a535644b2d25 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/09.log.md" @@ -1,6 +1,6 @@ --- title: log -permalink: /pages/000400010400030008 +permalink: /pages/010501020501040109 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # log diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" index 64f5bb0823038b15c921843d68f4b684fdcadfa3..eb3eab3ee3ca6982a6322a2547180b20a678c93d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/10.memcheck.md" @@ -1,6 +1,6 @@ --- title: memcheck -permalink: /pages/000400010400030009 +permalink: /pages/01050102050104010a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # memcheck diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" index dd1784ee95e5e4b476179fc0b58708a53935b512..ea73d54c3e077a769d9155bc56f69f4a6f44ca5e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/11.oom.md" @@ -1,6 +1,6 @@ --- title: oom -permalink: /pages/00040001040003000a +permalink: /pages/01050102050104010b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # oom diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" index 79a8cb055c2f6bebe848ae1202008e8f1fc8e429..432345009e9e245f39d5b2ff59d552db41a5212d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/12.pmm.md" @@ -1,6 +1,6 @@ --- title: pmm -permalink: /pages/00040001040003000b +permalink: /pages/01050102050104010c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # pmm diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" index 1297bcd33b72c2136cc99acac14c6d401b2d1148..6c34dab349726869c9cf396a980bcfea364d383a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/13.reset.md" @@ -1,6 +1,6 @@ --- title: reset -permalink: /pages/00040001040003000c +permalink: /pages/01050102050104010d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # reset diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" index b97507fe1013b19b8359b303165b635df0ff4f29..718b071af192a895ec887a9213134da7a3fc42a3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/14.sem.md" @@ -1,6 +1,6 @@ --- title: sem -permalink: /pages/00040001040003000d +permalink: /pages/01050102050104010e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # sem diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" index 94712b9297e45065ecfc18838d74c8ad373138cf..4487c80b5d8da4c8e0d38b889b1d3d084fa3820f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/15.stack.md" @@ -1,6 +1,6 @@ --- title: stack -permalink: /pages/00040001040003000e +permalink: /pages/01050102050104010f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # stack diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" index d1ebb58e3f1ac2bd8c232a6e6822cfdf9d8689c7..481a085a76c0640e56bdc6c80232cc47cea25605 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/16.su.md" @@ -1,6 +1,6 @@ --- title: su -permalink: /pages/00040001040003000f +permalink: /pages/010501020501040110 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # su diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" index e18a1df0be104288c749f282a901fa7758440986..7971918e677da210566a94bcfaf636dfdedd0454 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/17.swtmr.md" @@ -1,6 +1,6 @@ --- title: swtmr -permalink: /pages/000400010400030010 +permalink: /pages/010501020501040111 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # swtmr diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" index 31554b76b1ea8214e88ff539fb5d71fa0e2d0b81..45395a1dec130904e13a7e908b051e359a059903 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/18.systeminfo.md" @@ -1,6 +1,6 @@ --- title: systeminfo -permalink: /pages/000400010400030011 +permalink: /pages/010501020501040112 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # systeminfo diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" index 4d774920b71574585e3b1912daa746fad884d613..b30cc1684586ab5ffef2e423ca2f561363031f97 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/19.task.md" @@ -1,6 +1,6 @@ --- title: task -permalink: /pages/000400010400030012 +permalink: /pages/010501020501040113 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # task diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" index e895b8d0dac77957526a2a50e3a351541b3602e7..86219c9f9da168f3af784ecb85ceaab3c4b6913e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/20.uname.md" @@ -1,6 +1,6 @@ --- title: uname -permalink: /pages/000400010400030013 +permalink: /pages/010501020501040114 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # uname diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" index d555c7184383a4e9ef97789da2b87bb3c69e455e..e19802c0f8bd8e879e1cb8e9c47b112761b7b5ce 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/21.vmm.md" @@ -1,6 +1,6 @@ --- title: vmm -permalink: /pages/000400010400030014 +permalink: /pages/010501020501040115 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # vmm diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" index 1cd04e7c1be99fa0c3bb81ae13c8705e54b9b1df..28dac2be474865dae6817a5c003827fa646ed4a1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/22.watch.md" @@ -1,6 +1,6 @@ --- title: watch -permalink: /pages/000400010400030015 +permalink: /pages/010501020501040116 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # watch diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" similarity index 88% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" index 4081e6dd4c24e5b1af8dbafa153052e7ed7985f9..c34fcca4de029f0f6574a52e9ec7a754266f47eb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/23.reboot.md" @@ -1,6 +1,6 @@ --- title: reboot -permalink: /pages/000400010400030016 +permalink: /pages/010501020501040117 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # reboot diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" index 19bbd3fff1013afd80d74b34b57c641672440709..4e817ec901fb69f27ce0db01a3fd299cadfefb34 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/01.\347\263\273\347\273\237\345\221\275\344\273\244/24.top.md" @@ -1,6 +1,6 @@ --- title: top -permalink: /pages/000400010400030017 +permalink: /pages/010501020501040118 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # top diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" index 036195b7dda49add4a77b6569479a07336c0aa86..1cd9d1f652eafd0adf90b3b8561bc68badf34497 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/01.cat.md" @@ -1,6 +1,6 @@ --- title: cat -permalink: /pages/000400010400030100 +permalink: /pages/010501020501040201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # cat diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" index 5329d6e6360441f1e0d2b4ba53f68c3b292c7075..5444b72bbdb1c9100b95a77608bfed70059203ad 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/02.cd.md" @@ -1,6 +1,6 @@ --- title: cd -permalink: /pages/000400010400030101 +permalink: /pages/010501020501040202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # cd diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" index 13aaffd3c135a1f6b151da6b95ebf90a28bf4bf5..361816e66b942520718f16b5d443c0186f690ae7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/03.chgrp.md" @@ -1,6 +1,6 @@ --- title: chgrp -permalink: /pages/000400010400030102 +permalink: /pages/010501020501040203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # chgrp diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" index 9890afc74c803eba5a2d8582cfba29a380bf37c9..b6479c8e237f5a9a957c6e3f1d247a75810375f3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/04.chmod.md" @@ -1,6 +1,6 @@ --- title: chmod -permalink: /pages/000400010400030103 +permalink: /pages/010501020501040204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # chmod diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" index 8d58e5fbece810c9b9e3e9cb284802496c7e6925..11688aedb6db98f5710ba02aed26e5acbc45012a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/05.chown.md" @@ -1,6 +1,6 @@ --- title: chown -permalink: /pages/000400010400030104 +permalink: /pages/010501020501040205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # chown diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" index a96ca8ebb446498818161f4fb762d6d434c03eff..e37bbca340903f270f02db857ca85055a17e9dde 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/06.cp.md" @@ -1,6 +1,6 @@ --- title: cp -permalink: /pages/000400010400030105 +permalink: /pages/010501020501040206 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # cp diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" index 85261f9de9ad4859ce9d4bef8446751e6a9dc7fa..8841bc2dba9ff074c6aed8fe96221adb1b1f9929 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/07.format.md" @@ -1,6 +1,6 @@ --- title: format -permalink: /pages/000400010400030106 +permalink: /pages/010501020501040207 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # format diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" index eadd47018a67dad84dbd24f1174b348897e60b26..b4a68b32c54477b1a03ff38c4d4f12d4a0fe917b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/08.ls.md" @@ -1,6 +1,6 @@ --- title: ls -permalink: /pages/000400010400030107 +permalink: /pages/010501020501040208 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # ls diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" index 0e108a4a7ece750e4a308fb7f8e9d68b6adb452c..16f2e003fe6a8ade31b7b7ae5498100c287e561b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/09.lsfd.md" @@ -1,6 +1,6 @@ --- title: lsfd -permalink: /pages/000400010400030108 +permalink: /pages/010501020501040209 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # lsfd diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" index b14f182ff79c80ba4f02d9eba9d9ed5df4239489..d29817a7b6b947c91d343e239fa601e99ff4dd9f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/10.mkdir.md" @@ -1,6 +1,6 @@ --- title: mkdir -permalink: /pages/000400010400030109 +permalink: /pages/01050102050104020a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # mkdir diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" index 1b35f01e8939f029f7b9d2cfcdbd8f2966b73451..03dca88c9c11f84391db8f57ef81685ade77abd4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/11.mount.md" @@ -1,6 +1,6 @@ --- title: mount -permalink: /pages/00040001040003010a +permalink: /pages/01050102050104020b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # mount diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" index cbd7e0a7cfd326ee258d2c6e16462bce0322a7f5..2fea87a71740d222bd54ae9191bf17871ffcdabc 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/12.partinfo.md" @@ -1,6 +1,6 @@ --- title: partinfo -permalink: /pages/00040001040003010b +permalink: /pages/01050102050104020c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # partinfo diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" index f0ceb7f7f698383fe9ea8bc32224ec7c883005c0..d49e782461ce87622ce671d4a8122b7387c2fb60 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/13.partition.md" @@ -1,6 +1,6 @@ --- title: partition -permalink: /pages/00040001040003010c +permalink: /pages/01050102050104020d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # partition diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" index a2d2fd1186c7f9ef638d6e6cc5b70b757b9f58f6..af9efb24315b53c9bd3af9dffa70ca50464163cb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/14.pwd.md" @@ -1,6 +1,6 @@ --- title: pwd -permalink: /pages/00040001040003010d +permalink: /pages/01050102050104020e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # pwd diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" index 0a973a819ed3cbd1a464072b9416330923179ef5..16ee01db7befebf3d34ca50afc2392440315919b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/15.rm.md" @@ -1,6 +1,6 @@ --- title: rm -permalink: /pages/00040001040003010e +permalink: /pages/01050102050104020f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # rm diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" index a354299619b7748f8d410c90cbfe92f721f7998b..87d6569ce0936ac90191c7f062f8f6c530d777ae 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/16.rmdir.md" @@ -1,6 +1,6 @@ --- title: rmdir -permalink: /pages/00040001040003010f +permalink: /pages/010501020501040210 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # rmdir diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" index ed412debeb300e09804b6305afebf00a7d595dff..195061766618aca8a84df0d0db031e1ab47bcd8d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/17.statfs.md" @@ -1,6 +1,6 @@ --- title: statfs -permalink: /pages/000400010400030110 +permalink: /pages/010501020501040211 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # statfs diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" index 76130e07589660eb6dd7658701e06a7aee18a62f..c5a472006354511fa7484350cc58e90b62512ef5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/18.sync.md" @@ -1,6 +1,6 @@ --- title: sync -permalink: /pages/000400010400030111 +permalink: /pages/010501020501040212 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # sync diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" index b4aeeac016727441c01ed91d6b795ed4a457e4b8..b6abbcc38dea5748f6971c74bb01490fef629a30 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/19.touch.md" @@ -1,6 +1,6 @@ --- title: touch -permalink: /pages/000400010400030112 +permalink: /pages/010501020501040213 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:30 +date: 2022-02-12 09:01:45 --- # touch diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" index 1621851618fe3b4b36ad0417747c03383dc1a63c..3264bd4d28254d3bad653b3137a6805fac5a0582 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/20.writeproc.md" @@ -1,6 +1,6 @@ --- title: writeproc -permalink: /pages/000400010400030113 +permalink: /pages/010501020501040214 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # writeproc diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" index cf2fb0d8a75b11ca0790c14e603ccb0f9399dc54..f81c31bca0f35873c4c4c5183ed33220cd1d04e5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/21.umount.md" @@ -1,6 +1,6 @@ --- title: umount -permalink: /pages/000400010400030114 +permalink: /pages/010501020501040215 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # umount diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" index b41b7a9006285626eb09de738cfbdf752bbcaaa2..b7c54437a27e4f92d631c48069899f6b9586a460 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/22.du.md" @@ -1,6 +1,6 @@ --- title: du -permalink: /pages/000400010400030115 +permalink: /pages/010501020501040216 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # du diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" index d2edbb6130ce8179214a21cb7158701a3c1b8a46..ebe4c6d35a8ec669d9184d0422763b36ae33643a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/02.\346\226\207\344\273\266\345\221\275\344\273\244/23.mv.md" @@ -1,6 +1,6 @@ --- title: mv -permalink: /pages/000400010400030116 +permalink: /pages/010501020501040217 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # mv diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" index aaf372343111c39144cf8c39146be24b04e31f32..1a844c82115a9057bd6d0da3d1c2d351113888db 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/01.arp.md" @@ -1,6 +1,6 @@ --- title: arp -permalink: /pages/000400010400030200 +permalink: /pages/010501020501040301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # arp diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" index ef60f227ac119458e7bef035cb0ed50f81c89010..158e8da9ff1233822987dbd9e5ce5bc36a1d64c7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/02.dhclient.md" @@ -1,6 +1,6 @@ --- title: dhclient -permalink: /pages/000400010400030201 +permalink: /pages/010501020501040302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # dhclient diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" index 422d2cc5a35c91858e1134968d7130201b02bceb..5af8d797faf0e7492004b2ee4eba3e7d5b998f77 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/03.ifconfig.md" @@ -1,6 +1,6 @@ --- title: ifconfig -permalink: /pages/000400010400030202 +permalink: /pages/010501020501040303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ifconfig diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" index 26adc040c6169b36212a52da62acade1246a7d77..1ce709b7b16ac82922a54d503ca4ff2db8ba0c2d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/04.ipdebug.md" @@ -1,6 +1,6 @@ --- title: ipdebug -permalink: /pages/000400010400030203 +permalink: /pages/010501020501040304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ipdebug diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" index ad2c5ecf079da4ad4624c3c5711daf37f96357db..48882d778daf48767321570e6d407ffe2122db3e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/05.netstat.md" @@ -1,6 +1,6 @@ --- title: netstat -permalink: /pages/000400010400030204 +permalink: /pages/010501020501040305 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # netstat diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" index 0fc82d26538955c95cea2c707f1951bfe3e918e4..250b5765882fb0de6d11084acc45f768497a955b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/06.ntpdate.md" @@ -1,6 +1,6 @@ --- title: ntpdate -permalink: /pages/000400010400030205 +permalink: /pages/010501020501040306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ntpdate diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" index 05db87eb5ddcb0a173b1363a239787275b6de319..69bc45620234e54e9e6933ae417731e729e25490 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/07.ping.md" @@ -1,6 +1,6 @@ --- title: ping -permalink: /pages/000400010400030206 +permalink: /pages/010501020501040307 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ping diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" index d5649f637d0e8b415a2c63d30121561c51cf4cc2..20c235bf4dcb7a7e3fdc3080ed7b6f742b3a0ed8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/08.ping6.md" @@ -1,6 +1,6 @@ --- title: ping6 -permalink: /pages/000400010400030207 +permalink: /pages/010501020501040308 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ping6 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" index 66efdc7a80732231265d2d227653eda38421b3ac..5fbf5bd05b59bbab65962fbf85362353d7d7305e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/09.telnet.md" @@ -1,6 +1,6 @@ --- title: telnet -permalink: /pages/000400010400030208 +permalink: /pages/010501020501040309 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # telnet diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" index f3ff3663b7f35aaf414ead41628365c4a22fa214..700c26428b7de08cc1feb072be5ef9e835ad87cd 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/04.Shell\345\221\275\344\273\244\344\275\277\347\224\250\350\257\246\350\247\243/03.\347\275\221\347\273\234\345\221\275\344\273\244/10.tftp.md" @@ -1,6 +1,6 @@ --- title: tftp -permalink: /pages/000400010400030209 +permalink: /pages/01050102050104030a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # tftp diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" index 8427601d2dca1b5738897230ac4d824393bff1e0..d7b095e702b4cc25991c4eee8088777ffc5ac59d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/05.\351\255\224\346\263\225\351\224\256\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ --- title: 魔法键使用方法 -permalink: /pages/00040001040004 +permalink: /pages/01050102050105 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 魔法键使用方法 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" index e24a2d250cdc437f1cbcdcc4330c7a77f24b1197..4540b59a0522ee8a7169ffa79d24aa8726be2729 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/01.Shell/06.\347\224\250\346\210\267\346\200\201\345\274\202\345\270\270\344\277\241\346\201\257\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 用户态异常信息说明 -permalink: /pages/00040001040005 +permalink: /pages/01050102050106 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 用户态异常信息说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" index 52515e9f594c72ca6b9e36da14ad09084aab925b..6598f2664d8933f4fb765da3a63d266c1a2fda98 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/02.Trace.md" @@ -1,6 +1,6 @@ --- title: Trace -permalink: /pages/000400010401 +permalink: /pages/010501020502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # Trace调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" index 039816172cefbe019b3afb4447a07ab846df761c..02d5e85d6a5ea61944b442ac0026b7d91bcdbc5a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/03.Perf\350\260\203\346\265\213.md" @@ -1,6 +1,6 @@ --- title: Perf调测 -permalink: /pages/000400010402 +permalink: /pages/010501020503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # Perf调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" index 8377f4970626a398ea875e8d4da6a6eea077a55f..604794f2953d366e5116434cab693e1f5fc13b31 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/04.LMS\350\260\203\346\265\213.md" @@ -1,6 +1,6 @@ --- title: LMS调测 -permalink: /pages/000400010403 +permalink: /pages/010501020504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # LMS调测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" index ff2e413b8e74c175f9e78ab4b06cc9bff4672b2c..292a4e691e53d0c927e5acc2a66d035a243020d2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/05.\350\277\233\347\250\213\350\260\203\346\265\213/01.CPU\345\215\240\347\224\250\347\216\207.md" @@ -1,6 +1,6 @@ --- title: CPU占用率 -permalink: /pages/00040001040400 +permalink: /pages/01050102050501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # CPU占用率 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" index 70ab4ede8c09ce6027e11e76f7cf2e15a864f1de..87f6aeb6c1fb2bee96da7dcdf8124aea6a1fd017 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\206\205\345\255\230\344\277\241\346\201\257\347\273\237\350\256\241.md" @@ -1,6 +1,6 @@ --- title: 内存信息统计 -permalink: /pages/00040001040500 +permalink: /pages/01050102050601 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 内存信息统计 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" index 598af4654c0ecf9f1120f927e4d13ca1e17ee616..e516ce5857473ff70f7ad7eb3ea024bc9224e405 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/02.\345\206\205\345\255\230\346\263\204\346\274\217\346\243\200\346\265\213.md" @@ -1,6 +1,6 @@ --- title: 内存泄漏检测 -permalink: /pages/00040001040501 +permalink: /pages/01050102050602 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 内存泄漏检测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" index 1cbbfb962412553cdbeaade76ed24b370f9a3f99..62a246739fac56be942b758575677505f2a8833b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/06.\345\206\205\345\255\230\350\260\203\346\265\213/03.\350\270\251\345\206\205\345\255\230\346\243\200\346\265\213.md" @@ -1,6 +1,6 @@ --- title: 踩内存检测 -permalink: /pages/00040001040502 +permalink: /pages/01050102050603 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 踩内存检测 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index c651d5cbbfe838ed7dda5ba386e97ecb1c89116d..eb2fd896d17c4312d3836f66e2515eddaa793741 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/00040001040600 +permalink: /pages/01050102050701 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 基本概念 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" index e0045d417c3044ff58f7812d03e9e83179d17cd2..61f0245afd9bb15f083d9baef471567398461863 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/02.\350\277\220\350\241\214\346\234\272\345\210\266.md" @@ -1,6 +1,6 @@ --- title: 运行机制 -permalink: /pages/00040001040601 +permalink: /pages/01050102050702 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 运行机制 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" index 3f41569bf76ce8364a8dbe161221e10077a65ae5..26c41945e62da47c82372f885563a744b2c71562 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/01.\346\216\245\345\217\243\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 接口说明 -permalink: /pages/0004000104060200 +permalink: /pages/0105010205070301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" index f1d1490f1745ab6ec601a046e5a8c9ffc0f0551c..b73ef040447e95eb0e1896b1ce0a4aba746ee792 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/01.\346\216\245\345\217\243\350\260\203\347\224\250\346\226\271\345\274\217.md" @@ -1,6 +1,6 @@ --- title: 接口调用方式 -permalink: /pages/000400010406020100 +permalink: /pages/010501020507030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 接口调用方式 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" index 5633f2c7e9e6c6508bea2f3e79b62dee459fe567..aba692d14388bb5a3a1249c55c307596cde77948 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/03.\344\275\277\347\224\250\346\214\207\345\257\274/02.\344\275\277\347\224\250\350\257\264\346\230\216/02.\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\346\226\271\345\274\217.md" @@ -1,6 +1,6 @@ --- title: 命令行参数方式 -permalink: /pages/000400010406020101 +permalink: /pages/010501020507030202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 命令行参数方式 @@ -61,7 +61,7 @@ int main() ## 编译 -参考[接口调用一节](/pages/000400010406020100#section534302242515)。 +参考[接口调用一节](/pages/010501020507030201#section534302242515)。 ## 使用mwatch参数命令 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" index 6af964f39ab948986e5e4ee3c400114611bb17a2..5d76334f2d353266343164fdbf9a08768a8b9839 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/07.\347\224\250\346\210\267\346\200\201\345\206\205\345\255\230\350\260\203\346\265\213/04.\345\270\270\350\247\201\351\227\256\351\242\230\345\234\272\346\231\257.md" @@ -1,6 +1,6 @@ --- title: 常见问题场景 -permalink: /pages/00040001040603 +permalink: /pages/01050102050704 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 常见问题场景 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" index 80d6bd2dc38ec38d68f63411868eb7d27a41fce1..1fcc99e11ebdd782c87f0d2663e3ef7cf13a8824 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/01.\344\270\264\347\273\210\351\201\227\350\250\200.md" @@ -1,6 +1,6 @@ --- title: 临终遗言 -permalink: /pages/00040001040700 +permalink: /pages/01050102050801 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 临终遗言 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" index 96a2e631be03b466d48b719a18e84ad3952808ea..ca3f6205e5013e27417b5d97b7c868822f196c2e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/05.\350\260\203\346\265\213\344\270\216\345\267\245\345\205\267/08.\345\205\266\344\273\226\345\206\205\346\240\270\350\260\203\346\265\213\346\211\213\346\256\265/02.\345\270\270\350\247\201\351\227\256\351\242\230\345\256\232\344\275\215\346\226\271\346\263\225.md" @@ -1,6 +1,6 @@ --- title: 常见问题定位方法 -permalink: /pages/00040001040701 +permalink: /pages/01050102050802 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 常见问题定位方法 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" index 44c64fa22c5b4a5389d0ed75aa191d20142aaae3..07d58511f9c810fc0a22035d9451d0db99439923 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/01.\345\217\214\345\220\221\351\223\276\350\241\250.md" @@ -1,6 +1,6 @@ --- title: 双向链表 -permalink: /pages/00040001050000 +permalink: /pages/01050102060101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 双向链表 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" index eda514c09d3e8ddf5e652096dc940c774f2133fe..44c342d09761ff3fda2e0b7e4bb4f1b8a1cb2357 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/01.\345\237\272\346\234\254\346\225\260\346\215\256\347\273\223\346\236\204/02.\344\275\215\346\223\215\344\275\234.md" @@ -1,6 +1,6 @@ --- title: 位操作 -permalink: /pages/00040001050001 +permalink: /pages/01050102060102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 位操作 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" index d851b7c9a3df5a7271ea653244817dd15163f258..22f50a58eebf4ff020bd65f2167f25a8ff44a38b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/02.\345\260\217\345\236\213\347\263\273\347\273\237\345\206\205\346\240\270/06.\351\231\204\345\275\225/02.\346\240\207\345\207\206\345\272\223.md" @@ -1,6 +1,6 @@ --- title: 标准库 -permalink: /pages/000400010501 +permalink: /pages/010501020602 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 标准库 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" index 490b081da22637e9576e25e0dcd4d0f82c68a964..18aee65c644c6afeab80975890fe01af05418321 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/01.Linux\345\206\205\346\240\270\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: Linux内核概述 -permalink: /pages/0004000200 +permalink: /pages/0105010301 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # Linux内核概述 - [Linux内核版本](#section152847516485) - [OpenHarmony内核版本选择](#section2716416191715) -面向标准系统类设备(参考内存≥128MB),OpenHarmony选择Linux内核作为基础内核,可以对不同资源受限的设备产品配置出适合的OS内核,为上层提供基础的操作系统能力。 +面向标准系统类设备(参考内存≥128MiB),OpenHarmony选择Linux内核作为基础内核,可以对不同资源受限的设备产品配置出适合的OS内核,为上层提供基础的操作系统能力。 ## Linux内核版本 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" index c8ec56ca01fac838d515db5569aa9aa7722879d9..d769f76d5bc4f8a3a094d4b6ade4eee1e58afc69 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/02.OpenHarmony\345\274\200\345\217\221\346\235\277Patch\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: OpenHarmony开发板Patch使用指导 -permalink: /pages/0004000201 +permalink: /pages/0105010302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # OpenHarmony开发板Patch使用指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" index 9d106fa946345bce303dd1488920744eff9f4242..c8d64a726a9e32cfa113b265f2f3238e224a5ec5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/01.\345\206\205\346\240\270/03.\346\240\207\345\207\206\347\263\273\347\273\237\345\206\205\346\240\270/03.Linux\345\206\205\346\240\270\347\274\226\350\257\221\344\270\216\346\236\204\345\273\272\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: Linux内核编译与构建指导 -permalink: /pages/0004000202 +permalink: /pages/0105010303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # Linux内核编译与构建指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" index fd5bad3ca57b82dc21f2aa64bb056b5fef91d41f..ee51e71ead0b2051ebf8d2d4aa5c20a7c2c043d7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/01.HDF\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: HDF开发概述 -permalink: /pages/0004010000 +permalink: /pages/0105020101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # HDF开发概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" index 23424a593b47f0241a9fc36c65bfe28b6bda1e0d..09459794016345e9897e95c515bc254be6e8176c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/02.\351\251\261\345\212\250\345\274\200\345\217\221.md" @@ -1,6 +1,6 @@ --- title: 驱动开发 -permalink: /pages/0004010001 +permalink: /pages/0105020102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 驱动开发 @@ -161,7 +161,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提 3. 驱动配置 - HDF使用HCS作为配置描述源码,HCS详细介绍参考[配置管理](/pages/0004010004)介绍。 + HDF使用HCS作为配置描述源码,HCS详细介绍参考[配置管理](/pages/0105020105)介绍。 驱动配置包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息,具体写法如下: @@ -241,7 +241,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提 > DEVICE_PRELOAD_INVALID > } DevicePreload; > ``` -> 配置文件中preload 字段配成 0 (DEVICE\_PRELOAD\_ENABLE ),则系统启动过程中默认加载;配成1(DEVICE\_PRELOAD\_ENABLE\_STEP2),当系统支持快启的时候,则在系统完成之后再加载这一类驱动,否则和DEVICE\_PRELOAD\_ENABLE 含义相同;配成2(DEVICE\_PRELOAD\_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务(参考[消息机制](/pages/0004010003))时,如果驱动服务不存在时,HDF框架会尝试动态加载该驱动。 +> 配置文件中preload 字段配成 0 (DEVICE\_PRELOAD\_ENABLE ),则系统启动过程中默认加载;配成1(DEVICE\_PRELOAD\_ENABLE\_STEP2),当系统支持快启的时候,则在系统完成之后再加载这一类驱动,否则和DEVICE\_PRELOAD\_ENABLE 含义相同;配成2(DEVICE\_PRELOAD\_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务(参考[消息机制](/pages/0105020104))时,如果驱动服务不存在时,HDF框架会尝试动态加载该驱动。 >- 按序加载(需要驱动为默认加载) > 配置文件中的priority(取值范围为整数0到200)是用来表示host和驱动的优先级,不同的host内的驱动,host的priority值越小,驱动加载优先级越高;同一个host内驱动的priority值越小,加载优先级越高。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" index 30e98fb6a3b31cc28614193e80037a1752d62ba5..47f79a045c86b80d741b7789fd9bdb0214496421 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/03.\351\251\261\345\212\250\346\234\215\345\212\241\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 驱动服务管理 -permalink: /pages/0004010002 +permalink: /pages/0105020103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 驱动服务管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" index 0bf6f8f7825ab396c758ca03d5f405273b0be517..aefc1491469c4fb1e02a66fd9a939e1da190ff12 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/04.\351\251\261\345\212\250\346\266\210\346\201\257\346\234\272\345\210\266\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 驱动消息机制管理 -permalink: /pages/0004010003 +permalink: /pages/0105020104 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 驱动消息机制管理 @@ -62,7 +62,7 @@ date: 2021-12-30 18:31:31 ## 开发步骤 -1. 将驱动配置信息中服务策略policy字段设置为2(SERVICE\_POLICY\_CAPACITY,参考[policy定义](/pages/0004010002))。 +1. 将驱动配置信息中服务策略policy字段设置为2(SERVICE\_POLICY\_CAPACITY,参考[policy定义](/pages/0105020103))。 ``` device_sample :: Device { diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" index 28ddd83f3d831ad7be7c754defc8a90a23a9b689..19b843888771effb6625eb67fe3a854a9827f6b3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/05.\351\205\215\347\275\256\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 配置管理 -permalink: /pages/0004010004 +permalink: /pages/0105020105 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # 配置管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" index d500b1e130a5bc1d07de6fc9abf05c2f68c4f3e8..74e49a213ce254228bbf1afe4232864b281c12d7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/01.HDF\351\251\261\345\212\250\346\241\206\346\236\266/06.HDF\345\274\200\345\217\221\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: HDF开发实例 -permalink: /pages/0004010005 +permalink: /pages/0105020106 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # HDF开发实例 @@ -61,7 +61,7 @@ root { ## 编写驱动代码 -基于HDF框架编写的sample驱动代码如下: +基于HDF框架编写的sample驱动代码如下(编译参考 [驱动开发](/pages/0105020102)): ``` #include @@ -133,7 +133,7 @@ HDF_INIT(g_sampleDriverEntry); ## 编写用户程序和驱动交互代码 -基于HDF框架编写的用户态程序和驱动交互的代码如下: +基于HDF框架编写的用户态程序和驱动交互的代码如下(代码可以放在目录drivers/adapter/uhdf下面编译,build.gn可以参考drivers/framework/sample/platform/uart/dev/build.gn): ``` #include diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" index f16b47b03fd84abdae42a950fc8d6086396c0a75..9e2f0c9eacd53897ac69d484327e5c3765f46f9f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/01.ADC.md" @@ -1,6 +1,6 @@ --- title: ADC -permalink: /pages/0004010100 +permalink: /pages/0105020201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # ADC @@ -22,8 +22,8 @@ date: 2021-12-30 18:31:31 ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备,在HDF框架中,ADC模块接口适配模式采用统一服务模式,这需要一个设备服务来作为ADC模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如ADC可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 -**图 1** ADC统一服务 -![](/images/device-dev/driver/figures/ADC统一服务.png "ADC统一服务") +**图 1** ADC统一服务模式 +![](/images/device-dev/driver/figures/统一服务模式结构图.png "ADC统一服务模式") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" index 9c1f3996df585a7197f8f72722d048edf98b8a92..0e5e74c6ae7ed8d64ef41fb227dbd5c871b02a0b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/02.GPIO.md" @@ -1,6 +1,6 @@ --- title: GPIO -permalink: /pages/0004010101 +permalink: /pages/0105020202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # GPIO @@ -20,12 +20,10 @@ date: 2021-12-30 18:31:31 ## 概述 -GPIO(General-purpose input/output)即通用型输入输出,在HDF框架中, - -GPIO的接口适配模式采用无服务模式,用于不需要在用户态提供API的设备类型,或者没有用户态和内核区分的OS系统,其关联方式是DevHandle直接指向设备对象内核态地址(DevHandle是一个void类型指针)。 +GPIO(General-purpose input/output)即通用型输入输出,在HDF框架中,GPIO的接口适配模式采用无服务模式,用于不需要在用户态提供API的设备类型,或者没有用户态和内核区分的OS系统,其关联方式是DevHandle直接指向设备对象内核态地址(DevHandle是一个void类型指针)。 **图 1** GPIO无服务模式结构图 -![](/images/device-dev/driver/figures/GPIO无服务模式结构图.png "GPIO无服务模式结构图") +![](/images/device-dev/driver/figures/无服务模式结构图.png "GPIO无服务模式结构图") ## 接口说明 @@ -33,13 +31,13 @@ GpioMethod定义: ``` struct GpioMethod { - int32_t (*request)(struct GpioCntlr *cntlr, uint16_t local);// 【可选】 - int32_t (*release)(struct GpioCntlr *cntlr, uint16_t local);// 【可选】 + int32_t (*request)(struct GpioCntlr *cntlr, uint16_t local);// 【预留】 + int32_t (*release)(struct GpioCntlr *cntlr, uint16_t local);// 【预留】 int32_t (*write)(struct GpioCntlr *cntlr, uint16_t local, uint16_t val); int32_t (*read)(struct GpioCntlr *cntlr, uint16_t local, uint16_t *val); int32_t (*setDir)(struct GpioCntlr *cntlr, uint16_t local, uint16_t dir); int32_t (*getDir)(struct GpioCntlr *cntlr, uint16_t local, uint16_t *dir); - int32_t (*toIrq)(struct GpioCntlr *cntlr, uint16_t local, uint16_t *irq);// 【可选】 + int32_t (*toIrq)(struct GpioCntlr *cntlr, uint16_t local, uint16_t *irq);// 【预留】 int32_t (*setIrq)(struct GpioCntlr *cntlr, uint16_t local, uint16_t mode, GpioIrqFunc func, void *arg); int32_t (*unsetIrq)(struct GpioCntlr *cntlr, uint16_t local); int32_t (*enableIrq)(struct GpioCntlr *cntlr, uint16_t local); @@ -64,7 +62,7 @@ struct GpioMethod {

write

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号 ;val:uint16_t,电平传入值;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;
val:uint16_t,电平传入值;

@@ -75,9 +73,9 @@ struct GpioMethod {

read

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识;

-

val:uint16_t 指针,用于传出电平值 ;

+

val:uint16_t 指针,用于传出电平值;

HDF_STATUS相关状态

@@ -86,7 +84,7 @@ struct GpioMethod {

setDir

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号 ;dir:uint16_t,管脚方向传入值;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;
dir:uint16_t,管脚方向传入值;

@@ -97,9 +95,9 @@ struct GpioMethod {

getDir

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号 ;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;

-

dir:uint16_t 指针,用于传出管脚方向值 ;

+

dir:uint16_t 指针,用于传出管脚方向值;

HDF_STATUS相关状态

@@ -108,7 +106,7 @@ struct GpioMethod {

setIrq

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号;mode:uint16_t,表示触发模式(边沿或电平);func:函数指针,中断服务程序 ;arg:void指针,中断服务程序入参;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;
mode:uint16_t,表示触发模式(边沿或电平);
func:函数指针,中断服务程序;
arg:void指针,中断服务程序入参;

@@ -119,7 +117,7 @@ struct GpioMethod {

unsetIrq

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号 ;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;

@@ -130,7 +128,7 @@ struct GpioMethod {

enableIrq

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;

@@ -141,7 +139,7 @@ struct GpioMethod {

disableIrq

-

cntlr:结构体指针,核心层GPIO控制器;local:uint16_t,GPIO端口标识号;

+

cntlr:结构体指针,核心层GPIO控制器;
local:uint16_t,GPIO端口标识号;

diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.HDMI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.HDMI.md" new file mode 100644 index 0000000000000000000000000000000000000000..8d2566990f76bbecd7415f38960b2cd72bb5e064 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.HDMI.md" @@ -0,0 +1,396 @@ +--- +title: HDMI +permalink: /pages/0105020203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:45 +--- +# HDMI + +- [概述](#1) +- [开发步骤](#2) +- [开发实例](#3) + +## 概述 + +HDMI(High-Definition Multiface Interface)是Hitachi、Panasonic、Philips、SiliconImage、Sony、Thomson、Toshiba共同发布的一款音视频传输协议,主要用于DVD、机顶盒等音视频source到TV、显示器等sink设备的传输。传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。 + +在HDF框架中,HDMI的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用率。 + + **图 1** HDMI统一服务模式 + +![image1](/images/device-dev/driver/figures/独立服务模式结构图.png) + +## 开发步骤 + +HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以及实例化HDMI控制器对象。 + +1. **实例化驱动入口:** + - 实例化HdfDriverEntry结构体成员。 + - 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 + +2. **配置属性文件:** + - 在device_info.hcs文件中添加deviceNode描述。 + - 【可选】添加hdmi_config.hcs器件属性文件。 + +3. **实例化HDMI控制器对象:** + - 初始化HdmiCntlr成员。 + - 实例化HdmiCntlr成员HdmiCntlrOps方法集合,其定义和成员函数说明见下文。 + + HdmiCntlrOps定义: + ```c + struct HdmiCntlrOps { + void (*hardWareInit)(struct HdmiCntlr *cntlr); + void (*hardWareStatusGet)(struct HdmiCntlr *cntlr, struct HdmiHardwareStatus *status); + void (*controllerReset)(struct HdmiCntlr *cntlr); + bool (*hotPlugStateGet)(struct HdmiCntlr *cntlr); + bool (*hotPlugInterruptStateGet)(struct HdmiCntlr *cntlr); + void (*lowPowerSet)(struct HdmiCntlr *cntlr, bool enable); + void (*tmdsModeSet)(struct HdmiCntlr *cntlr, enum HdmiTmdsModeType mode); + int32_t (*tmdsConfigSet)(struct HdmiCntlr *cntlr, struct HdmiTmdsConfig mode); + void (*infoFrameEnable)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, bool enable); + int32_t (*infoFrameSend)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, uint8_t *data, uint32_t len); + int32_t (*infoFrameDataSet)(struct HdmiCntlr *cntlr, uint32_t type, uint8_t *data, uint32_t len); + int32_t (*cecMsgSend)(struct HdmiCntlr *cntlr, struct HdmiCecMsg *msg); + void (*audioPathEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*audioPathSet)(struct HdmiCntlr *cntlr, struct HdmiAudioConfigInfo *config); + void (*phyOutputEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*phyOutputSet)(struct HdmiCntlr *cntlr, struct HdmiPhyCfg *cfg); + void (*blackDataSet)(struct HdmiCntlr *cntlr, bool enable); + void (*videoMuteEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*videoPathSet)(struct HdmiCntlr *cntlr, struct HdmiVideoAttr *attr); + void (*audioMuteEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*avmuteSet)(struct HdmiCntlr *cntlr, bool enable); + int32_t (*ddcTransfer)(struct HdmiCntlr *cntlr, struct HdmiDdcCfg *ddcCfg); + bool (*scdcSourceScrambleGet)(struct HdmiCntlr *cntlr); + int32_t (*scdcSourceScrambleSet)(struct HdmiCntlr *cntlr, bool enable); + void (*frlSet)(struct HdmiCntlr *cntlr); + int32_t (*frlEnable)(struct HdmiCntlr *cntlr, bool enable); + int32_t (*audioNctsSet)(struct HdmiCntlr *cntlr, struct HdmiFrlAudioNctsConfig *cfg); + void (*frlTrainingConfigSet)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainConfig *cfg); + void (*frlTrainingStart)(struct HdmiCntlr *cntlr); + void (*frlGetTriningRslt)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainRslt *rslt); + void (*hdcpRegInit)(struct HdmiCntlr *cntlr); + int32_t (*hdcpGenerateAksvAndAn)(struct HdmiCntlr *cntlr); + int32_t (*hdcpOptReg)(struct HdmiCntlr *cntlr, enum HdmiHdcpRegOptType type, uint8_t *data, uint32_t len); + void (*hdrTimerSet)(struct HdmiCntlr *cntlr, struct HdmiHdrTimerConfig *config); + }; + ``` + + 表1 HdmiCntlrOps结构体成员的回调函数功能说明 + + | 函数成员 | 入参 | 出参 | 返回值 | 功能 | + | ------------------------ | ------------------------------------------------------------ | -------------------------------------- | ------------------ | -------------------------------------------------- | + | hardWareInit | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | HDMI硬件初始化 | + | hardWareStatusGet | **cntlr**: 结构体指针,核心层HDMI控制器;
| **status**:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 | + | controllerReset | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | HDMI控制器复位 | + | hotPlugStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔状态 | 获取HDMI热插拔状态 | + | hotPlugInterruptStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 | + | lowPowerSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 | + | tmdsModeSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**mode**:TMDS模式 | 无 | 无 | 设置TMDS模式 | + |tmdsConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**mode**: TMDS参数|无|HDF_STATUS相关状态|配置TMDS参数| + |infoFrameEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**enable**: bool,使能/去使能|无|无|使能/去使能infoFrame| + |infoFrameSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**data**: infoFrame数据
**len**:数据长度|无|HDF_STATUS相关状态|发送inforFrame| + |cecMsgSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**msg**: CEC消息|无|HDF_STATUS相关状态|发送CEC消息| + |audioPathEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio通路| + |audioPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: 配置信息|无|无|设置audio通路配置信息| + |phyOutputEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能物理层输出状态| + |phyOutputSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**: 配置信息|无|无|设置物理层配置信息| + |blackDataSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|黑屏设置| + |videoMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能video静音| + |videoPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**attr**: 配置信息|无|无|设置viedo通路配置信息| + |audioMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio静音| + |avmuteSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能声音图像消隐| + |ddcTransfer|**cntlr**: 结构体指针,核心层HDMI控制器;
**ddcCfg**:DDC配置参数|**ddcCfg**:DDC配置参数|HDF_STATUS相关状态|DDC读写数据| + |scdcSourceScrambleGet|**cntlr**: 结构体指针,核心层HDMI控制器;|无|bool,加扰状态|获取source端的加扰状态| + |scdcSourceScrambleSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能source端的加扰| + |frlEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能FRL| + |audioNctsSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:N/CTS配 置参数|无|HDF_STATUS相关状态|设置audio的N/CTS信息| + |frlTrainingConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:FRL Traning配置参数|无|无|设置FRL Traning配置信息| + |frlTrainingStart|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|开始FRL Traning流程| + |frlGetTriningRslt|**cntlr**: 结构体指针,核心层HDMI控制器;|**rslt**:FRL Traning结果|无|获取FRL Traning结果| + |hdcpRegInit|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|初始化HDCP流程相关的寄存器| + |hdcpGenerateAksvAndAn|**cntlr**: 结构体指针,核心层HDMI控制器;|无|HDF_STATUS相关状态|HDCP流程中生成aksv和an| + |hdcpOptReg|**cntlr**: 结构体指针,核心层HDMI控制器;
**type**: 操作类型
**data**: 寄存器数据
**len**: 数据长度|**data**: 寄存器数据|HDF_STATUS相关状态|HDCP流程中的相关寄存器读写操作| + |hdrTimerSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: timer配置信息|无|无|设置HDR相关的timer配置信息| + +## 开发实例 + +1. 驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 + + 一般在加载驱动时HDF会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。 + + HDMI驱动入口参考: + + ```c + struct HdfDriverEntry g_hdmiDriverEntry = { + .moduleVersion = 1, + .Bind = HdmiAdapterBind, + .Init = HdmiAdapterInit, + .Release = HdmiAdapterRelease, + .moduleName = "adapter_hdmi_driver",//【必要】与HCS里面的名字匹配 + }; + HDF_INIT(g_hdmiDriverEntry); //调用HDF_INIT将驱动入口注册到HDF框架中 + ``` + +2. 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在hdmi_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层HdmiCntlr相关成员的默认值或限制范围有密切关系。 + + 从第一个节点开始配置具体HDMI控制器信息,此节点并不表示某一路HDMI控制器,而是代表一个资源性质设备,用于描述一类HDMI控制器的信息。本例只有一个HDMI控制器,如有多个控制器,则需要在device_info文件增加deviceNode信息,以及在hdmi_config文件中增加对应的器件属性。 + + - device_info.hcs 配置参考 + + ```c + root { + platform :: host { + device_hdmi :: device { + device0 :: deviceNode { + policy = 2; // 等于2,需要发布服务 + priority = 20; // 驱动启动优先级 + permission = 0644; // 驱动创建设备节点权限 + serviceName = "HDF_PLATFORM_HDMI_0"; //【必要】驱动对外发布服务的名称,必须唯一 + moduleName = "hdmi_driver"; //【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致; + deviceMatchAttr = "adapter_hdmi_driver"; //【必要】用于配置控制器私有数据,要与hdmi_config.hcs中对应控制器保持一致 + } // 具体的控制器信息在 hdmi_config.hcs 中 + } + } + } + ``` + + - hdmi_config.hcs 配置参考 + + ```c + root { + platform { + hdmi_config { + template hdmi_controller { // 模板公共参数,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省 + match_attr = ""; //【必要】需要和device_info.hcs中的deviceMatchAttr值一致 + index = 0; //【必要】hdmi控制器编号 + regBasePhy = 0x10100000; //【必要】寄存器物理基地址 + regSize = 0xd1; //【必要】寄存器位宽 + irqNum = 100; //【必要】中断号 + maxTmdsClock = 300; + videoTiming = 10; + quantization = 1; + colorSpace = 0; + colorimetry = 0; + audioIfType = 0; + audioBitDepth = 1; + audioSampleRate = 2; + audioChannels = 1; + hdrColorimetry = 4; + hdrUserMode = 1; + cap = 0xd001e045; + } + controller_0x10100000 :: hdmi_controller { + match_attr = "adapter_hdmi_driver"; + index = 0; + regBasePhy = 0x10100000; + irqNum = 100; + maxTmdsClock = 400; + defTmdsClock = 300; + maxFrlRate = 600; + videoTiming = 10; + quantization = 1; + colorSpace = 0; + colorimetry = 0; + audioIfType = 0; + audioSampleRate = 2; + audioChannels = 1; + hdrColorimetry = 4; + hdrUserMode = 1; + cap = 0xd001e045; + } + } + } + } + ``` + +3. 最后一步,完成驱动入口注册之后,要以核心层HdmiCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化HdmiCntlr成员HdmiCntlrOps(让用户可以通过接口来调用驱动底层函数),实现HdfDriverEntry成员函数(Bind,Init,Release)。 + + - 自定义结构体参考 + + > ![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + > 从驱动角度看,自定义结构体是参数和数据的载体。HDF会读取hdmi_config.hcs文件中的数值并通过DeviceResourceIface来初始化结构体成员,且其中一些重要数值(例如设备号、总线号等)也会被传递给核心层HdmiCntlr对象。 + + ```c + struct HdmiAdapterHost { + struct HdmiCntlr *cntlr; //【必要】是核心层控制对象,具体描述如下 + volatile unsigned char *regBase;//【必要】寄存器基地址 + uint32_t regBasePhy; //【必要】寄存器物理基地址 + uint32_t regSize; //【必要】寄存器位宽 + uint32_t irqNum; //【必要】中断号 + }; + + /* HdmiCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值 */ + struct HdmiCntlr { + struct IDeviceIoService service; + struct HdfDeviceObject *hdfDevObj; + struct PlatformDevice device; + struct OsalMutex mutex; + struct PlatformQueue *msgQueue; + struct HdmiCntlrCap cap; + struct HdmiAttr attr; + struct HdmiCntlrOps *ops; + uint32_t deviceIndex; + uint32_t state; // 控制器状态 + enum HdmiTmdsModeType tmdsMode; + struct HdmiDevice *hdmi; + struct HdmiInfoframe infoframe; + struct HdmiScdc *scdc; + struct HdmiDdc ddc; + struct HdmiFrl *frl; + struct HdmiHdcp *hdcp; + struct HdmiCec *cec; + struct HdmiEvent event; + struct HdmiHdr *hdr; + void *priv; + }; + ``` + + - **【重要】** HdmiCntlr成员回调函数结构体HdmiCntlrOps的实例化 + + ```c + static struct HdmiCntlrOps g_hdmiAdapterHostOps = { + .hardWareInit = HdmiAdapterHardWareInit, + .hardWareStatusGet = HdmiAdapterHardWareStatusGet, + .controllerReset = HdmiAdapterControllerReset, + .hotPlugStateGet = HdmiAdapterHotPlugStateGet, + .hotPlugInterruptStateGet = HdmiAdapterHotPlugInterruptStateGet, + .lowPowerSet = HdmiAdapterLowPowerSet, + .tmdsModeSet = HdmiAdapterTmdsModeSet, + .tmdsConfigSet = HdmiAdapterTmdsConfigSet, + .infoframeEnable = HdmiAdapterInfoframeEnable, + .infoframeSend = HdmiAdapterInfoframeSend, + .infoframeDataSet = HdmiAdapterInfoframeDataSet, + .cecMsgSend = HdmiAdapterCecMsgSend, + .audioPathEnable = HdmiAdapterAudioPathEnable, + .audioPathSet = HdmiAdapterAudioPathSet, + .phyOutputEnable = HdmiAdapterPhyOutputEnable, + .phyOutputSet = HdmiAdapterPhyOutputSet, + .blackDataSet = HdmiAdapterBlackDataSet, + .videoMuteEnable = HdmiAdapterVideoMuteEnable, + .videoPathSet = HdmiAdapterVideoPathSet, + .audioMuteEnable = HdmiAdapterAudioMuteEnable, + .avmuteSet = HdmiAdapterAvmuteSet, + .ddcTransfer = HdmiAdapterDdcTransfer, + .scdcSourceScrambleGet = HdmiAdapterScdcSourceScrambleGet, + .scdcSourceScrambleSet = HdmiAdapterScdcSourceScrambleSet, + .frlSet = HdmiAdapterFrlSet, + .frlEnable = HdmiAdapterFrlEnable, + .audioNctsSet = HdmiAdapterAudioNctsSet, + .frlTrainingConfigSet = HdmiAdapterFrlTrainingConfigSet, + .frlTrainingStart = HdmiAdapterFrlTrainingStart, + .frlGetTriningRslt = HdmiAdapterFrlGetTriningRslt, + .hdcpRegInit = HdmiAdapterHdcpRegInit, + .hdcpGenerateAksvAndAn = HdmiAdapterHdcpGenerateAksvAndAn, + .hdcpOptReg = HdmiAdapterHdcpOptReg, + .hdrTimerSet = HdmiAdapterHdrTimerSet, + }; + ``` + + - **Bind函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外呈现的接口参数,具备 HCS 配置文件的信息 + > + > **返回值:** + > HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + + |状态(值)|状态描述| + |:-|:-| + |HDF_ERR_INVALID_OBJECT|控制器对象非法| + |HDF_ERR_INVALID_PARAM |参数非法| + |HDF_ERR_MALLOC_FAIL |内存分配失败| + |HDF_ERR_IO |I/O 错误| + |HDF_SUCCESS |传输成功| + |HDF_FAILURE |传输失败| + + > **函数说明:** + > 初始化自定义结构体对象HdmiAdapterHost,初始化HdmiCntlr成员,调用核心层HdmiCntlrAdd函数。 + > + > HdmiCntlr,HdmiAdapterHost,HdfDeviceObject之间互相赋值,方便其他函数可以相互转化。 + + ```c + static int32_t HdmiAdapterBind(struct HdfDeviceObject *obj) + { + struct HdmiCntlr *cntlr = NULL; + struct HimciAdapterHost *host = NULL; + int32_t ret; + cntlr = (struct HdmiCntlr *)OsalMemCalloc(sizeof(struct HdmiCntlr)); + if (cntlr == NULL) { + HDF_LOGE("%s: malloc cntlr failed!", __func__); + return HDF_ERR_MALLOC_FAIL; + } + host = (struct HimciAdapterHost *)OsalMemCalloc(sizeof(struct HimciAdapterHost)); + if (host == NULL) { + HDF_LOGE("%s: malloc host failed!", __func__); + return HDF_ERR_MALLOC_FAIL; + } + cntlr->priv = (void *)host; //【必要】将host存放至cntlr的私有数据 + cntlr->ops = &g_hdmiHostOps; //【必要】HdmiCntlrOps的实例化对象的挂载 + cntlr->hdfDevObj = obj; //【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提 + obj->service = &cntlr->service; //【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提 + ret = HdmiAdapterCntlrParse(cntlr, obj); //【必要】 初始化 cntlr. 失败则 goto __ERR; + ... + ret = HdmiAdapterHostParse(host, obj); //【必要】 初始化 host对象的相关属性,失败则 goto __ERR; + ... + ret = HdmiAdapterHostInit(host, cntlr); //厂商自定义的初始化,失败则 goto __ERR; + ... + ret = HdmiCntlrAdd(cntlr); //调用核心层函数 失败则 goto __ERR; + ... + HDF_LOGD("HdmiAdapterBind: success."); + return HDF_SUCCESS; + __ERR: + HdmiAdapterDeleteHost(host); + HDF_LOGD("HdmiAdapterBind: fail, err = %d.", ret); + return ret; + } + ``` + + - **init函数参考** + + >**入参:** + >HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + > + >**返回值:** + >HDF_STATUS相关状态 + > + >函数说明: + > + >实现HdmiAdapterInit函数。 + + ```c + static int32_t HdmiAdapterInit(struct HdfDeviceObject *obj) + { + return HDF_SUCCESS; + } + ``` + + - **Release 函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + > + > **返回值:** + > 无 + > + > **函数说明:** + > 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。 + + ```c + static void HdmiAdapterRelease(struct HdfDeviceObject *obj) + { + struct HdmiCntlr *cntlr = NULL; + ... + cntlr = (struct HdmiCntlr *)obj->service;//这里有HdfDeviceObject到HdmiCntlr的强制转化,通过service成员,赋值见Bind函数 + ... + HimciDeleteHost((struct HimciAdapterHost *)cntlr->priv);//厂商自定义的内存释放函数,这里有HdmiCntlr到HimciAdapterHost的强制转化 + } + ``` + > 所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.I2C.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.I2C.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.I2C.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.I2C.md" index a72456a4deb7d56c1a3c44947481ffb532ff1d34..449173eb7f4b031d44e5d012dc5aa4384b815760 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/03.I2C.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.I2C.md" @@ -1,6 +1,6 @@ --- title: I2C -permalink: /pages/0004010102 +permalink: /pages/0105020204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # I2C @@ -20,10 +20,10 @@ date: 2021-12-30 18:31:31 ## 概述 -I2C\(Inter Integrated Circuit\)总线是由Philips公司开发的一种简单、双向二线制同步串行总线,在HDF框架中,I2C模块接口适配模式采用统一服务模式,这需要一个设备服务来作为I2C模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如I2C可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 +I2C(Inter Integrated Circuit)总线是由Philips公司开发的一种简单、双向二线制同步串行总线,在HDF框架中,I2C模块接口适配模式采用统一服务模式,这需要一个设备服务来作为I2C模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如I2C可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 **图 1** I2C统一服务模式结构图 -![](/images/device-dev/driver/figures/I2C统一服务模式结构图.png "I2C统一服务模式结构图") +![](/images/device-dev/driver/figures/统一服务模式结构图.png "I2C统一服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.I3C.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.I3C.md" new file mode 100644 index 0000000000000000000000000000000000000000..d62e88259d479a3335548a14226407a6b6be5282 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.I3C.md" @@ -0,0 +1,423 @@ +--- +title: I3C +permalink: /pages/0105020205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:45 +--- +# I3C + +- [概述](#1) +- [开发步骤](#2) +- [开发实例](#3) + +## 概述 + +I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。在HDF框架中,I3C模块接口适配模式采用统一服务模式,这需要一个设备服务来作为I3C模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如I3C可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 + +![image1](/images/device-dev/driver/figures/统一服务模式结构图.png) + +## 开发步骤 + +I3C模块适配的四个环节是实例化驱动入口、配置属性文件、实例化I3C控制器对象以及注册中断处理子程序。 + +1. **实例化驱动入口:** + - 实例化HdfDriverEntry结构体成员。 + - 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 + +2. **配置属性文件:** + + - 在device_info.hcs文件中添加deviceNode描述。 + - 【可选】添加i3c_config.hcs器件属性文件。 + +3. **实例化I3C控制器对象:** + + - 初始化I3cCntlr成员。 + - 实例化I3cCntlr成员I3cMethod方法集合,其定义和成员函数说明见下文。 + +4. **注册中断处理子程序:** + 为控制器注册中断处理程序,实现设备热接入和IBI(带内中断)功能。 + + I3cMethod定义: + ```c + struct I3cMethod { + int32_t (*sendCccCmd)(struct I3cCntlr *cntlr, struct I3cCccCmd *ccc); + int32_t (*transfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); + int32_t (*i2cTransfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); + int32_t (*setConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); + int32_t (*getConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); + int32_t (*requestIbi)(struct I3cDevice *dev); + void (*freeIbi)(struct I3cDevice *dev); + }; + ``` + + 表1 I3cMethod结构体成员的回调函数功能说明 + + |函数成员|入参|出参|返回值|功能| + |-|-|-|-|-| + |sendCccCmd|**cntlr**: 结构体指针,核心层I3C控制器;
**ccc**:传入的通用命令代码结构体指针;|**ccc**:传出的通用命令代码结构体指针;|HDF_STATUS相关状态|发送CCC(Common command Code,即通用命令代码)| + |Transfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I3C模式传递用户消息| + |i2cTransfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I2C模式传递用户消息| + |setConfig|**cntlr**: 结构体指针,核心层I3C控制器;
**config**: 控制器配置参数|无|HDF_STATUS相关状态|设置I3C控制器配置参数| + |getConfig|**cntlr**: 结构体指针,核心层I3C控制器;|**config**: 控制器配置参数|HDF_STATUS相关状态|获取I3C控制器配置参数| + |requestIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|为I3C设备请求IBI(In-Bind Interrupt,即带内中断)| + |freeIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|释放IBI| + +## 开发实例 + +1. 驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 + + 一般在加载驱动时HDF会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。 + + I3C驱动入口参考: + + > I3C模块这种类型的控制器会出现很多个控制器挂接的情况,因而在HDF框架中首先会为这类型的控制器创建一个管理器对象,并同时对外发布一个管理器服务来统一处理外部访问。这样,用户需要打开某个控制器时,会先获取到管理器服务,然后管理器服务根据用户指定参数查找到指定控制器。 + > + > I3C管理器服务的驱动由核心层实现,**厂商不需要关注这部分内容的实现,但在实现Init函数的时候需要调用核心层的I3cCntlrAdd函数,它会实现相应功能。** + + ```c + static struct HdfDriverEntry g_virtualI3cDriverEntry = { + .moduleVersion = 1, + .Init = VirtualI3cInit, + .Release = VirtualI3cRelease, + .moduleName = "virtual_i3c_driver",//【必要且与 HCS 里面的名字匹配】 + }; + HDF_INIT(g_virtualI3cDriverEntry); //调用HDF_INIT将驱动入口注册到HDF框架中 + + /* 核心层i3c_core.c管理器服务的驱动入口 */ + struct HdfDriverEntry g_i3cManagerEntry = { + .moduleVersion = 1, + .Init = I3cManagerInit, + .Release = I3cManagerRelease, + .moduleName = "HDF_PLATFORM_I3C_MANAGER",//这与device_info文件中device0对应 + }; + HDF_INIT(g_i3cManagerEntry); + ``` + +2. 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在i3c_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层I3cCntlr相关成员的默认值或限制范围有密切关系。 + + **统一服务模式**的特点是device_info文件中第一个设备节点必须为I3C管理器,其各项参数必须如下设置: + + |成员名|值| + |-|-| + |moduleName |HDF_PLATFORM_I3C_MANAGER| + |serviceName|无(预留)| + |policy|0| + |cntlrMatchAttr| 无(预留)| + + 从第二个节点开始配置具体I3C控制器信息,此节点并不表示某一路I3C控制器,而是代表一个资源性质设备,用于描述一类I3C控制器的信息。本例只有一个I3C控制器,如有多个控制器,则需要在device_info文件增加deviceNode信息,以及在i3c_config文件中增加对应的器件属性。 + + - device_info.hcs 配置参考 + + ```c + root { + device_i3c :: device { + device0 :: deviceNode { + policy = 0; + priority = 52; + permission = 0644; + serviceName = "HDF_PLATFORM_I3C_MANAGER"; + moduleName = "HDF_PLATFORM_I3C_MANAGER"; + } + } + i3c_virtual :: deviceNode { + policy = 0; // 等于0,不需要发布服务 + priority = 56; // 驱动启动优先级 + permission = 0644; // 驱动创建设备节点权限 + moduleName = "virtual_i3c_driver"; //【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致; + serviceName = "VIRTUAL_I3C_DRIVER"; //【必要】驱动对外发布服务的名称,必须唯一 + deviceMatchAttr = "virtual_i3c"; //【必要】用于配置控制器私有数据,要与i3c_config.hcs中对应控制器保持一致 + } // 具体的控制器信息在 i3c_config.hcs 中 + } + ``` + + - i3c_config.hcs 配置参考 + + ```c + root { + platform { + i3c_config { + match_attr = "virtual_i3c"; //【必要】需要和device_info.hcs中的deviceMatchAttr值一致 + template i3c_controller { // 模板公共参数,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省 + busId = 0; //【必要】i3c总线号 + busMode = 0x0; // 总线模式,0x0:纯净; 0x1:混合高速; 0x2:混合受限; 0x3: 混合低速; + regBasePhy = 0x120b0000; //【必要】物理基地址 + regSize = 0xd1; //【必要】寄存器位宽 + IrqNum = 20; //【必要】中断号 + i3cMaxRate = 12900000; //【可选】i3c模式最大时钟速率 + i3cRate = 12500000; //【可选】i3c模式时钟速率 + i2cFmRate = 1000000; //【可选】i2c FM模式时钟速率 + i2cFmPlusRate = 400000; //【可选】i2c FM+模式时钟速率 + } + controller_0 :: i3c_controller { + busId = 18; + IrqNum = 20; + } + } + } + } + ``` + +3. 配置属性文件完成后,要以核心层I3cCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化I3cCntlr成员I3cMethod(让用户可以通过接口来调用驱动底层函数)。 + + 此步骤需要通过实现HdfDriverEntry成员函数(Bind,Init,Release)来完成。 + + - 自定义结构体参考 + + > 从驱动的角度看,自定义结构体是参数和数据的载体,而且i3c_config.hcs文件中的数值会被HDF读入通过DeviceResourceIface来初始化结构体成员,其中一些重要数值也会传递给核心层I3cCntlr对象,例如设备号、总线号等。 + + ```c + struct VirtualI3cCntlr { + struct I3cCntlr cntlr; //【必要】是核心层控制对象,具体描述见下面 + volatile unsigned char *regBase;//【必要】寄存器基地址 + uint32_t regBasePhy; //【必要】寄存器物理基地址 + uint32_t regSize; //【必要】寄存器位宽 + uint16_t busId; //【必要】设备号 + uint16_t busMode; + uint16_t IrqNum; + uint32_t i3cMaxRate; + uint32_t i3cRate; + uint32_t i2cFmRate; + uint32_t i2cFmPlusRate; + }; + + /* I3cCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值 */ + struct I3cCntlr { + OsalSpinlock lock; + void *owner; + int16_t busId; + struct I3cConfig config; + uint16_t addrSlot[(I3C_ADDR_MAX + 1) / ADDRS_PER_UINT16]; + struct I3cIbiInfo *ibiSlot[I3C_IBI_MAX]; + const struct I3cMethod *ops; + const struct I3cLockMethod *lockOps; + void *priv; + }; + ``` + + > **【重要】** I3cCntlr成员回调函数结构体I3cMethod的实例化,I3cLockMethod回调函数结构体本例未实现,若要实例化,可参考I2C驱动开发,其他成员在Init函数中初始化 + + + - **init函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + > + > **返回值:** + > HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + + |状态(值)|问题描述| + |:-|:-:| + |HDF_ERR_INVALID_OBJECT|控制器对象非法| + |HDF_ERR_INVALID_PARAM |参数非法| + |HDF_ERR_MALLOC_FAIL |内存分配失败| + |HDF_ERR_IO |I/O 错误| + |HDF_SUCCESS |传输成功| + |HDF_FAILURE |传输失败| + + > **函数说明:** + > 初始化自定义结构体对象,初始化I3cCntlr成员,调用核心层I3cCntlrAdd函数。 + + ```c + static int32_t VirtualI3cParseAndInit(struct HdfDeviceObject *device, const struct DeviceResourceNode *node) + { + int32_t ret; + struct VirtualI3cCntlr *virtual = NULL; //【必要】自定义结构体对象 + (void)device; + + virtual = (struct VirtualI3cCntlr *)OsalMemCalloc(sizeof(*virtual)); //【必要】内存分配 + if (virtual == NULL) { + HDF_LOGE("%s: Malloc virtual fail!", __func__); + return HDF_ERR_MALLOC_FAIL; + } + + ret = VirtualI3cReadDrs(virtual, node); //【必要】将i3c_config文件的默认值填充到结构体中 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Read drs fail! ret:%d", __func__, ret); + goto __ERR__; + } + ... + virtual->regBase = OsalIoRemap(virtual->regBasePhy, virtual->regSize);//【必要】地址映射 + ret = OsalRegisterIrq(hi35xx->softIrqNum, OSAL_IRQF_TRIGGER_NONE, I3cIbiHandle, "I3C", virtual); //【必要】注册中断程序 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: register irq failed!", __func__); + return ret; + } + ... + VirtualI3cCntlrInit(virtual); //【必要】I3C设备的初始化 + virtual->cntlr.priv = (void *)node; //【必要】存储设备属性 + virtual->cntlr.busId = virtual->busId; //【必要】初始化I3cCntlr成员 + virtual->cntlr.ops = &g_method; //【必要】I3cMethod的实例化对象的挂载 + (void)OsalSpinInit(&virtual->spin); + ret = I3cCntlrAdd(&virtual->cntlr); //【必要且重要】调用此函数将控制器添加至核心,返回成功信号后驱动才完全接入平台核心层 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: add i3c controller failed! ret = %d", __func__, ret); + (void)OsalSpinDestroy(&virtual->spin); + goto __ERR__; + } + + return HDF_SUCCESS; + __ERR__: //若控制器添加失败,需要执行去初始化相关函数 + if (virtual != NULL) { + OsalMemFree(virtual); + virtual = NULL; + } + + return ret; + } + + static int32_t VirtualI3cInit(struct HdfDeviceObject *device) + { + int32_t ret; + const struct DeviceResourceNode *childNode = NULL; + + if (device == NULL || device->property == NULL) { + HDF_LOGE("%s: device or property is NULL", __func__); + return HDF_ERR_INVALID_OBJECT; + } + + DEV_RES_NODE_FOR_EACH_CHILD_NODE(device->property, childNode) { + ret = VirtualI3cParseAndInit(device, childNode); + if (ret != HDF_SUCCESS) { + break; + } + } + + return ret; + } + ``` + + - **Release 函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 。 + > + > **返回值:** + > 无。 + > + > **函数说明:** + > 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 + + ```c + static void VirtualI3cRemoveByNode(const struct DeviceResourceNode *node) + { + int32_t ret; + int16_t busId; + struct I3cCntlr *cntlr = NULL; + struct VirtualI3cCntlr *virtual = NULL; + struct DeviceResourceIface *drsOps = NULL; + + drsOps = DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE); + if (drsOps == NULL || drsOps->GetUint32 == NULL) { + HDF_LOGE("%s: invalid drs ops fail!", __func__); + return; + } + + ret = drsOps->GetUint16(node, "busId", (uint16_t *)&busId, 0); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: read busId fail!", __func__); + return; + } + ... + /* 可以调用I3cCntlrGet函数通过设备的cntlrNum获取I3cCntlr对象, 以及调用I3cCntlrRemove函数来释放I3cCntlr对象的内容 */ + cntlr = I3cCntlrGet(busId); + if (cntlr != NULL && cntlr->priv == node) { + I3cCntlrPut(cntlr); + I3cCntlrRemove(cntlr); //【必要】主要是从管理器驱动那边移除I3cCntlr对象 + virtual = (struct VirtualI3cCntlr *)cntlr;//【必要】通过强制转换获取自定义的对象并进行release操作 + (void)OsalSpinDestroy(&virtual->spin); + OsalMemFree(virtual); + } + return; + } + + static void VirtualI3cRelease(struct HdfDeviceObject *device) + { + const struct DeviceResourceNode *childNode = NULL; + + HDF_LOGI("%s: enter", __func__); + + if (device == NULL || device->property == NULL) { + HDF_LOGE("%s: device or property is NULL", __func__); + return; + } + ... + //遍历、解析i3c_config.hcs中的所有配置节点,并分别进行release操作 + DEV_RES_NODE_FOR_EACH_CHILD_NODE(device->property, childNode) { + VirtualI3cRemoveByNode(childNode); //函数定义如上 + } + } + ``` + +4. 最后一步,实现中断处理程序,在中断处理程序中通过判断中断产生的地址,实现热接入、IBI等操作。 + + ```c + static int32_t VirtualI3cReservedAddrWorker(struct VirtualI3cCntlr *virtual, uint16_t addr) + { + (void)virtual; + switch (addr) { + case I3C_HOT_JOIN_ADDR: + VirtualI3cHotJoin(virtual); + break; + case I3C_RESERVED_ADDR_7H3E: + case I3C_RESERVED_ADDR_7H5E: + case I3C_RESERVED_ADDR_7H6E: + case I3C_RESERVED_ADDR_7H76: + case I3C_RESERVED_ADDR_7H7A: + case I3C_RESERVED_ADDR_7H7C: + case I3C_RESERVED_ADDR_7H7F: + /* 广播地址单比特错误的所有情形 */ + HDF_LOGW("%s: broadcast Address single bit error!", __func__); + break; + default: + HDF_LOGD("%s: Reserved address which is not supported!", __func__); + break; + } + + return HDF_SUCCESS; + } + ``` + + ```c + static int32_t I3cIbiHandle(uint32_t irq, void *data) + { + struct VirtualI3cCntlr *virtual = NULL; + struct I3cDevice *device = NULL; + uint16_t ibiAddr; + char *testStr = "Hello I3C!"; + + (void)irq; + if (data == NULL) { + HDF_LOGW("%s: data is NULL!", __func__); + return HDF_ERR_INVALID_PARAM; + } + virtual = (struct VirtualI3cCntlr *)data; + /* 【必要】获取产生中断的地址,使用CHECK_RESERVED_ADDR宏判断该地址是否为I3C保留地址 */ + ibiAddr = VirtualI3cGetIbiAddr(); + if (CHECK_RESERVED_ADDR(ibiAddr) == I3C_ADDR_RESERVED) { + HDF_LOGD("%s: Calling VirtualI3cResAddrWorker...", __func__); + return VirtualI3cReservedAddrWorker(virtual, ibiAddr); + } else { + HDF_LOGD("%s: Calling I3cCntlrIbiCallback...", __func__); + device = GetDeviceByAddr(&virtual->cntlr, ibiAddr); + if (device == NULL) { + HDF_LOGE("func:%s device is NULL!",__func__); + return HDF_ERR_MALLOC_FAIL; + } + if (device->ibi->payload > VIRTUAL_I3C_TEST_STR_LEN) { + /* 将字符串"Hello I3C!"放入IBI缓冲区内 */ + *device->ibi->data = *testStr; + } + /* 根据产生IBI的I3C设备调用IBI回调函数 */ + return I3cCntlrIbiCallback(device); + } + + return HDF_SUCCESS; + } + ``` \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.MIPI-CSI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.MIPI-CSI.md" new file mode 100644 index 0000000000000000000000000000000000000000..d5e8b36acabdc0ac73d367367dee181580c2e2f0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.MIPI-CSI.md" @@ -0,0 +1,327 @@ +--- +title: MIPI-CSI +permalink: /pages/0105020206 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:45 +--- +# MIPI-CSI + +- [概述](#section1_MIPI_CSIDevelop) +- [接口说明](#section2_MIPI_CSIDevelop) +- [开发步骤](#section3_MIPI_CSIDevelop) +- [开发实例](#section4_MIPI_CSIDevelop) + +## 概述 + +CSI(Camera Serial Interface)是由MIPI(Mobile Industry Processor Interface )联盟下Camera工作组指定的接口标准。在HDF框架中,MIPI-CSI的接口适配模式采用无服务模式,用于不需要在用户态提供API的设备类型,或者没有用户态和内核区分的OS系统,MIPI-CSI的接口关联方式是DevHandle直接指向设备对象内核态地址(DevHandle是一个void类型指针)。 + +图 1 无服务模式结构图 +![image1](/images/device-dev/driver/figures/无服务模式结构图.png) + +## 接口说明 + +MipiCsiCntlrMethod定义 + +```c +struct MipiCsiCntlrMethod { + int32_t (*setComboDevAttr)(struct MipiCsiCntlr *cntlr, ComboDevAttr *pAttr); + int32_t (*setPhyCmvmode)(struct MipiCsiCntlr *cntlr, uint8_t devno, PhyCmvMode cmvMode); + int32_t (*setExtDataType)(struct MipiCsiCntlr *cntlr, ExtDataType* dataType); + int32_t (*setHsMode)(struct MipiCsiCntlr *cntlr, LaneDivideMode laneDivideMode); + int32_t (*enableClock)(struct MipiCsiCntlr *cntlr, uint8_t comboDev); + int32_t (*disableClock)(struct MipiCsiCntlr *cntlr, uint8_t comboDev); + int32_t (*resetRx)(struct MipiCsiCntlr *cntlr, uint8_t comboDev); + int32_t (*unresetRx)(struct MipiCsiCntlr *cntlr, uint8_t comboDev); + int32_t (*enableSensorClock)(struct MipiCsiCntlr *cntlr, uint8_t snsClkSource); + int32_t (*disableSensorClock)(struct MipiCsiCntlr *cntlr, uint8_t snsClkSource); + int32_t (*resetSensor)(struct MipiCsiCntlr *cntlr, uint8_t snsResetSource); + int32_t (*unresetSensor)(struct MipiCsiCntlr *cntlr, uint8_t snsResetSource); +}; +``` +表1 MipiCsiCntlrMethod成员的回调函数功能说明 +| 成员函数 | 入参 | 出参 | 返回状态 | 功能 | +| ------------------ | ------------------------------------------------------------ | ---- | ------------------ | -------------------------- | +| setComboDevAttr | **cntlr**:结构体指针,MipiCsi控制器 ;
**pAttr**:结构体指针,MIPI-CSI相应配置结构体指针 | 无 | HDF_STATUS相关状态 | 写入MIPI-CSI配置 | +| setPhyCmvmode | **cntlr**:结构体指针,MipiCsi控制器 ;
**devno**:uint8_t,设备编号;
**cmvMode**:枚举类型,共模电压模式参数 | 无 | HDF_STATUS相关状态 | 设置共模电压模式 | +| setExtDataType | **cntlr**:结构体指针,MipiCsi控制器 ;
**dataType**:结构体指针,定义YUV和原始数据格式以及位深度 | 无 | HDF_STATUS相关状态 | 设置YUV和RAW数据格式和位深 | +| setHsMode | **cntlr**:结构体指针,MipiCsi控制器 ;
**laneDivideMode**:枚举类型,lane模式参数 | 无 | HDF_STATUS相关状态 | 设置MIPI RX的Lane分布 | +| enableClock | **cntlr**:结构体指针,MipiCsi控制器 ;
**comboDev**:uint8_t,通路序号 | 无 | HDF_STATUS相关状态 | 使能mipi的时钟 | +| disableClock | **cntlr**:结构体指针,MipiCsi控制器 ;
**comboDev**:uint8_t,通路序号 | 无 | HDF_STATUS相关状态 | 关闭mipi的时钟 | +| resetRx | **cntlr**:结构体指针,MipiCsi控制器 ;
**comboDev**:uint8_t,通路序号 | 无 | HDF_STATUS相关状态 | 复位MIPI RX | +| unresetRx | **cntlr**:结构体指针,MipiCsi控制器 ;
**comboDev**:uint8_t,通路序号 | 无 | HDF_STATUS相关状态 | 撤销复位MIPI RX | +| enableSensorClock | **cntlr**:结构体指针,MipiCsi控制器 ;
**snsClkSource**:uint8_t,传感器的时钟信号线号 | 无 | HDF_STATUS相关状态 | 使能mipi上的Sensor时钟 | +| disableSensorClock | **cntlr**:结构体指针,MipiCsi控制器 ;
**snsClkSource**:uint8_t,传感器的时钟信号线号 | 无 | HDF_STATUS相关状态 | 关闭mipi上的Sensor时钟 | +| resetSensor | **cntlr**:结构体指针,MipiCsi控制器 ;
**snsClkSource**:uint8_t,传感器的时钟信号线号 | 无 | HDF_STATUS相关状态 | 复位Sensor | +| unresetSensor | **cntlr**:结构体指针,MipiCsi控制器 ;
**snsClkSource**:uint8_t,传感器的时钟信号线号 | 无 | HDF_STATUS相关状态 | 撤销复位Sensor | + +## 开发步骤 + +MIPI-CSI模块适配的三个环节是配置属性文件、实例化驱动入、以及实例化核心层接口函数。 + +1. **实例化驱动入口:** + - 实例化HdfDriverEntry结构体成员。 + - 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 + +2. **配置属性文件:** + + - 在device_info.hcs文件中添加deviceNode描述。 + - 【可选】添加mipicsi_config.hcs器件属性文件。 + +3. **实例化MIPICSI控制器对象:** + - 初始化MipiCsiCntlr成员。 + - 实例化MipiCsiCntlr成员MipiCsiCntlrMethod。 + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >实例化MipiCsiCntlr成员MipiCsiCntlrMethod,其定义和成员说明见[接口说明](#section2_MIPI_CSIDevelop)。 + +4. **驱动调试:** + - 【可选】针对新增驱动程序,建议验证驱动基本功能,例如挂载后的信息反馈,数据传输的成功与否等。 + + +## 开发实例 + +下方将以mipi_rx_hi35xx.c为示例,展示需要厂商提供哪些内容来完整实现设备功能。 + + +1. 一般来说,驱动开发首先需要在 busxx_config.hcs 中配置器件属性,并在device_info.hcs文件中添加deviceNode描述。器件属性值与核心层MipiCsiCntlr 成员的默认值或限制范围有密切关系,deviceNode信息与驱动入口注册相关。 + + **本例中MIPI控制器自身属性在源文件文件中,如有厂商需要,则在device_info文件的deviceNode增加deviceMatchAttr信息,相应增加mipicsi_config.hcs文件**。 + +- device_info.hcs 配置参考 + + ```c + root { + device_info { + match_attr = "hdf_manager"; + platform :: host { + hostName = "platform_host"; + priority = 50; + device_mipi_csi:: device { + device0 :: deviceNode { + policy = 0; + priority = 160; + permission = 0644; + moduleName = "HDF_MIPI_RX"; //【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致; + serviceName = "HDF_MIPI_RX"; //【必要且唯一】驱动对外发布服务的名称 + } + } + } + } + } + ``` + +2. 完成器件属性文件的配置之后,下一步请实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HdfDriverEntry结构体的函数指针成员会被厂商操作函数填充,HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组,方便调用。 + + 一般在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。 + +- MIPI-CSI驱动入口参考 + + ```c + struct HdfDriverEntry g_mipiCsiDriverEntry = { + .moduleVersion = 1, + .Init = Hi35xxMipiCsiInit, //见Init参考 + .Release = Hi35xxMipiCsiRelease, //见Release参考 + .moduleName = "HDF_MIPI_RX", //【必要】需要与device_info.hcs 中保持一致。 + }; + HDF_INIT(g_mipiCsiDriverEntry); //调用HDF_INIT将驱动入口注册到HDF框架中 + ``` + +3. 完成驱动入口注册之后,最后一步就是以核心层MipiCsiCntlr对象的初始化为核心,实现HdfDriverEntry成员函数(Bind,Init,Release)。MipiCsiCntlr对象的初始化包括厂商自定义结构体(用于传递参数和数据)和实例化MipiCsiCntlr成员MipiCsiCntlrMethod(让用户可以通过接口来调用驱动底层函数)。 + +- 自定义结构体参考 + + > 从驱动的角度看,自定义结构体是参数和数据的载体,一般来说,config文件中的数值也会用来初始化结构体成员,本例的mipicsi器件属性在源文件中,故基本成员结构与MipiCsiCntlr无太大差异。 + + ```c + typedef struct { + /** 数据类型:8/10/12/14/16位 */ + DataType inputDataType; + /** MIPI波分复用模式 */ + MipiWdrMode wdrMode; + /** laneId: -1 - 禁用 */ + short laneId[MIPI_LANE_NUM]; + + union { + /** 用于 HI_MIPI_WDR_MODE_DT */ + short dataType[WDR_VC_NUM]; + }; + } MipiDevAttr; + + typedef struct { + /** 设备号 */ + uint8_t devno; + /** 输入模式: MIPI/LVDS/SUBLVDS/HISPI/DC */ + InputMode inputMode; + MipiDataRate dataRate; + /** MIPI Rx设备裁剪区域(与原始传感器输入图像大小相对应) */ + ImgRect imgRect; + + union { + MipiDevAttr mipiAttr; + LvdsDevAttr lvdsAttr; + }; + } ComboDevAttr; + + //MipiCsiCntlr是核心层控制器结构体,其中的成员在Init函数中会被赋值 + struct MipiCsiCntlr { + /** 当驱动程序绑定到HDF框架时,将发送此控制器提供的服务 */ + struct IDeviceIoService service; + /** 当驱动程序绑定到HDF框架时,将传入设备端指针 */ + struct HdfDeviceObject *device; + /** 设备号 */ + unsigned int devNo; + /** 控制器提供的所有接口 */ + struct MipiCsiCntlrMethod *ops; + /** 对于控制器调试的所有接口,如果未实现驱动程序,则需要null */ + struct MipiCsiCntlrDebugMethod *debugs; + /** 控制器上下文参数变量 */ + MipiDevCtx ctx; + /** 访问控制器上下文参数变量时锁定 */ + OsalSpinlock ctxLock; + /** 操作控制器时锁定方法 */ + struct OsalMutex lock; + /** 匿名数据指针,用于存储csi设备结构 */ + void *priv; + }; + ``` + +- **【重要】** MipiCsiCntlr成员回调函数结构体MipiCsiCntlrMethod的实例化,其他成员在Init函数中初始化。 + + ```c + static struct MipiCsiCntlrMethod g_method = { + .setComboDevAttr = Hi35xxSetComboDevAttr, + .setPhyCmvmode = Hi35xxSetPhyCmvmode, + .setExtDataType = Hi35xxSetExtDataType, + .setHsMode = Hi35xxSetHsMode, + .enableClock = Hi35xxEnableClock, + .disableClock = Hi35xxDisableClock, + .resetRx = Hi35xxResetRx, + .unresetRx = Hi35xxUnresetRx, + .enableSensorClock = Hi35xxEnableSensorClock, + .disableSensorClock = Hi35xxDisableSensorClock, + .resetSensor = Hi35xxResetSensor, + .unresetSensor = Hi35xxUnresetSensor + }; + ``` + +- **Init函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + > + > **返回值:** + > HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + > + > | 状态(值) | 问题描述 | + > | :--------------------- | :----------: | + > | HDF_ERR_INVALID_OBJECT | 无效对象 | + > | HDF_ERR_MALLOC_FAIL | 内存分配失败 | + > | HDF_ERR_INVALID_PARAM | 无效参数 | + > | HDF_ERR_IO | I/O 错误 | + > | HDF_SUCCESS | 执行成功 | + > | HDF_FAILURE | 执行失败 | + > + > **函数说明:** + > MipiCsiCntlrMethod的实例化对象的挂载,调用MipiCsiRegisterCntlr,以及其他厂商自定义初始化操作。 + + ```c + static int32_t Hi35xxMipiCsiInit(struct HdfDeviceObject *device) + { + int32_t ret; + + HDF_LOGI("%s: enter!", __func__); + g_mipiCsi.priv = NULL; //g_mipiTx是定义的全局变量 + //static struct MipiCsiCntlr g_mipiCsi = { + //.devNo = 0 + //}; + g_mipiCsi.ops = &g_method; //MipiCsiCntlrMethod的实例化对象的挂载 + #ifdef CONFIG_HI_PROC_SHOW_SUPPORT + g_mipiCsi.debugs = &g_debugMethod; + #endif + ret = MipiCsiRegisterCntlr(&g_mipiCsi, device); //【必要】调用核心层函数和g_mipiTx初始化核心层全局变量 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: [MipiCsiRegisterCntlr] failed!", __func__); + return ret; + } + + ret = MipiRxDrvInit(); //【必要】厂商对设备的初始化,形式不限 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: [MipiRxDrvInit] failed.", __func__); + return ret; + } + #ifdef MIPICSI_VFS_SUPPORT + ret = MipiCsiDevModuleInit(g_mipiCsi.devNo); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: [MipiCsiDevModuleInit] failed!", __func__); + return ret; + } + #endif + + OsalSpinInit(&g_mipiCsi.ctxLock); + HDF_LOGI("%s: load mipi csi driver success!", __func__); + + return ret; + } + + //mipi_dsi_core.c核心层 + int32_t MipiCsiRegisterCntlr(struct MipiCsiCntlr *cntlr, struct HdfDeviceObject *device) + { + ... + //定义的全局变量:static struct MipiCsiHandle g_mipiCsihandle[MAX_CNTLR_CNT]; + if (g_mipiCsihandle[cntlr->devNo].cntlr == NULL) { + (void)OsalMutexInit(&g_mipiCsihandle[cntlr->devNo].lock); + (void)OsalMutexInit(&(cntlr->lock)); + + g_mipiCsihandle[cntlr->devNo].cntlr = cntlr; //初始化MipiCsiHandle成员 + g_mipiCsihandle[cntlr->devNo].priv = NULL; + cntlr->device = device; //使HdfDeviceObject与MipiCsiHandle可以相互转化的前提 + device->service = &(cntlr->service); //使HdfDeviceObject与MipiCsiHandle可以相互转化的前提 + cntlr->priv = NULL; + HDF_LOGI("%s: success.", __func__); + + return HDF_SUCCESS; + } + + HDF_LOGE("%s: cntlr already exists.", __func__); + return HDF_FAILURE; + } + ``` + +- **Release函数参考** + + > **入参:** + > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息。 + > + > **返回值:** + > 无 + > + > **函数说明:** + > 该函数需要在驱动入口结构体中赋值给Release接口,当HDF框架调用Init函数初始化驱动失败时,可以调用Release释放驱动资源,该函数中需包含释放内存和删除控制器等操作。所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 + + ```c + static void Hi35xxMipiCsiRelease(struct HdfDeviceObject *device) + { + struct MipiCsiCntlr *cntlr = NULL; + ... + cntlr = MipiCsiCntlrFromDevice(device); //这里有HdfDeviceObject到MipiCsiCntlr的强制转化 + //return (device == NULL) ? NULL : (struct MipiCsiCntlr *)device->service; + ... + + OsalSpinDestroy(&cntlr->ctxLock); + #ifdef MIPICSI_VFS_SUPPORT + MipiCsiDevModuleExit(cntlr->devNo); + #endif + MipiRxDrvExit(); //【必要】对厂商设备所占资源的释放 + MipiCsiUnregisterCntlr(&g_mipiCsi); //空函数 + g_mipiCsi.priv = NULL; + + HDF_LOGI("%s: unload mipi csi driver success!", __func__); + } + ``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.MIPI-DSI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.MIPI-DSI.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.MIPI-DSI.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.MIPI-DSI.md" index e97f01263729e1d31c3362ecf46cb9f489df515f..ce295a88a78cb3b0306b5886114689bc74473ca1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/04.MIPI-DSI.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.MIPI-DSI.md" @@ -1,6 +1,6 @@ --- title: MIPI-DSI -permalink: /pages/0004010103 +permalink: /pages/0105020207 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # MIPI-DSI @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 DSI(Display Serial Interface)是由移动行业处理器接口联盟(Mobile Industry Processor Interface \(MIPI\) Alliance)制定的规范。在HDF框架中,MIPI-DSI的接口适配模式采用无服务模式,用于不需要在用户态提供API的设备类型,或者没有用户态和内核区分的OS系统,其关联方式是DevHandle直接指向设备对象内核态地址(DevHandle是一个void类型指针)。 **图 1** DSI无服务模式结构图 -![](/images/device-dev/driver/figures/DSI无服务模式结构图.png "DSI无服务模式结构图") +![](/images/device-dev/driver/figures/无服务模式结构图.png "DSI无服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.MMC.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.MMC.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.MMC.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.MMC.md" index 735a2504c1a41615aa8aec416b857ccaded84783..3bdd1e49a3d0b4b68423e38e56c63dd6e98b34b0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/05.MMC.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.MMC.md" @@ -1,6 +1,6 @@ --- title: MMC -permalink: /pages/0004010104 +permalink: /pages/0105020208 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # MMC @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 MMC(MultiMedia Card),即多媒体卡,在HDF框架中,MMC的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** MMC独立服务模式结构图 -![](/images/device-dev/driver/figures/MMC独立服务模式结构图.png "MMC独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "MMC独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.PWM.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.PWM.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.PWM.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.PWM.md" index 9b0014e04c8ed9294e839c2e36f7a4f7beaf5216..557f54cd08a25bf2abfcaa849ea490dc224b3b41 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/06.PWM.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.PWM.md" @@ -1,6 +1,6 @@ --- title: PWM -permalink: /pages/0004010105 +permalink: /pages/0105020209 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:45 --- # PWM @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 PWM(Pulse Width Modulator)即脉冲宽度调节器,在HDF框架中,PWM的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** PWM独立服务模式结构图 -![](/images/device-dev/driver/figures/PWM独立服务模式结构图.png "PWM独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "PWM独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.RTC.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.RTC.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.RTC.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.RTC.md" index b8502ca2b9f75fc2176945dd20132b60b04e38b1..80bcd6e81a9c3bc615f00592ce57b7adceff476d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/07.RTC.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.RTC.md" @@ -1,6 +1,6 @@ --- title: RTC -permalink: /pages/0004010106 +permalink: /pages/010502020a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # RTC @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 RTC\(real-time clock\)为操作系统中的实时时钟设备,在HDF框架中,RTC的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** RTC独立服务模式结构图 -![](/images/device-dev/driver/figures/RTC独立服务模式结构图.png "RTC独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "RTC独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.SDIO.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.SDIO.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.SDIO.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.SDIO.md" index 2e9c63d079a3331083f1886095685d223cba5ece..7d1093221a752820269fa8fbb97143fd0511bd5e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/08.SDIO.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.SDIO.md" @@ -1,6 +1,6 @@ --- title: SDIO -permalink: /pages/0004010107 +permalink: /pages/010502020b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # SDIO @@ -20,10 +20,10 @@ date: 2021-12-30 18:31:31 ## 概述 -SDIO由SD卡发展而来,被统称为mmc(MultiMediaCard),相关技术差别不大,在HDF框架中,SDIO的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 +SDIO由SD卡发展而来,被统称为MMC(MultiMediaCard),相关技术差别不大,在HDF框架中,SDIO的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** SDIO独立服务模式结构图 -![](/images/device-dev/driver/figures/SDIO独立服务模式结构图.png "SDIO独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "SDIO独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.SPI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/12.SPI.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.SPI.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/12.SPI.md" index 0b7eed3036046c0a37c99b54ab33f147a4c12047..0bedd87caf7ae16273214df4be314c523c8ba3a7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/09.SPI.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/12.SPI.md" @@ -1,6 +1,6 @@ --- title: SPI -permalink: /pages/0004010108 +permalink: /pages/010502020c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # SPI @@ -20,10 +20,10 @@ date: 2021-12-30 18:31:31 ## 概述 -SPI是串行外设接口(Serial Peripheral Interface)的缩写,在HDF框架中,SPI的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 +SPI即串行外设接口(Serial Peripheral Interface),在HDF框架中,SPI的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** SPI独立服务模式结构图 -![](/images/device-dev/driver/figures/SPI独立服务模式结构图.png "SPI独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "SPI独立服务模式结构图") ## 接口说明 @@ -54,7 +54,7 @@ struct SpiCntlrMethod {

Transfer

-

cntlr: 结构体指针,核心层spi控制器;msg: 结构体指针,Spi消息;count: uint32_t,消息个数

+

cntlr:结构体指针,核心层spi控制器;
msg:结构体指针,Spi消息;
count:uint32_t,消息个数;

HDF_STATUS相关状态

@@ -63,7 +63,7 @@ struct SpiCntlrMethod {

SetCfg

-

cntlr: 结构体指针,核心层spi控制器;cfg: 结构体指针,Spi属性

+

cntlr;结构体指针,核心层spi控制器;
cfg:结构体指针,Spi属性;

HDF_STATUS相关状态

@@ -72,7 +72,7 @@ struct SpiCntlrMethod {

GetCfg

-

cntlr: 结构体指针,核心层spi控制器;cfg: 结构体指针,Spi属性

+

cntlr:结构体指针,核心层spi控制器;
cfg:结构体指针,Spi属性;

HDF_STATUS相关状态

@@ -81,7 +81,7 @@ struct SpiCntlrMethod {

Open

-

cntlr: 结构体指针,核心层spi控制器;

+

cntlr:结构体指针,核心层spi控制器;

HDF_STATUS相关状态

@@ -90,7 +90,7 @@ struct SpiCntlrMethod {

Close

-

cntlr: 结构体指针,核心层spi控制器;

+

cntlr:结构体指针,核心层spi控制器;

HDF_STATUS相关状态

@@ -298,11 +298,11 @@ SPI模块适配HDF框架的三个环节是配置属性文件,实例化驱动 HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息。 - 返回值**:** + 返回值: HDF\_STATUS相关状态。 - 函数说明**:** + 函数说明: 将 SpiCntlr 对象同 HdfDeviceObject 进行了关联。 @@ -334,9 +334,9 @@ SPI模块适配HDF框架的三个环节是配置属性文件,实例化驱动 HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息。 - 返回值**:** + 返回值: - HDF\_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf\_base.h中HDF\_STATUS 定义)。 + HDF\_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见/drivers/framework/include/utils/hdf\_base.h中HDF\_STATUS 定义)。 **表 2** init函数入参和返回值 @@ -380,7 +380,7 @@ SPI模块适配HDF框架的三个环节是配置属性文件,实例化驱动 - 函数说明**:** + 函数说明: 初始化自定义结构体对象,初始化SpiCntlr成员。 @@ -431,7 +431,7 @@ SPI模块适配HDF框架的三个环节是配置属性文件,实例化驱动 - Release函数参考 - 入参**:** + 入参: HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.UART.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/13.UART.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.UART.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/13.UART.md" index a7c05dfaeeee14d4c80e1dabd2a2073be1ced1e9..6722b9104d73efbf656b6e5fe748709938f59477 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/10.UART.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/13.UART.md" @@ -1,6 +1,6 @@ --- title: UART -permalink: /pages/0004010109 +permalink: /pages/010502020d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # UART @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的缩写,在HDF框架中,UART的接口适配模式采用独立服务模式。在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** UART独立服务模式结构图 -![](/images/device-dev/driver/figures/UART独立服务模式结构图.png "UART独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "UART独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.WatchDog.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/14.WatchDog.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.WatchDog.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/14.WatchDog.md" index 8a4bc0188025efb3f38576a3295d97a734cdca34..27c7c5456ed8d1a473f3c0aa35ea4a5463c10d3e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/11.WatchDog.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221/14.WatchDog.md" @@ -1,6 +1,6 @@ --- title: WatchDog -permalink: /pages/000401010a +permalink: /pages/010502020e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # WatchDog @@ -23,7 +23,7 @@ date: 2021-12-30 18:31:31 看门狗(Watchdog),又叫看门狗计时器(Watchdog timer),是一种硬件的计时设备,在HDF框架中,Watchdog接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。 **图 1** Watchdog独立服务模式结构图 -![](/images/device-dev/driver/figures/Watchdog独立服务模式结构图.png "Watchdog独立服务模式结构图") +![](/images/device-dev/driver/figures/独立服务模式结构图.png "Watchdog独立服务模式结构图") ## 接口说明 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.ADC.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.ADC.md" new file mode 100644 index 0000000000000000000000000000000000000000..14b1f7e7500fca73b1e8c6dd98b8377ebd7f1f0c --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.ADC.md" @@ -0,0 +1,278 @@ +--- +title: ADC +permalink: /pages/0105020301 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# ADC + +- [概述](#section1) +- [接口说明](#section2) +- [使用指导](#section3) + - [使用流程](#section4) + - [打开ADC设备](#section5) + - [读取AD转换结果](#section6) + - [关闭ADC设备](#section7) + +- [使用实例](#section8) + +## 概述 + +- ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备。 + +- ADC接口定义了完成ADC传输的通用方法集合,包括: + - ADC设备管理:打开或关闭ADC设备。 + - ADC读取转换结果:读取AD转换结果。 + + **图 1** ADC物理连线示意图 + ![](/images/device-dev/driver/figures/ADC物理连线示意图.png "ADC物理连线示意图") + +## 接口说明 + +**表 1** ADC驱动API接口功能介绍 + + + + + + + + + + + + + + + + + + + +

功能分类

+

接口名

+

描述

+

ADC设备管理接口

+

AdcOpen

+
打开ADC设备

+

AdcClose

+

关闭ADC设备

+

ADC读取转换结果接口

+

AdcRead

+

读取AD转换结果值

+
+ +## 使用指导 + +### 使用流程 + +使用ADC设备的一般流程如[图2](#fig2)所示。 + + **图 2** ADC使用流程图 +![](/images/device-dev/driver/figures/ADC使用流程图.png "ADC使用流程图") + +### 打开ADC设备 + +在进行AD转换之前,首先要调用AdcOpen打开ADC设备。 + +```c +DevHandle AdcOpen(int16_t number); +``` + +**表 2** AdcOpen参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

number

+

ADC设备号

+

返回值

+

返回值描述

+

NULL

+

打开ADC设备失败

+

设备句柄

+

打开的ADC设备句柄

+
+ +假设系统中存在2个ADC设备,编号从0到1,那么我们现在打开1号设备。 + +```c +DevHandle adcHandle = NULL; /* ADC设备句柄 / + +/* 打开ADC设备 */ +adcHandle = AdcOpen(1); +if (adcHandle == NULL) { + HDF_LOGE("AdcOpen: failed\n"); + return; +} +``` + +### 读取AD转换结果 + +```c +int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val); +``` + +**表 3** AdcRead参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

ADC设备句柄

+

channel

+

ADC设备通道号

+

val

+

AD转换结果

+

返回值

+

返回值描述

+

0

+

读取成功

+

负数

+

读取失败

+
+ +### 关闭ADC设备 + +ADC通信完成之后,需要关闭ADC设备。 +```c +void AdcClose(DevHandle handle); +``` +**表 4** AdcClose参数和返回值描述 + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

ADC设备句柄

+

返回值

+

返回值描述

+

+

+
+ +关闭ADC设备示例: + +```c +AdcClose(adcHandle); /* 关闭ADC设备 */ +``` + +## 使用实例 + +本例程以操作开发板上的ADC设备为例,详细展示ADC接口的完整使用流程。 + +本例拟对Hi3516DV300某开发板上ADC设备进行简单的读取操作,基本硬件信息如下: + +- SOC:hi3516dv300。 + +- 原理图信息:电位器挂接在0号ADC设备1通道下。 + +本例程对测试ADC进行连续读取操作,测试ADC功能是否正常。 + +示例如下: + +```c +#include "adc_if.h" /* ADC标准接口头文件 */ +#include "hdf_log.h" /* 标准日志打印头文件 */ + +/* 设备号0,通道号1 */ +#define ADC_DEVICE_NUM 0 +#define ADC_CHANNEL_NUM 1 + +/* ADC例程总入口 */ +static int32_t TestCaseAdc(void) +{ + int32_t i; + int32_t ret; + DevHandle adcHandle; + uint32_t Readbuf[30] = {0}; + + /* 打开ADC设备 */ + adcHandle = AdcOpen(ADC_DEVICE_NUM); + if (adcHandle == NULL) { + HDF_LOGE("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM); + return -1; + } + + /* 连续进行30次AD转换并读取转换结果 */ + for (i = 0; i < 30; i++) { + ret = AdcRead(adcHandle, ADC_CHANNEL_NUM, &Readbuf[i]); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: tp ADC write reg fail!:%d", __func__, ret); + AdcClose(adcHandle); + return -1; + } + } + HDF_LOGI("%s: ADC read successful!", __func__); + + /* 访问完毕关闭ADC设备 */ + AdcClose(adcHandle); + + return 0; +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.GPIO.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.GPIO.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.GPIO.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.GPIO.md" index 9eee61b7348fbd0241cf231194a5738af9c64b47..86110e1de8e49e9ba4a9986a2066272544f81051 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/01.GPIO.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.GPIO.md" @@ -1,6 +1,6 @@ --- title: GPIO -permalink: /pages/0004010200 +permalink: /pages/0105020302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # GPIO diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.HDMI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.HDMI.md" new file mode 100644 index 0000000000000000000000000000000000000000..96638af4cd3f8e32cbfa0d5a9ec309eeccddf17d --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.HDMI.md" @@ -0,0 +1,1016 @@ +--- +title: HDMI +permalink: /pages/0105020303 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# HDMI + +- [概述](#section1) +- [接口说明](#section2) +- [使用指导](#section3) + - [使用流程](#section4) + - [打开HDMI控制器](#section5) + - [注册热插拔回调函数](#section6) + - [读取EDID](#section7) + - [设置属性](#section8) + - [启动HDMI传输](#section10) + - [停止HDMI传输](#section11) + - [注销热插拔回调函数](#section12) + - [关闭HDMI控制器](#section13) + +- [使用实例](#section14) + +## 概述 + +- HDMI(High-Definition Multiface Interface)是Hitachi, Panasonic, Philips, SiliconImage, Sony, Thomson, Toshiba共同发布的一款音视频传输协议。 +- HDMI以主从方式工作,通常有一个Source端和一个Sink端。 +- HDMI接口定义了完成HDMI传输的通用方法集合,包括: + + - HDMI控制器管理:打开或关闭HDMI控制器 + - HDMI启动/停止传输:启动或停止HDMI传输 + - HDMI控制器设置:设置音频、视频及HDR属性,设置色彩深度、声音图像消隐等 + - HDMI读取EDID:读取Sink端原始的EDID数据 + - HDMI热插拔:注册/注销热插拔回调函数 +- HDMI物理连接如[图1](#fig1)所示: + **图 1** HDMI物理连线示意图 + ![](/images/device-dev/driver/figures/HDMI物理连线示意图.png "HDMI物理连线示意图") + +## 接口说明 + +**表 1** HDMI驱动API接口功能介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

功能分类

+

接口名

+

描述

+

HDMI控制器管理接口

+

HdmiOpen

+
打开HDMI控制器

+

HdmiClose

+

关闭HDMI控制器

+

启动/停止HDMI传输接口

+

HdmiStart

+
启动HDMI传输

+

HdmiStop

+

停止HDMI传输

+

HDMI控制器设置接口

+

HdmiAvmuteSet

+
HDMI声音图像消隐设置

+

HdmiDeepColorSet

+

设置色彩深度

+

HdmiDeepColorGet

+

获取色彩深度

+

HdmiSetVideoAttribute

+

设置视频属性

+

HdmiSetAudioAttribute

+

设置音频属性

+

HdmiSetHdrAttribute

+

设置HDR属性

+

EDID获取接口

+

HdmiReadSinkEdid

+
HDMI读取Sink端原始EDID数据

+

HDMI热插拔相关接口

+

HdmiRegisterHpdCallbackFunc

+
注册HDMI热插拔检测回调函数

+

HdmiUnregisterHpdCallbackFunc

+

注销HDMI热插拔检测回调函数

+
+ +## 使用指导 + +### 使用流程 + +使用HDMI设备的一般流程如[图2](#fig2)所示。 + +**图 2** HDMI设备使用流程图 +![](/images/device-dev/driver/figures/HDMI使用流程图.png "HDMI使用流程图") + +### 打开HDMI控制器 + +在进行HDMI通信前,首先要调用HdmiOpen打开HDMI控制器。 + +```c +DevHandle HdmiOpen(int16_t number); +``` + +**表 2** HdmiOpen参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

number

+

HDMI控制器号

+

返回值

+

返回值描述

+

NULL

+

打开HDMI控制器失败

+

控制器句柄

+

打开的HDMI控制器句柄

+
+ +假设系统中存在2个HDMI控制器,编号从0到1,那么我们现在获取0号控制器: + +```c +DevHandle hdmiHandle = NULL; /* HDMI控制器句柄 / + +/* 打开HDMI控制器 */ +hdmiHandle = HdmiOpen(0); +if (hdmiHandle == NULL) { + HDF_LOGE("HdmiOpen: failed\n"); + return; +} +``` + +### 注册热插拔检测回调函数 + +```c +int32_t HdmiRegisterHpdCallbackFunc(DevHandle handle, struct HdmiHpdCallbackInfo *callback); +``` + +**表 3** HdmiRegisterHpdCallbackFunc参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

callback

+

热插拔回调函数信息

+

返回值

+

返回值描述

+

0

+

注册成功

+

负数

+

注册失败

+
+ +注册热插拔检测回调函数示例: + +```c +/* 热插拔检测回调函数定义 */ +static void HdmiHpdHandle(void *data, bool hpd) +{ + if (data == NULL) { + HDF_LOGE("priv data is NULL"); + return; +} + + if (hpd == true) { + HDF_LOGD("HdmiHpdHandle: hot plug"); + /* 调用者添加相关处理 */ + } else { + HDF_LOGD("HdmiHpdHandle: hot unplog"); + /* 调用者添加相关处理 */ + } +} + + /* 热插拔检测回调函数注册示例 */ + struct HdmiHpdCallbackInfo info = {0}; + info.data = handle; + info.callbackFunc = HdmiHpdHandle; + ret = HdmiRegisterHpdCallbackFunc(hdmiHandle, info); + if (ret != 0) { + HDF_LOGE("HdmiRegisterHpdCallbackFunc: Register failed."); + } +``` + +### 读取EDID + +```c +int32_t HdmiReadSinkEdid(DevHandle handle, uint8_t *buffer, uint32_t len); +``` + +**表 4** HdmiReadSinkEdid参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

buffer

+

数据缓冲区

+

len

+

数据长度

+

返回值

+

返回值描述

+

正整数

+

成功读取的原始EDID数据

+

负数或0

+

读取失败

+
+ +读取Sink端的原始EDID数据示例: + +```c +int32_t len; +uint8_t edid[HDMI_EDID_MAX_LEN] = {0}; + +len = HdmiReadSinkEdid(hdmiHandle, edid, HDMI_EDID_MAX_LEN); +if (len <= 0) { + HDF_LOGE("%s: HdmiReadSinkEdid failed len = %d.", __func__, len); +} +``` + +### 设置音频、视频及HDR属性 + +#### 设置音频属性 + +```c +int32_t HdmiSetAudioAttribute(DevHandle handle, struct HdmiAudioAttr *attr); +``` + +**表 5** HdmiSetAudioAttribute参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

attr

+

音频属性

+

返回值

+

返回值描述

+

0

+

设置成功

+

负数

+

设置失败

+
+ +设置音频属性示例: + +```c +struct HdmiAudioAttr audioAttr = {0}; +int32_t ret; + +audioAttr.codingType = HDMI_AUDIO_CODING_TYPE_MP3; +audioAttr.ifType = HDMI_AUDIO_IF_TYPE_I2S; +audioAttr.bitDepth = HDMI_ADIO_BIT_DEPTH_16; +audioAttr.sampleRate = HDMI_SAMPLE_RATE_8K; +audioAttr.channels = HDMI_AUDIO_FORMAT_CHANNEL_3; +ret = HdmiSetAudioAttribute(handle, &audioAttr); +if (ret != 0) { + HDF_LOGE("HdmiSetAudioAttribute failed."); +} +``` + +#### 设置视频属性 + +```c +int32_t HdmiSetVideoAttribute(DevHandle handle, struct HdmiVideoAttr *attr); +``` + +**表 6** HdmiSetVideoAttribute参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

attr

+

视频属性

+

返回值

+

返回值描述

+

0

+

设置成功

+

负数

+

设置失败

+
+ +设置视频属性示例: + +```c +struct HdmiVideoAttr videoAttr = {0}; +int32_t ret; + +videoAttr.colorSpace = HDMI_COLOR_SPACE_YCBCR444; +videoAttr.colorimetry = HDMI_COLORIMETRY_EXTENDED; +videoAttr.extColorimetry = HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM; +videoAttr.quantization = HDMI_QUANTIZATION_RANGE_FULL; +ret = HdmiSetVideoAttribute(handle, &videoAttr); +if (ret != 0) { + HDF_LOGE("HdmiSetVideoAttribute failed."); +} +``` + +#### 设置HDR属性 + +```c +int32_t HdmiSetHdrAttribute(DevHandle handle, struct HdmiHdrAttr *attr); +``` + +**表 7** HdmiSetHdrAttribute参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

attr

+

HDR属性

+

返回值

+

返回值描述

+

0

+

设置成功

+

负数

+

设置失败

+
+ +设置HDR属性示例: + +```c +struct HdmiHdrAttr hdrAttr = {0}; +int32_t ret; + +hdrAttr.mode = HDMI_HDR_MODE_CEA_861_3; +hdrAttr.userMode = HDMI_HDR_USERMODE_DOLBY; +hdrAttr.eotfType = HDMI_EOTF_SMPTE_ST_2048; +hdrAttr.metadataType = HDMI_DRM_STATIC_METADATA_TYPE_1; +hdrAttr.colorimetry = HDMI_HDR_EXTENDED_COLORIMETRY_XV_YCC_709; +ret = HdmiSetHdrAttribute(handle, &hdrAttr); +if (ret != 0) { + HDF_LOGE("HdmiSetHdrAttribute failed."); +} +``` + +### 其他可选设置 + +#### 设置HDMI声音图像消隐 + +```c +int32_t HdmiAvmuteSet(DevHandle handle, bool enable); +``` + +**表 8** HdmiAvmuteSet参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

enable

+

使能/去使能avmute

+

返回值

+

返回值描述

+

0

+

设置成功

+

负数

+

设置失败

+
+ +设置声音图像消隐示例: + +```c +int32_t ret; + +ret = HdmiAvmuteSet(hdmiHandle, true); +if (ret != 0) { + HDF_LOGE("HdmiAvmuteSet failed."); +} +``` + +#### 设置色彩深度 + +```c +int32_t HdmiDeepColorSet(DevHandle handle, enum HdmiDeepColor color); +``` + +**表 9** HdmiDeepColorSet参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

color

+

色彩深度

+

返回值

+

返回值描述

+

0

+

设置成功

+

负数

+

设置失败

+
+ +设置色彩深度示例: + +```c +int32_t ret; + +ret = HdmiDeepColorSet(handle, HDMI_DEEP_COLOR_48BITS); +if (ret != 0) { + HDF_LOGE("HdmiDeepColorSet failed."); +} +``` + +#### 获取色彩深度 + +```c +int32_t HdmiDeepColorGet(DevHandle handle, enum HdmiDeepColor *color); +``` + +**表 10** HdmiDeepColorGet参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

color

+

色彩深度

+

返回值

+

返回值描述

+

0

+

获取成功

+

负数

+

获取失败

+
+ +获取色彩深度示例: + +```c +enum HdmiDeepColor color; +int32_t ret; + +ret = HdmiDeepColorGet(handle, &color); +if (ret != 0) { + HDF_LOGE("HdmiDeepColorGet failed."); +} +``` + +### 启动HDMI传输 + +```c +int32_t HdmiStart(DevHandle handle); +``` + +**表 11** HdmiStart参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

返回值

+

返回值描述

+

0

+

启动成功

+

负数

+

启动失败

+
+ +启动HDMI传输示例: + +```c +int32_t ret; + +ret = HdmiStart(hdmiHandle); +if (ret != 0) { + HDF_LOGE("start transmission failed."); +} +``` + +### 停止HDMI传输 + +```c +int32_t HdmiStop(DevHandle handle); +``` + +**表 12** HdmiStop参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

返回值

+

返回值描述

+

0

+

停止成功

+

负数

+

停止失败

+
+ +停止HDMI传输示例: + +```c +int32_t ret; + +ret = HdmiStop(hdmiHandle); +if (ret != 0) { + HDF_LOGE("stop transmission failed."); +} +``` + +### 注销热插拔检测回调函数 + +```c +int32_t HdmiUnregisterHpdCallbackFunc(DevHandle handle); +``` + +**表 13** HdmiUnregisterHpdCallbackFunc参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+

返回值

+

返回值描述

+

0

+

注销成功

+

负数

+

注销失败

+
+ +注销热插拔检测回调函数示例: + +```c +int32_t ret; + +ret = HdmiUnregisterHpdCallbackFunc(hdmiHandle); +if (ret != 0) { + HDF_LOGE("unregister failed."); +} +``` + +### 关闭HDMI控制器 + +```c +void HdmiClose(DevHandle handle); +``` + +**表 14** HdmiClose参数和返回值描述 + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

HDMI控制器句柄

+
+ +关闭HDMI控制器示例: + +```c +HdmiClose(hdmiHandle); +``` + +## 使用实例 + +本例程以操作开发板上的HDMI设备为例,详细展示HDMI接口的完整使用流程。 + +本例拟在Hi3516DV300开发板上对虚拟驱动进行简单的传输操作: + +- SOC:hi3516dv300。 + +- HDMI控制器:使用0号HDMI控制器。 + + +示例如下: + +```c +#include "hdmi_if.h" /* HDMI标准接口头文件 */ +#include "hdf_log.h" /* 标准日志打印头文件 */ +#include "osal_time.h" /* 标准延迟&睡眠接口头文件 */ + +/* 热插拔回调函数 */ +static void HdmiHpdHandle(void *data, bool hpd) +{ + if (data == NULL) { + HDF_LOGE("priv data is NULL"); + return; + } + + if (hpd == true) { + HDF_LOGD("HdmiHpdHandle: hot plug"); + /* 调用者添加相关处理 */ + } else { + HDF_LOGD("HdmiHpdHandle: hot unplog"); + /* 调用者添加相关处理 */ + } +} + +/* 设置HDMI相关属性 */ +static int32_t TestHdmiSetAttr(DevHandle handle) +{ + enum HdmiDeepColor color; + struct HdmiVideoAttr videoAttr = {0}; + struct HdmiAudioAttr audioAttr = {0}; + struct HdmiHdrAttr hdrAttr = {0}; + int32_t ret; + + ret = HdmiDeepColorSet(handle, HDMI_DEEP_COLOR_48BITS); + + if (ret != 0) { + HDF_LOGE("HdmiDeepColorSet failed."); + return ret; + } + ret = HdmiDeepColorGet(handle, &color); + if (ret != 0) { + HDF_LOGE("HdmiDeepColorGet failed."); + return ret; + } + HDF_LOGE("HdmiDeepColorGet successful, color = %d.", color); + videoAttr.colorSpace = HDMI_COLOR_SPACE_YCBCR444; + videoAttr.colorimetry = HDMI_COLORIMETRY_EXTENDED; + videoAttr.extColorimetry = HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM; + videoAttr.quantization = HDMI_QUANTIZATION_RANGE_FULL; + ret = HdmiSetVideoAttribute(handle, &videoAttr); + if (ret != 0) { + HDF_LOGE("HdmiSetVideoAttribute failed."); + return ret; + } + audioAttr.codingType = HDMI_AUDIO_CODING_TYPE_MP3; + audioAttr.ifType = HDMI_AUDIO_IF_TYPE_I2S; + audioAttr.bitDepth = HDMI_ADIO_BIT_DEPTH_16; + audioAttr.sampleRate = HDMI_SAMPLE_RATE_8K; + audioAttr.channels = HDMI_AUDIO_FORMAT_CHANNEL_3; + ret = HdmiSetAudioAttribute(handle, &audioAttr); + if (ret != 0) { + HDF_LOGE("HdmiSetAudioAttribute failed."); + return ret; + } + hdrAttr.mode = HDMI_HDR_MODE_CEA_861_3; + hdrAttr.userMode = HDMI_HDR_USERMODE_DOLBY; + hdrAttr.eotfType = HDMI_EOTF_SMPTE_ST_2048; + hdrAttr.metadataType = HDMI_DRM_STATIC_METADATA_TYPE_1; + hdrAttr.colorimetry = HDMI_HDR_EXTENDED_COLORIMETRY_XV_YCC_709; + ret = HdmiSetHdrAttribute(handle, &hdrAttr); + if (ret != 0) { + HDF_LOGE("HdmiSetHdrAttribute failed."); + return ret; + } + + return 0; +} + +/* HDMI例程总入口 */ +static int32_t TestCaseHdmi(void) +{ + DevHandle handle = NULL; + int32_t ret; + + struct HdmiHpdCallbackInfo info = {0}; + uint8_t data[128] = {0}; + + HDF_LOGD("HdmiAdapterInit: successful."); + handle = HdmiOpen(0); + if (handle == NULL) { + HDF_LOGE("HdmiOpen failed."); + return ret; + } + info.data = handle; + info.callbackFunc = HdmiHpdHandle; + ret = HdmiRegisterHpdCallbackFunc(handle, &info); + if (ret != 0) { + HDF_LOGE("HdmiRegisterHpdCallbackFunc failed."); + return ret; + } + + ret = HdmiReadSinkEdid(handle, data, 128); + if (ret <= 0) { + HDF_LOGE("HdmiReadSinkEdid failed."); + return ret; + } + HDF_LOGE("HdmiReadSinkEdid successful, data[6] = %d, data[8] = %d.", data[6], data[8]); + + ret = TestHdmiSetAttr(handle); + if (ret != 0) { + HDF_LOGE("TestHdmiSetAttr failed."); + return ret; + } + + ret = HdmiStart(handle); + if (ret != 0) { + HDF_LOGE("HdmiStart failed."); + return ret; + } + + OsalMSleep(1000); + + ret = HdmiStop(handle); + if (ret != 0) { + HDF_LOGE("HdmiStop failed."); + return ret; + } + + ret = HdmiUnregisterHpdCallbackFunc(handle); + if (ret != 0) { + HDF_LOGE("HdmiUnregisterHpdCallbackFunc failed."); + return ret; + } + HdmiClose(handle); + return 0; +} + +``` \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.I2C.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.I2C.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.I2C.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.I2C.md" index 05088b6202d39ecad89b766c3dc54de8a57f227f..68802952ddef4737056898cb81fffe99434a7ea2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/02.I2C.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.I2C.md" @@ -1,6 +1,6 @@ --- title: I2C -permalink: /pages/0004010201 +permalink: /pages/0105020304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # I2C diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.I3C.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.I3C.md" new file mode 100644 index 0000000000000000000000000000000000000000..e91217dc8e5ea942af8e9781d5db87a1ac6b70f2 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.I3C.md" @@ -0,0 +1,633 @@ +--- +title: I3C +permalink: /pages/0105020305 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# I3C + +- [概述](#section1) +- [接口说明](#section2) +- [使用指导](#section3) + - [使用流程](#section4) + - [打开I3C控制器](#section5) + - [进行I3C通信](#section6) + - [获取I3C控制器配置](#section7) + - [配置I3C控制器](#section8) + - [请求IBI(带内中断)](#section9) + - [释放IBI(带内中断)](#section10) + - [关闭I3C控制器](#section11) + +- [使用实例](#section12) + +## 概述 + +- I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。 +- I3C总线向下兼容传统的I2C设备,同时增加了带内中断(In-Bind Interrupt)功能,支持I3C设备进行热接入操作,弥补了I2C总线需要额外增加中断线来完成中断的不足。 +- I3C总线上允许同时存在I2C设备、I3C从设备和I3C次级主设备。 +- I3C接口定义了完成I3C传输的通用方法集合,包括: + + - I3C控制器管理:打开或关闭I3C控制器。 + - I3C控制器配置:获取或配置I3C控制器参数。 + - I3C消息传输:通过消息传输结构体数组进行自定义传输。 + - I3C带内中断:请求或释放带内中断。 + - I3C的物理连接如[图1](#fig1)所示: + **图 1** I3C物理连线示意图 + ![](/images/device-dev/driver/figures/I3C物理连线示意图.png "I3C物理连线示意图") + +## 接口说明 + +**表 1** I3C驱动API接口功能介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

功能分类

+

接口名

+

描述

+

I3C控制器管理接口

+

I3cOpen

+
打开I3C控制器

+

I3cClose

+

关闭I3C控制器

+

I3c消息传输接口

+

I3cTransfer

+

自定义传输

+

I3C控制器配置接口

+

I3cSetConfig

+
配置I3C控制器

+

I3cGetConfig

+

获取I3C控制器配置

+

I3C带内中断接口

+

I3cRequestIbi

+
请求带内中断

+

I3cFreeIbi

+

释放带内中断

+
+ + + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>本文涉及的所有接口,仅限内核态使用,不支持在用户态使用。 + +## 使用指导 + +### 使用流程 + +I3C的使用流程如[图2](#fig2)所示。 + +**图 2** I3C使用流程图 +![](/images/device-dev/driver/figures/I3C使用流程图.png "I3C使用流程图") + +### 打开I3C控制器 + +在进行I3C通信前,首先要调用I3cOpen打开I3C控制器。 +```c +DevHandle I3cOpen(int16_t number); +``` + +**表 2** I3cOpen参数和返回值描述 + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

number

+

I3C控制器号

+

返回值

+

返回值描述

+

NULL

+

打开I3C控制器失败

+

控制器句柄

+

打开的I3C控制器句柄

+
+ +假设系统中存在8个I3C控制器,编号从0到7,那么我们现在打开1号控制器: + +```c +DevHandle i3cHandle = NULL; /* I3C控制器句柄 / + +/* 打开I3C控制器 */ +i3cHandle = I3cOpen(1); +if (i3cHandle == NULL) { + HDF_LOGE("I3cOpen: failed\n"); + return; +} +``` + +### 进行I3C通信 + +消息传输 +```c +int32_t I3cTransfer(DevHandle handle, struct I3cMsg *msgs, int16_t count, enum TransMode mode); +``` + +**表 3** I3cTransfer参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器句柄

+

msgs

+

待传输数据的消息结构体数组

+

count

+

消息数组长度

+

mode

+

传输模式,0:I2C模式;1:I3C模式;2:发送CCC(Common Command Code)

+

返回值

+

返回值描述

+

正整数

+

成功传输的消息结构体数目

+

负数

+

执行失败

+
+ +I3C传输消息类型为I3cMsg,每个传输消息结构体表示一次读或写,通过一个消息数组,可以执行若干次的读写组合操作。 + +```c +int32_t ret; +uint8_t wbuff[2] = { 0x12, 0x13 }; +uint8_t rbuff[2] = { 0 }; +struct I3cMsg msgs[2]; /* 自定义传输的消息结构体数组 */ +msgs[0].buf = wbuff; /* 写入的数据 */ +msgs[0].len = 2; /* 写入数据长度为2 */ +msgs[0].addr = 0x3F; /* 写入设备地址为0x3F */ +msgs[0].flags = 0; /* 传输标记为0,默认为写 */ +msgs[1].buf = rbuff; /* 要读取的数据 */ +msgs[1].len = 2; /* 读取数据长度为2 */ +msgs[1].addr = 0x3F; /* 读取设备地址为0x3F */ +msgs[1].flags = I3C_FLAG_READ /* I3C_FLAG_READ置位 */ +/* 进行一次I2C模式自定义传输,传输的消息个数为2 */ +ret = I3cTransfer(i3cHandle, msgs, 2, I2C_MODE); +if (ret != 2) { + HDF_LOGE("I3cTransfer: failed, ret %d\n", ret); + return; +} +``` + +>![](/images/device-dev/public_sys-resources/icon-caution.gif) **注意:** +>- I3cMsg结构体中的设备地址不包含读写标志位,读写信息由flags成员变量的读写控制位传递。 +>- 本函数不对消息结构体个数做限制,其最大个数度由具体I3C控制器决定。 +>- 本函数不对每个消息结构体中的数据长度做限制,同样由具体I3C控制器决定。 +>- 本函数可能会引起系统休眠,禁止在中断上下文调用。 + +### 获取I3C控制器配置 + +```c +int32_t I3cGetConfig(DevHandle handle, struct I3cConfig *config); +``` + +**表 4** I3cGetConfig参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器句柄

+

config

+

I3C控制器配置

+

返回值

+

返回值描述

+

0

+

获取成功

+

负数

+

获取失败

+
+ +### 配置I3C控制器 + +```c +int32_t I3cSetConfig(DevHandle handle, struct I3cConfig *config); +``` + +**表 5** I3cSetConfig参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器句柄

+

config

+

I3C控制器配置

+

返回值

+

返回值描述

+

0

+

配置成功

+

负数

+

配置失败

+
+ +### 请求IBI(带内中断) + +```c +int32_t I3cRequestIbi(DevHandle handle, uint16_t addr, I3cIbiFunc func, uint32_t payload); +``` + +**表 6** I3cRequestIbi参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器设备句柄

+

addr

+

I3C设备地址

+

func

+

IBI回调函数

+

payload

+

IBI有效载荷

+

返回值

+

返回值描述

+

0

+

请求成功

+

负数

+

请求失败

+
+ +```c +static int32_t TestI3cIbiFunc(DevHandle handle, uint16_t addr, struct I3cIbiData data) +{ + (void)handle; + (void)addr; + HDF_LOGD("%s: %.16s", __func__, (char *)data.buf); + + return 0; +} + +int32_t I3cTestRequestIbi(void) +{ + DevHandle i3cHandle = NULL; + int32_t ret; + + /* 打开I3C控制器 */ + i3cHandle = I3cOpen(1); + if (i3cHandle == NULL) { + HDF_LOGE("I3cOpen: failed\n"); + return; +} + ret = I3cRequestIbi(i3cHandle, 0x3F, TestI3cIbiFunc, 16); + if (ret != 0) { + HDF_LOGE("%s: Requset IBI failed!", __func__); + return -1; + } + + I3cClose(i3cHandle); + HDF_LOGD("%s: Done", __func__); + + return 0; +} +``` + +### 释放IBI(带内中断) + +```c +int32_t I3cFreeIbi(DevHandle handle, uint16_t addr); +``` + +**表 7** I3cFreeIbi参数和返回值描述 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器设备句柄

+

addr

+

I3C设备地址

+

返回值

+

返回值描述

+

0

+

释放成功

+

负数

+

释放失败

+
+ +```c +I3cFreeIbi(i3cHandle, 0x3F); /* 释放带内中断 */ +``` + +### 关闭I3C控制器 + +I3C通信完成之后,需要关闭I3C控制器,关闭函数如下所示: +```c +void I3cClose(DevHandle handle); +``` + +**表 4** I3cClose参数和返回值描述 + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

I3C控制器设备句柄

+
+ + +```c +I3cClose(i3cHandle); /* 关闭I3C控制器 */ +``` + +## 使用实例 + +本例程以操作开发板上的I3C设备为例,详细展示I3C接口的完整使用流程。 + +由于Hi3516DV300系列SOC没有I3C控制器,本例拟在Hi3516DV300某开发板上对虚拟驱动进行简单的传输操作,基本硬件信息如下: + +- SOC:hi3516dv300。 + +- 虚拟:I3C地址为0x3f, 寄存器位宽为1字节。 + +- 原理图信息:虚拟I3C设备挂接在18号和19号I3C控制器下。 + +本例程进行简单的I3C传输,测试I3C通路是否正常。 + +示例如下: + +```c +#include "i3c_if.h" /* I3C标准接口头文件 */ +#include "i3c_ccc.h" /* I3C通用命令代码头文件 */ +#include "hdf_log.h" /* 标准日志打印头文件 */ +#include "osal_io.h" /* 标准IO读写接口头文件 */ +#include "osal_time.h" /* 标准延迟&睡眠接口头文件 */ + +/* 定义一个表示设备的结构体,存储信息 */ +struct TestI3cDevice { + uint16_t busNum; /* I3C总线号 */ + uint16_t addr; /* I3C设备地址 */ + uint16_t regLen; /* 寄存器字节宽度 */ + DevHandle i3cHandle; /* I3C控制器句柄 */ +}; + +/* 基于I3cTransfer方法封装一个寄存器读写的辅助函数, 通过flag表示读或写 */ +static int TestI3cReadWrite(struct TestI3cDevice *testDevice, unsigned int regAddr, + unsigned char *regData, unsigned int dataLen, uint8_t flag) +{ + int index = 0; + unsigned char regBuf[4] = {0}; + struct I3cMsg msgs[2] = {0}; + + /* 单双字节寄存器长度适配 */ + if (testDevice->regLen == 1) { + regBuf[index++] = regAddr & 0xFF; + } else { + regBuf[index++] = (regAddr >> 8) & 0xFF; + regBuf[index++] = regAddr & 0xFF; + } + + /* 填充I3cMsg消息结构 */ + msgs[0].addr = testDevice->addr; + msgs[0].flags = 0; /* 标记为0,表示写入 */ + msgs[0].len = testDevice->regLen; + msgs[0].buf = regBuf; + + msgs[1].addr = testDevice->addr; + msgs[1].flags = (flag == 1) ? I3C_FLAG_READ : 0; /* 添加读标记位,表示读取 */ + msgs[1].len = dataLen; + msgs[1].buf = regData; + + if (I3cTransfer(testDevice->i3cHandle, msgs, 2, I2C_MODE) != 2) { + HDF_LOGE("%s: i3c read err", __func__); + return HDF_FAILURE; + } + return HDF_SUCCESS; +} + +/* 寄存器读函数 */ +static inline int TestI3cReadReg(struct TestI3cDevice *testDevice, unsigned int regAddr, + unsigned char *regData, unsigned int dataLen) +{ + return TestI3cReadWrite(testDevice, regAddr, regData, dataLen, 1); +} + +/* 寄存器写函数 */ +static inline int TestI3cWriteReg(struct TestI3cDevice *testDevice, unsigned int regAddr, + unsigned char *regData, unsigned int dataLen) +{ + return TestI3cReadWrite(testDevice, regAddr, regData, dataLen, 0); +} + +/* I3C例程总入口 */ +static int32_t TestCaseI3c(void) +{ + int32_t i; + int32_t ret; + unsigned char bufWrite[7] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xA, 0xB, 0xC }; + unsigned char bufRead[7] = {0}; + static struct TestI3cDevice testDevice; + + /* 设备信息初始化 */ + testDevice.busNum = 18; + testDevice.addr = 0x3F; + testDevice.regLen = 1; + testDevice.i3cHandle = NULL; + + /* 打开I3C控制器 */ + testDevice.i3cHandle = I3cOpen(testDevice.busNum); + if (testDevice.i3cHandle == NULL) { + HDF_LOGE("%s: Open I3c:%u fail!", __func__, testDevice.busNum); + return -1; + } + + /* 向地址为0x3F的设备连续写7字节数据 */ + ret = TestI3cWriteReg(&testDevice, 0x3F, bufWrite, 7); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: test i3c write reg fail!:%d", __func__, ret); + I3cClose(testDevice.i3cHandle); + return -1; + } + OsalMSleep(10); + + /* 从地址为0x3F的设备连续读7字节数据 */ + ret = TestI3cReadReg(&testDevice, 0x3F, bufRead, 7); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: test i3c read reg fail!:%d", __func__, ret); + I3cClose(testDevice.i3cHandle); + return -1; + } + HDF_LOGI("%s: test i3c write&read reg success!", __func__); + + /* 访问完毕关闭I3C控制器 */ + I3cClose(testDevice.i3cHandle); + + return 0; +} +``` \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.MIPI-CSI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.MIPI-CSI.md" new file mode 100644 index 0000000000000000000000000000000000000000..3179f8bc05998d8987e3589d44a61e635265c785 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.MIPI-CSI.md" @@ -0,0 +1,779 @@ +--- +title: MIPI-CSI +permalink: /pages/0105020306 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# MIPI CSI + +- [概述](#section1_MIPI_CSIDes) + - [ComboDevAttr结构体](#section1.1_MIPI_CSIDes) + - [ExtDataType结构体](#section1.2_MIPI_CSIDes) + - [接口说明](#section1.3_MIPI_CSIDes) + +- [使用指导](#section2_MIPI_CSIDes) + - [使用流程](#section2.1_MIPI_CSIDes) + - [获取MIPI-CSI控制器操作句柄](#section2.2_MIPI_CSIDes) + - [MIPI-CSI相应配置](#section2.3_MIPI_CSIDes) + - [复位/撤销复位sensor](#section2.4_MIPI_CSIDes) + - [复位/撤销复位MIPI RX](#section2.5_MIPI_CSIDes) + - [使能/关闭MIPI的时钟](#section2.6_MIPI_CSIDes) + - [使能/关闭MIPI上的sensor时钟](#section2.7_MIPI_CSIDes) + - [释放MIPI-CSI控制器操作句柄](#section2.8_MIPI_CSIDes) +- [使用实例](#section3_MIPI_CSIDes) + +## 概述 + +- CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。 + +- 物理层支持HS(High Speed)和LP(Low Power)两种工作模式。HS模式下采用低压差分信号,功耗较大,但数据传输速率可以很高(数据速率为80M~1Gbps);LP模式下采用单端信号,数据速率很低(<10Mbps),但是相应的功耗也很低。两种模式的结合保证了MIPI总线在需要传输大量数据(如图像)时可以高速传输,而在不需要传输大数据量时又能够减少功耗。 + +- 图1显示了简化的CSI接口。D-PHY采用1对源同步的差分时钟和1~4对差分数据线来进行数据传输。数据传输采用DDR方式,即在时钟的上下边沿都有数据传输。 + + **图 1** CSI发送、接收接口 + ![](/images/device-dev/driver/figures/CSI发送-接收接口.png) + +### ComboDevAttr结构体 + +**表** **1** ComboDevAttr结构体介绍 + + + +| 名称 | 描述 | +| --------- | ----------------------------------------------------- | +| devno | 设备号 | +| inputMode | 输入模式:MIPI/LVDS/SUBSLVDS/HISPI/DC | +| dataRate | Mipi Rx,SLVS输入速率 | +| imgRect | MIPI Rx设备裁剪区域(与原始传感器输入图像大小相对应) | +| MIPIAttr | Mipi设备属性 | +| lvdsAttr | LVDS/SubLVDS/HiSPi设备属性 | + +### ExtDataType结构体 + +**表** **2** ExtDataType结构体介绍 + + + +| 名称 | 描述 | +| --------------- | ------------------------------- | +| devno | 设备号 | +| num | sensor号 | +| extDataBitWidth | 图片的位深 | +| extDataType | 定义YUV和原始数据格式以及位深度 | + +### 接口说明 + +**表 3** MIPI-CSI API接口功能介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
功能分类接口名描述
获取/释放MIPI-CSI控制器操作句柄MipiCsiOpen获取MIPI-CSI控制器操作句柄
MipiCsiClose释放MIPI-CSI控制器操作句柄
MIPI-CSI相应配置MipiCsiSetComboDevAttr设置MIPI,CMOS或者LVDS相机的参数给控制器,参数包括工作模式,图像区域,图像深度,数据速率和物理通道等
MipiCsiSetExtDataType(可选)设置YUV和RAW数据格式和位深
MipiCsiSetHsMode设置MIPI RX的Lane分布。根据硬件连接的形式选择具体的mode
MipiCsiSetPhyCmvmode设置共模电压模式
复位/撤销复位SensorMipiCsiResetSensor复位Sensor
MipiCsiUnresetSensor撤销复位Sensor
复位/撤销复位MIPI RXMipiCsiResetRx复位MIPI RX。不同的s32WorkingViNum有不同的enSnsType
MipiCsiUnresetRx撤销复位MIPI RX
使能/关闭MIPI的时钟MipiCsiEnableClock使能MIPI的时钟。根据上层函数电泳传递的enSnsType参数决定是用MIPI还是LVDS
MipiCsiDisableClock关闭MIPI设备的时钟
使能/禁用MIPI上的Sensor时钟MipiCsiEnableSensorClock使能MIPI上的Sensor时钟
MipiCsiDisableSensorClock关闭Sensor的时钟
+ + + + +## 使用指导 + +### 使用流程 + +使用MIPI-CSI的一般流程如[图2](#fig99821771782)所示。 + +**图 2** MIPI-CSI使用流程图 + + +![](/images/device-dev/driver/figures/MIPI-CSI使用流程图.png) + +### 获取MIPI-CSI控制器操作句柄 + +在进行MIPI-CSI进行通信前,首先要调用MipiCsiOpen获取控制器操作句柄,该函数会返回指定通道ID的控制器操作句柄。 + +```c +DevHandle MipiCsiOpen(uint8_t id); +``` + +**表 4** MipiCsiOpen的参数和返回值描述 + + + +| 参数 | 参数描述 | +| ---------- | ----------------------------------------------- | +| id | MIPI CSI通道ID | +| **返回值** | **返回值描述** | +| NULL | 获取失败 | +| 设备句柄 | 获取到指令通道的控制器操作句柄,类型为DevHandle | + +假设系统中的MIPI-CSI通道为0,获取该通道控制器操作句柄的示例如下: + +```c +DevHandle MipiCsiHandle = NULL; /* 设备句柄 */ +id = 0; /* MiPi-Csi通道ID */ + +/* 获取控制器操作句柄 */ +MipiCsiHandle = MipiCsiOpen(id); +if (MipiCsiHandle == NULL) { + HDF_LOGE("MipiCsiOpen: failed\n"); + return; +} +``` + +### MIPI-CSI相应配置 + +- 写入MIPI-CSI配置 + + ```c + int32_t MipiCsiSetComboDevAttr(DevHandle handle, ComboDevAttr *pAttr); + ``` + + **表 5** MipiCsiSetComboDevAttr的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | -------------------------- | + | handle | 控制器操作句柄 | + | pAttr | MIPI-CSI相应配置结构体指针 | + | **返回值** | **返回值描述** | + | 0 | 设置成功 | + | 负数 | 设置失败 | + + ```c + int32_t ret; + struct ComboDevAttr attr; + + /* 当前配置如下 */ + (void)memset_s(&attr, sizeof(ComboDevAttr), 0, sizeof(ComboDevAttr)); + attr.devno = 0; /* 设备0 */ + attr.inputMode = INPUT_MODE_MIPI; /* 输入模式为MIPI */ + attr.dataRate = MIPI_DATA_RATE_X1; /* 每时钟输出1像素 */ + attr.imgRect.x = 0; /* 0: 图像传感器左上位置 */ + attr.imgRect.y = 0; /* 0: 图像传感器右上位置 */ + attr.imgRect.width = 2592; /* 2592: 图像传感器宽度大小 */ + attr.imgRect.height = 1944; /* 1944: 图像传感器高度尺寸 */ + /* 写入配置数据 */ + ret = MipiCsiSetComboDevAttr(MipiCsiHandle, &attr); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetComboDevAttr fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 设置YUV和RAW数据格式和位深 + + ```c + int32_t MipiCsiSetExtDataType(DevHandle handle, ExtDataType* dataType); + ``` + + **表 6** MipiCsiSetExtDataType的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | ------------------------------- | + | handle | 控制器操作句柄 | + | dataType | 定义YUV和原始数据格式以及位深度 | + | **返回值** | **返回值描述** | + | 0 | 设置成功 | + | 负数 | 设置失败 | + + ```c + int32_t ret; + struct ExtDataType dataType; + + /* 配置YUV和RAW数据格式和位深参数 */ + dataType.devno = 0; /* 设备0 */ + dataType.num = 0; /* sensor 0 */ + dataType.extDataBitWidth[0] = 12; /* 位深数组元素0 */ + dataType.extDataBitWidth[1] = 12; /* 位深数组元素1 */ + dataType.extDataBitWidth[2] = 12; /* 位深数组元素2 */ + + dataType.extDataType[0] = 0x39; /* 定义YUV和原始数据格式以及位深度元素0 */ + dataType.extDataType[1] = 0x39; /* 定义YUV和原始数据格式以及位深度元素1 */ + dataType.extDataType[2] = 0x39; /* 定义YUV和原始数据格式以及位深度元素2 */ + /* 设置YUV和RAW数据格式和位深 */ + ret = MipiCsiSetExtDataType(MipiCsiHandle, &dataType); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetExtDataType fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 设置MIPI RX的Lane分布 + + ```c + int32_t MipiCsiSetHsMode(DevHandle handle, LaneDivideMode laneDivideMode); + ``` + + **表 7** MipiCsiSetHsMode的参数和返回值描述 + + + + | 参数 | 参数描述 | + | -------------- | -------------- | + | handle | 控制器操作句柄 | + | laneDivideMode | lane模式参数 | + | **返回值** | **返回值描述** | + | 0 | 设置成功 | + | 负数 | 设置失败 | + + ```c + int32_t ret; + enum LaneDivideMode mode; + + /* lane模式参数为0 */ + mode = LANE_DIVIDE_MODE_0; + /* 设置MIPI RX的 Lane分布 */ + ret = MipiCsiSetHsMode(MipiCsiHandle, mode); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetHsMode fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 设置共模电压模式 + + ```c + int32_t MipiCsiSetPhyCmvmode(DevHandle handle, uint8_t devno, PhyCmvMode cmvMode); + ``` + + **表 8** MipiCsiSetPhyCmvmode的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | ---------------- | + | handle | 控制器操作句柄 | + | cmvMode | 共模电压模式参数 | + | devno | 设备编号 | + | **返回值** | **返回值描述** | + | 0 | 设置成功 | + | 负数 | 设置失败 | + + ```c + int32_t ret; + enum PhyCmvMode mode; + uint8_t devno; + + /* 共模电压模式参数为0 */ + mode = PHY_CMV_GE1200MV; + /* 设备编号为0 */ + devno = 0; + /* 设置共模电压模式 */ + ret = MipiCsiSetPhyCmvmode(MipiCsiHandle, devno, mode); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetPhyCmvmode fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +### 复位/撤销复位Sensor + +- 复位Sensor + + ```c + int32_t MipiCsiResetSensor(DevHandle handle, uint8_t snsResetSource); + ``` + + **表 9** MipiCsiResetSensor的参数和返回值描述 + + + + | 参数 | 参数描述 | + | -------------- | ------------------------------------------------ | + | handle | 控制器操作句柄 | + | snsResetSource | 传感器的复位信号线号,在软件中称为传感器的复位源 | + | **返回值** | **返回值描述** | + | 0 | 复位成功 | + | 负数 | 复位失败 | + + ```c + int32_t ret; + uint8_t snsResetSource; + + /* 传感器复位信号线号为0 */ + snsResetSource = 0; + /* 复位sensor */ + ret = MipiCsiResetSensor(MipiCsiHandle, snsResetSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiResetSensor fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 撤销复位Sensor + + ```c + int32_t MipiCsiUnresetSensor(DevHandle handle, uint8_t snsResetSource); + ``` + + **表 10** MipiCsiUnresetSensor的参数和返回值描述 + + + + | 参数 | 参数描述 | + | -------------- | ------------------------------------------------ | + | handle | 控制器操作句柄 | + | snsResetSource | 传感器的复位信号线号,在软件中称为传感器的复位源 | + | **返回值** | **返回值描述** | + | 0 | 撤销复位成功 | + | 负数 | 撤销复位失败 | + + ```c + int32_t ret; + uint8_t snsResetSource; + + /* 传感器撤销复位信号线号为0 */ + snsResetSource = 0; + /* 撤销复位sensor */ + ret = MipiCsiUnresetSensor(MipiCsiHandle, snsResetSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiUnresetSensor fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +### 复位/撤销复位MIPI RX + +- 复位MIPI RX + + ```c + int32_t MipiCsiResetRx(DevHandle handle, uint8_t comboDev); + ``` + + **表 11** MipiCsiResetRx的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | --------------------- | + | handle | 控制器操作句柄 | + | comboDev | MIPI RX或LVDS通路序号 | + | **返回值** | **返回值描述** | + | 0 | 复位成功 | + | 负数 | 复位失败 | + + ```c + int32_t ret; + uint8_t comboDev; + + /* 通路序号为0 */ + comboDev = 0; + /* 复位MIPI RX */ + ret = MipiCsiResetRx(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiResetRx fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 撤销复位MIPI RX + + ```c + int32_t MipiCsiUnresetRx(DevHandle handle, uint8_t comboDev); + ``` + + **表 12** MipiCsiUnresetRx的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | --------------------- | + | handle | 控制器操作句柄 | + | comboDev | MIPI RX或LVDS通路序号 | + | **返回值** | **返回值描述** | + | 0 | 撤销复位成功 | + | 负数 | 撤销复位失败 | + + ```c + int32_t ret; + uint8_t comboDev; + + /* 通路序号为0 */ + comboDev = 0; + /* 撤销复位MIPI RX */ + ret = MipiCsiUnresetRx(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiUnresetRx fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +### 使能/关闭MIPI的时钟 + +- 使能MIPI的时钟 + + ```c + int32_t MipiCsiEnableClock(DevHandle handle, uint8_t comboDev); + ``` + + **表 13** MipiCsiEnableClock的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | -------------- | + | handle | 控制器操作句柄 | + | comboDev | 通路序号 | + | **返回值** | **返回值描述** | + | 0 | 使能成功 | + | 负数 | 使能失败 | + + ```c + int32_t ret; + uint8_t comboDev; + + /* 通路序号为0 */ + comboDev = 0; + /* 使能MIPI的时钟 */ + ret = MipiCsiEnableClock(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiEnableClock fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 关闭MIPI的时钟 + + ```c + int32_t MipiCsiDisableClock(DevHandle handle, uint8_t comboDev); + ``` + + **表 14** MipiCsiDisableClock的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ---------- | -------------- | + | handle | 控制器操作句柄 | + | comboDev | 通路序号 | + | **返回值** | **返回值描述** | + | 0 | 关闭成功 | + | 负数 | 关闭失败 | + + ```c + int32_t ret; + uint8_t comboDev; + + /* 通路序号为0 */ + comboDev = 0; + /* 关闭MIPI的时钟 */ + ret = MipiCsiDisableClock(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiDisableClock fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +### 使能/关闭MIPI上的Sensor时钟 + +- 使能MIPI上的Sensor时钟 + + ```c + int32_t MipiCsiEnableSensorClock(DevHandle handle, uint8_t snsClkSource); + ``` + + **表 15** MipiCsiEnableSensorClock的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ------------ | ------------------------------------------------ | + | handle | 控制器操作句柄 | + | snsClkSource | 传感器的时钟信号线号,在软件中称为传感器的时钟源 | + | **返回值** | **返回值描述** | + | 0 | 使能成功 | + | 负数 | 使能失败 | + + ```c + int32_t ret; + uint8_t snsClkSource; + + /* 传感器的时钟信号线号为0 */ + snsClkSource = 0; + /* 使能MIPI上的sensor时钟 */ + ret = MipiCsiEnableSensorClock(MipiCsiHandle, snsClkSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiEnableSensorClock fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +- 关闭MIPI上的Sensor时钟 + + ```c + int32_t MipiCsiDisableSensorClock(DevHandle handle, uint8_t snsClkSource); + ``` + + **表 16** MipiCsiDisableSensorClock的参数和返回值描述 + + + + | 参数 | 参数描述 | + | ------------ | ------------------------------------------------ | + | handle | 控制器操作句柄 | + | snsClkSource | 传感器的时钟信号线号,在软件中称为传感器的时钟源 | + | **返回值** | **返回值描述** | + | 0 | 关闭成功 | + | 负数 | 关闭失败 | + + ```c + int32_t ret; + uint8_t snsClkSource; + + /* 传感器的时钟信号线号为0 */ + snsClkSource = 0; + /* 关闭MIPI上的Sensor时钟 */ + ret = MipiCsiDisableSensorClock(MipiCsiHandle, snsClkSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiDisableSensorClock fail! ret=%d\n", __func__, ret); + return -1; + } + ``` + +### 释放MIPI-CSI控制器操作句柄 + +MIPI-CSI使用完成之后,需要释放控制器操作句柄,释放句柄的函数如下所示: + +```c +void MipiCsiClose(DevHandle handle); +``` + +该函数会释放掉由MipiCsiOpen申请的资源。 + +**表 17** MipiCsiClose的参数和返回值描述 + + + + + + + + + + + +

参数

+

参数描述

+

handle

+

MIPI-CSI控制器操作句柄

+
+ +```c +MipiCsiClose(MIPIHandle); /* 释放掉MIPI-CSI控制器操作句柄 */ +``` + +## 使用实例 + +MIPI-CSI完整的使用示例如下所示: + +```c +#include "hdf.h" +#include "MIPI_csi_if.h" + +void PalMipiCsiTestSample(void) +{ + uint8_t id; + int32_t ret; + uint8_t comboDev; + uint8_t snsClkSource; + uint8_t devno; + enum LaneDivideMode mode; + enum PhyCmvMode mode; + struct ComboDevAttr attr; + struct ExtDataType dataType; + DevHandle MipiCsiHandle = NULL; + + /* 控制器ID号 */ + id = 0; + /* 获取控制器操作句柄 */ + MipiCsiHandle = MipiCsiOpen(id); + if (MipiCsiHandle == NULL) { + HDF_LOGE("MipiCsiOpen: failed!\n"); + return; + } + + /* lane模式参数为0 */ + mode = LANE_DIVIDE_MODE_0; + /* 设置MIPI RX的 Lane分布 */ + ret = MipiCsiSetHsMode(MipiCsiHandle, mode); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetHsMode fail! ret=%d\n", __func__, ret); + return; + } + + /* 通路序号为0 */ + comboDev = 0; + /* 使能MIPI的时钟 */ + ret = MipiCsiEnableClock(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiEnableClock fail! ret=%d\n", __func__, ret); + return; + } + + /* 复位MIPI RX */ + ret = MipiCsiResetRx(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiResetRx fail! ret=%d\n", __func__, ret); + return; + } + + /* 传感器的时钟信号线号为0 */ + snsClkSource = 0; + /* 使能MIPI上的sensor时钟 */ + ret = MipiCsiEnableSensorClock(MipiCsiHandle, snsClkSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiEnableSensorClock fail! ret=%d\n", __func__, ret); + return; + } + + /* 复位sensor */ + ret = MipiCsiResetSensor(MipiCsiHandle, snsResetSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiResetSensor fail! ret=%d\n", __func__, ret); + return; + } + + /* MIPI参数配置如下 */ + (void)memset_s(&attr, sizeof(ComboDevAttr), 0, sizeof(ComboDevAttr)); + attr.devno = 0; /* 设备0 */ + attr.inputMode = INPUT_MODE_MIPI; /* 输入模式为MIPI */ + attr.dataRate = MIPI_DATA_RATE_X1; /* 每时钟输出1像素 */ + attr.imgRect.x = 0; /* 0: 图像传感器左上位置 */ + attr.imgRect.y = 0; /* 0: 图像传感器右上位置 */ + attr.imgRect.width = 2592; /* 2592: 图像传感器宽度大小 */ + attr.imgRect.height = 1944; /* 1944: 图像传感器高度尺寸 */ + /* 写入配置数据 */ + ret = MipiCsiSetComboDevAttr(MipiCsiHandle, &attr); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetComboDevAttr fail! ret=%d\n", __func__, ret); + return; + } + + /* 共模电压模式参数为0 */ + mode = PHY_CMV_GE1200MV; + /* 设备编号为0 */ + devno = 0; + /* 设置共模电压模式 */ + ret = MipiCsiSetPhyCmvmode(MipiCsiHandle, devno, mode); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiSetPhyCmvmode fail! ret=%d\n", __func__, ret); + return; + } + + /* 通路序号为0 */ + comboDev = 0; + /* 撤销复位MIPI RX */ + ret = MipiCsiUnresetRx(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiUnresetRx fail! ret=%d\n", __func__, ret); + return; + } + + /* 关闭MIPI的时钟 */ + ret = MipiCsiDisableClock(MipiCsiHandle, comboDev); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiDisableClock fail! ret=%d\n", __func__, ret); + return; + } + + /* 传感器撤销复位信号线号为0 */ + snsResetSource = 0; + /* 撤销复位sensor */ + ret = MipiCsiUnresetSensor(MipiCsiHandle, snsResetSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiUnresetSensor fail! ret=%d\n", __func__, ret); + return; + } + + /* 关闭MIPI上的sensor时钟 */ + ret = MipiCsiDisableSensorClock(MipiCsiHandle, snsClkSource); + if (ret != 0) { + HDF_LOGE("%s: MipiCsiDisableSensorClock fail! ret=%d\n", __func__, ret); + return; + } + + /* 释放MIPI DSI设备句柄 */ + MipiCsiClose(MipiCsiHandle); +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.MIPIDSI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.MIPI-DSI.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.MIPIDSI.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.MIPI-DSI.md" index c2187c68f6a1dc34d50a47c02bdd9616b3c6801d..1b41f4950e17d1f40b10fd2cb4329b31819ae280 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.MIPIDSI.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.MIPI-DSI.md" @@ -1,6 +1,6 @@ --- -title: MIPIDSI -permalink: /pages/0004010207 +title: MIPI-DSI +permalink: /pages/0105020307 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # MIPI DSI diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.PWM.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.PWM.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.PWM.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.PWM.md" index 5a96942b0cef31498d5b2d90a3033c48e67002e0..5564b0d305294f6c0bf24655756ab92169dbc5ee 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.PWM.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/08.PWM.md" @@ -1,6 +1,6 @@ --- title: PWM -permalink: /pages/0004010208 +permalink: /pages/0105020308 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # PWM @@ -152,7 +152,6 @@ DevHandle PwmOpen(uint32_t num); | 参数 | 参数描述 | | ---------- | ----------------------- | -| void | NA | | num | PWM设备编号 | | **返回值** | **返回值描述** | | handle | 获取成功返回PWM设备句柄 | diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.RTC.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.RTC.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.RTC.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.RTC.md" index 401f4af71f0f1488a6344a631d81ecfabc5791d8..d4d11a94d315d978287de157a3224580c0b5abc7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/03.RTC.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/09.RTC.md" @@ -1,6 +1,6 @@ --- title: RTC -permalink: /pages/0004010202 +permalink: /pages/0105020309 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # RTC diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.SDIO.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/10.SDIO.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.SDIO.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/10.SDIO.md" index 567e802da63c02ed4576c9fcfdaf837212ffbaf4..b1ce3365cbe86e31c577c9548dfa29d3ea67b766 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/04.SDIO.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/10.SDIO.md" @@ -1,6 +1,6 @@ --- title: SDIO -permalink: /pages/0004010203 +permalink: /pages/010502030a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # SDIO diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.SPI.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/11.SPI.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.SPI.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/11.SPI.md" index 25e3a2555efe5dacac40af6e195257d3d452e5db..1b43fd0cab7c729494eefd926f97b6a03f94b158 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/05.SPI.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/11.SPI.md" @@ -1,6 +1,6 @@ --- title: SPI -permalink: /pages/0004010204 +permalink: /pages/010502030b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # SPI diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.UART.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/12.UART.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.UART.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/12.UART.md" index 2f121f518dca3c7e486bd3197e5cac99c5b8d1a0..44f282da489afb71542ed4531a3cbbe79863062f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/06.UART.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/12.UART.md" @@ -1,6 +1,6 @@ --- title: UART -permalink: /pages/0004010205 +permalink: /pages/010502030c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # UART diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.WATCHDOG.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/13.WATCHDOG.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.WATCHDOG.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/13.WATCHDOG.md" index 7d32d802a93c22fad24852330bab1e279f05ab6f..0a7a2f38248d029ebc955d013c885e78d0b2aa3b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/07.WATCHDOG.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/03.\345\271\263\345\217\260\351\251\261\345\212\250\344\275\277\347\224\250/13.WATCHDOG.md" @@ -1,6 +1,6 @@ --- title: WATCHDOG -permalink: /pages/0004010206 +permalink: /pages/010502030d navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:31 +date: 2022-02-12 09:01:46 --- # WATCHDOG diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/01.LCD.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/01.LCD.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/01.LCD.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/01.LCD.md" index 2f6a949f844aec4a10c87c909e5f9edba2532c5c..ab2593b62bbf27dfd715c5528c48b11319e66dc9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/01.LCD.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/01.LCD.md" @@ -1,6 +1,6 @@ --- title: LCD -permalink: /pages/0004010300 +permalink: /pages/0105020401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # LCD @@ -20,18 +20,18 @@ date: 2021-12-30 18:31:32 ## 概述 -LCD(Liquid Crystal Display)液晶显示驱动,对LCD进行上电,并通过接口初始化LCD内部寄存器,使LCD正常工作。Display驱动模型基于HDF( Hardware Driver Foundation)[驱动框架](/pages/0004010000)开发,实现跨OS、跨平台,为LCD硬件提供上下电功能、发送初始化序列功能,使LCD进入正常的工作模式,显示芯片平台侧的图像数据,基于HDF驱动框架的Display驱动模型如[图1](#fig69138814229)。 +LCD(Liquid Crystal Display)液晶显示驱动,对LCD进行上电,并通过接口初始化LCD内部寄存器,使LCD正常工作。Display驱动模型基于HDF( Hardware Driver Foundation)[驱动框架](/pages/0105020101)开发,实现跨OS、跨平台,为LCD硬件提供上下电功能、发送初始化序列功能,使LCD进入正常的工作模式,显示芯片平台侧的图像数据,基于HDF驱动框架的Display驱动模型如[图1](#fig69138814229)。 **图 1** 基于HDF驱动框架的Display驱动模型 ![](/images/device-dev/driver/figures/基于HDF驱动框架的Display驱动模型.png "基于HDF驱动框架的Display驱动模型") **Display驱动模型介绍** -Display驱动模型主要由平台驱动层、芯片平台适配层、LCD器件驱动层三部分组成。驱动模型基于HDF驱动框架开发,通过Platform层和OSAL层提供的接口,屏蔽内核形态的差异,使得器件驱动可以便利的迁移到不同OS及芯片平台。模型向上对接Display公共hal层,支撑HDI接口的实现,通过Display-HDI(Hardware Display Interface)对图形服务提供各类驱动能力接口。 +Display驱动模型主要由平台驱动层、芯片平台适配层、LCD器件驱动层三部分组成。驱动模型基于HDF驱动框架开发,通过Platform层和OSAL层提供的接口,屏蔽内核形态的差异,使得器件驱动可以便利的迁移到不同OS及芯片平台。模型向上对接Display公共hal层,支撑HDI(Hardware Display Interface)接口的实现,通过Display-HDI对图形服务提供各类驱动能力接口。 -- (1)Display平台驱动层:通过HDF提供的IOService数据通道,与公共Hal层对接,集中接收并处理各类上层调用指令; -- (2)SOC平台驱动适配层:借助此SOC适配层,实现Display驱动和SOC侧驱动解耦,主要完成芯片平台相关的参数配置,并传递平台驱动层的调用到器件驱动层; -- (3)LCD器件驱动层:在器件驱动层中,主要实现和器件自身强相关的驱动适配接口,例如发送初始化序列、上下电、背光设置等。 +- Display平台驱动层:通过HDF提供的IOService数据通道,与公共Hal层对接,集中接收并处理各类上层调用指令。 +- SOC平台驱动适配层:借助此SOC适配层,实现Display驱动和SOC侧驱动解耦,主要完成芯片平台相关的参数配置,并传递平台驱动层的调用到器件驱动层。 +- LCD器件驱动层:在器件驱动层中,主要实现和器件自身强相关的驱动适配接口,例如发送初始化序列、上下电、背光设置等。 基于Display驱动模型开发LCD驱动,可以借助平台提供的各种能力及接口,较大程度的降低器件驱动的开发周期和难度,提升开发效率。 @@ -44,7 +44,7 @@ LCD接口通常可分为MIPI DSI接口、TTL接口和LVDS接口,常用的是MI **图 2** MIPI DSI接口 ![](/images/device-dev/driver/figures/MIPI-DSI接口.png "MIPI-DSI接口") - MIPI DSI接口是MIPI(移动行业处理器接口)联盟定义的显示接口,主要用于移动终端显示屏接口,接口数据传输遵循MIPI协议,MIPI DSI接口为数据接口,传输图像数据,通常情况下MIPI DSI接口的控制信息以MIPI包形式通过MIPI DSI接口发送到对端IC,不需要额外的外设接口。 + MIPI DSI接口是MIPI(Mobile Industry Processor Interface)联盟定义的显示接口,主要用于移动终端显示屏接口,接口数据传输遵循MIPI协议,MIPI DSI接口为数据接口,传输图像数据,通常情况下MIPI DSI接口的控制信息以MIPI包形式通过MIPI DSI接口发送到对端IC,不需要额外的外设接口。 - TTL接口 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/02.TOUCHSCREEN.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/02.TOUCHSCREEN.md" similarity index 88% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/02.TOUCHSCREEN.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/02.TOUCHSCREEN.md" index ca838c5bcb0544cdb302988f7f7ea59d1a1b30cb..d508fae694d6cb105dc28b8ee916d8e0f541a5e6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/02.TOUCHSCREEN.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/02.TOUCHSCREEN.md" @@ -1,6 +1,6 @@ --- title: TOUCHSCREEN -permalink: /pages/0004010301 +permalink: /pages/0105020402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # TOUCHSCREEN @@ -26,37 +26,37 @@ date: 2021-12-30 18:31:32 - **Touchscreen驱动主要任务** - Touchscreen驱动用于驱动触摸屏使其正常工作,该驱动主要完成如下工作:对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口(I2C或SPI)、设定input相关配置、下载及更新固件等操作。 + Touchscreen驱动用于驱动触摸屏使其正常工作,该驱动主要完成如下工作:对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口(I2C或SPI)、设定Input相关配置、下载及更新固件等操作。 - **Touchscreen驱动层次说明** - 本节主要介绍基于input驱动模型开发touchscreen器件驱动,input模型整体的框架如[图1](#fig6251184817261)。 + 本节主要介绍基于Input驱动模型开发touchscreen器件驱动,Input模型整体的框架如[图1](#fig6251184817261)。 - Input驱动模型基于HDF驱动框架、PLATFORM接口、OSAL接口进行开发,向上对接规范化的驱动接口HDI(Hardware Driver Interface)层,通过Input-HDI层对外提供硬件能力,即上层input service可以通过HDI接口层获取相应的驱动能力,进而操控touchscreen等输入设备。 + Input驱动模型基于HDF驱动框架、Platform接口、OSAL接口进行开发,向上对接规范化的驱动接口HDI(Hardware Driver Interface)层,通过Input-HDI层对外提供硬件能力,即上层Input service可以通过HDI接口层获取相应的驱动能力,进而操控touchscreen等输入设备。 -**图 1** 基于HDF驱动框架的input驱动模型 +**图 1** 基于HDF驱动框架的Input驱动模型 ![](/images/device-dev/driver/figures/基于HDF驱动框架的input驱动模型.png "基于HDF驱动框架的input驱动模型") - **Input驱动模型介绍** Input驱动模型核心部分由设备管理层、公共驱动层、器件驱动层组成。器件产生的数据借助平台数据通道能力从内核传递到用户态,驱动模型通过配置文件适配不同器件及硬件平台,提高开发者的器件驱动开发效率。如下部分为模型各部分的说明: - (1)input设备管理:为各类输入设备驱动提供input设备的注册、注销接口,同时统一管理input设备列表; + - Input设备管理:为各类输入设备驱动提供Input设备的注册、注销接口,同时统一管理Input设备列表。 - (2)input平台驱动:指各类input设备的公共抽象驱动(例如触摸屏的公共驱动),负责对板级硬件进行初始化、硬件中断处理、向manager注册input设备等; + - Input平台驱动:指各类Input设备的公共抽象驱动(例如触摸屏的公共驱动),负责对板级硬件进行初始化、硬件中断处理、向manager注册Input设备等。 - (3)input器件驱动:指各器件厂家的差异化驱动,通过适配平台驱动预留的差异化接口,实现器件驱动开发量最小化; + - Input器件驱动:指各器件厂家的差异化驱动,通过适配平台驱动预留的差异化接口,实现器件驱动开发量最小化。 - (4)input数据通道:提供一套通用的数据上报通道,各类别的input设备驱动均可用此通道上报input事件; + - Input数据通道:提供一套通用的数据上报通道,各类别的Input设备驱动均可用此通道上报Input事件。 - (5)input配置解析:负责对input设备的板级配置及器件私有配置进行解析及管理。 + - Input配置解析:负责对Input设备的板级配置及器件私有配置进行解析及管理。 - **基于HDF驱动框架开发器件驱动的优势** - 在HDF(Hardware Driver Foundation)[驱动管理框架](/pages/0004010001)的基础上,input驱动模型调用OSAL接口层和Platfom接口层提供的基础接口进行开发,包括bus通信接口、操作系统原生接口(memory、lock、thread、timer等)。由于OSAL接口和Platform接口屏蔽了芯片平台差异,所以基于input驱动模型实现的touchscreen驱动可以进行跨平台、跨OS迁移,以便逐步实现驱动的一次开发,多端部署。 + 在HDF(Hardware Driver Foundation)[驱动管理框架](/pages/0105020102)的基础上,Input驱动模型调用OSAL接口层和Platfom接口层提供的基础接口进行开发,包括bus通信接口、操作系统原生接口(memory、lock、thread、timer等)。由于OSAL接口和Platform接口屏蔽了芯片平台差异,所以基于Input驱动模型实现的touchscreen驱动可以进行跨平台、跨OS迁移,以便逐步实现驱动的一次开发,多端部署。 ## 接口说明 @@ -73,29 +73,29 @@ Touchscreen器件的硬件接口相对简单,根据PIN脚的属性,可以简 如上图所示的三类接口,分别做简要说明如下: 1. **电源接口** - - LDO\_1P8:1.8v数字电路 - - LDO\_3P3:3.3v模拟电路 + - LDO\_1P8:1.8V数字电路 + - LDO\_3P3:3.3V模拟电路 - 通常情况下,touchscreen驱动IC和LCD驱动IC是相互分离的,这种情况下,touchscreen驱动IC一般同时需要1.8v和3.3v两路供电。随着芯片演进,业内已有touchscreen驱动IC和LCD驱动IC集成在一颗IC中的芯片案例,对touchscreen而言,只需要关注1.8v供电即可,其内部需要的3.3v电源,会在驱动IC内部从LCD的VSP电源(典型值5.5V)中分出来。 + 通常情况下,touchscreen驱动IC和LCD驱动IC是相互分离的,这种情况下,touchscreen驱动IC一般同时需要1.8V和3.3V两路供电。随着芯片演进,业内已有touchscreen驱动IC和LCD驱动IC集成在一颗IC中的芯片案例,对touchscreen而言,只需要关注1.8V供电即可,其内部需要的3.3V电源,会在驱动IC内部从LCD的VSP电源(典型值5.5V)中分出来。 2. **IO控制接口** - Reset:reset管脚,用于在系统休眠、唤醒时,由主机侧对驱动IC进行复位操作。 - INT:中断管脚,需要在驱动初始化时,配置为输入上拉状态。在驱动IC检测到外部触摸信号后,通过操作中断管脚来触发中断,器件驱动则会在中断处理函数中进行报点数据读取等操作。 3. **通信接口** - - I2C:由于touchscreen的报点数据量相对较少,所以一般选用I2C方式传输数据。I2C的具体协议及对应操作接口,可以参考Platform接口层中的[“I2C”使用指南](/pages/0004010201#section5361140416)。 - - SPI:部分厂商,由于需要传递的数据不止报点坐标,而是需要获取基础容值,数据量较大,所以会选用SPI通信方式。SPI的具体协议及对应操作接口,可以参考Platform接口层中的[“SPI” 使用指南](/pages/0004010204#section193356154511)。 + - I2C:由于touchscreen的报点数据量相对较少,所以一般选用I2C方式传输数据。I2C的具体协议及对应操作接口,可以参考Platform接口层中的[“I2C”使用指南](/pages/0105020304#section5361140416)。 + - SPI:部分厂商,由于需要传递的数据不止报点坐标,而是需要获取基础容值,数据量较大,所以会选用SPI通信方式。SPI的具体协议及对应操作接口,可以参考Platform接口层中的[“SPI” 使用指南](/pages/010502030b#section193356154511)。 ## 开发步骤 Input驱动模型是基于HDF框架、Platform接口和OSAL接口开发,不区分操作系统和芯片平台,为touchscreen等输入器件提供统一的驱动开发架构。 -如下以touchscreen器件驱动为例,说明input驱动模型的完整加载流程: +如下以touchscreen器件驱动为例,说明Input驱动模型的完整加载流程: (1)设备描述配置:由开发者参考已有模板进行设备描述配置,包括驱动加载顺序、板级硬件信息、器件私有数据信息等。 -(2)加载input设备管理驱动:input设备管理驱动由HDF驱动加载,完成设备manager的创建并对其初始化。 +(2)加载Input设备管理驱动:Input设备管理驱动由HDF驱动加载,完成设备manager的创建并对其初始化。 (3)加载平台驱动:平台驱动由HDF框架加载,主要完成板级配置解析及硬件初始化,并提供器件注册接口。 @@ -103,13 +103,13 @@ Input驱动模型是基于HDF框架、Platform接口和OSAL接口开发,不区 (5)器件设备向平台驱动注册:将实例化的器件设备向平台驱动注册,实现设备和驱动的绑定,并完成中断注册、上下电等器件初始化工作。 -(6)input设备注册:在器件初始化完成后,实例化input设备,并将其注册到input manager进行管理。 +(6)Input设备注册:在器件初始化完成后,实例化Input设备,并将其注册到Input manager进行管理。 请参考如下相关步骤: 1. 设备描述配置 - 目前Input驱动基于HDF驱动框架编写,驱动的加载启动由HDF驱动管理框架统一处理。首先需要在对应的配置文件中,将驱动信息注册进去,如是否加载、加载优先级,此后HDF驱动框架会逐一启动注册过的驱动模块。驱动的相关配置请参考[HDF驱动框架配置指导](/pages/0004010001#section1969312275533)。 + 目前Input驱动基于HDF驱动框架编写,驱动的加载启动由HDF驱动管理框架统一处理。首先需要在对应的配置文件中,将驱动信息注册进去,如是否加载、加载优先级,此后HDF驱动框架会逐一启动注册过的驱动模块。驱动的相关配置请参考[HDF驱动框架配置指导](/pages/0105020102#section1969312275533)。 2. 板级配置及Touchscreen器件私有配置 @@ -117,7 +117,7 @@ Input驱动模型是基于HDF框架、Platform接口和OSAL接口开发,不区 3. 实现器件差异化适配接口 - 根据硬件单板设计的通信接口,使用Platform接口层提供的管脚操作接口配置对应的复位管脚、中断管脚以及电源操作,对于GPIO的操作,可参考[GPIO操作接口指导](/pages/0004010200#section1635911016188) + 根据硬件单板设计的通信接口,使用Platform接口层提供的管脚操作接口配置对应的复位管脚、中断管脚以及电源操作,对于GPIO的操作,可参考[GPIO操作接口指导](/pages/0105020302#section1635911016188) ## 开发实例 @@ -126,7 +126,7 @@ Input驱动模型是基于HDF框架、Platform接口和OSAL接口开发,不区 ### 设备描述配置 -如下配置主要包含input驱动模型各模块层级信息,具体原理可参考[HDF驱动开发指南](/pages/0004010001),HDF框架依据该配置信息实现对Input模型各模块的依次加载等。 +如下配置主要包含Input驱动模型各模块层级信息,具体原理可参考[HDF驱动开发指南](/pages/0105020102),HDF框架依据该配置信息实现对Input模型各模块的依次加载等。 ``` input :: host { diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/03.SENSOR.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/03.SENSOR.md" similarity index 41% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/03.SENSOR.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/03.SENSOR.md" index 09c72e1e3513a1c3899516228b4792376bdf9387..db13c6bba22b506b8cf4a93f6428bd0cbd663ebf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/03.SENSOR.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/03.SENSOR.md" @@ -1,6 +1,6 @@ --- title: SENSOR -permalink: /pages/0004010302 +permalink: /pages/0105020403 navbar: true sidebar: true prev: true @@ -9,36 +9,69 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # SENSOR -- [概述](#section3634112111) -- [接口说明](#section20930112117478) -- [开发步骤](#section1140943382) -- [开发实例](#section257750691) -- [测试指导](#section106021256121219) +- [概述](##概述) + - [功能简介](###功能简介) + - [运作机制](###运作机制) + +- [开发指导](##开发指导) + - [接口说明](#section188213414114) + - [开发步骤](#section7893102915819) + - [开发实例](#section257750691) + - [调测验证](#section106021256121219) + + +## 概述 -## 概述 +### 功能简介 -Sensor(传感器)驱动模块为上层Sensor服务系统提供稳定的Sensor基础能力API,包括Sensor列表查询、Sensor启停、Sensor订阅及去订阅,Sensor参数配置等功能;基于HDF(**H**ardware **D**river **F**oundation)驱动框架开发的Sensor驱动模型,实现跨操作系统迁移,器件差异配置等功能。Sensor驱动模型如下图1所示: +Sensor设备作为外接设备重要组成模块,通过Sensor驱动模型屏蔽硬件器件差异,为上层Sensor服务系统提供稳定的Sensor基础能力接口,包括Sensor列表查询、Sensor启停、Sensor订阅及取消订阅,Sensor参数配置等功能;Sensor设备驱动的开发是基于HDF驱动框架基础上,结合操作系统适配层(OSAL)和平台驱动接口(比如I2C/SPI/UART总线等平台资源)能力,屏蔽不同操作系统和平台总线资源差异,实现Sensor驱动“一次开发,多系统部署”的目标。Sensor驱动模型如[图1](#fig10451455446)所示: **图 1** Sensor驱动模型图 -![](/images/device-dev/driver/figures/Sensor驱动模型图.png "Sensor驱动模型图") -Sensor驱动模型对外开放的API接口能力如下: -- 提供Sensor HDI(**H**ardware **D**river **I**nterface)能力接口,简化服务开发。 -- 提供Sensor驱动模型能力接口:依赖HDF驱动框架实现Sensor器件驱动的注册,加载,去注册,器件探测等能力,提供同一类型Sensor器件驱动归一接口, 寄存器配置解析操作接口,总线访问抽象接口,平台抽象接口。 -- 提供开发者实现的能力接口:依赖HDF驱动框架的HCS\(**H**DF **C**onfiguration **S**ource\)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。 +### 运作机制 + +通过介绍Sensor驱动模型的加载以及运行流程,对模型内部关键组件以及关联组件之间的关系进行了划分,整体加载流程如[图2](#Sensor驱动模型图)所示: + +**图 2** Sensor驱动模型运行图 -## 接口说明 -Sensor驱动模型对HDI开放的API接口功能,参考表1。 + +Sensor驱动模型以标准系统Hi3516DV300产品中的加速度传感器驱动为例,介绍整个驱动加载及运行流程: + +1. 从device info HCS 的Sensor Host读取Sensor设备管理配置信息。 +2. HDF配置框架从HCB数据库解析Sensor设备管理配置信息,并关联对应设备驱动。 +3. 加载并初始化Sensor设备管理驱动。 +4. Sensor设备管理驱动向HDI发布Sensor基础能力接口。 +5. 从device info HCS 的Sensor Host读取加速度传感器驱动配置信息。 +6. 加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件驱动资源分配和数据处理队列创建。 +7. 从accel_xxx_config HCS读取加速度传感器差异化驱动配置和私有化配置信息。 +8. 加速度传感器差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。 +9. 加速度传感器差异化驱动完成器件探测,并分配加速度传感器配置资源,完成加速度传感器差异化接口注册。 +10. 加速度传感器探测成功之后,加速度传感器差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。 + +## 开发指导 + +### 接口说明 + +Sensor驱动模型对外开放的API接口能力如下: + +- 提供Sensor HDI(Hardware Driver Interface)能力接口,简化服务开发。 +- 提供Sensor驱动模型能力接口: + - 依赖HDF驱动框架实现Sensor器件驱动的注册,加载,去注册,器件探测等能力。 + - 提供同一类型Sensor器件驱动归一接口, 寄存器配置解析操作接口,总线访问抽象接口,平台抽象接口。 +- 提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。 + +Sensor驱动模型对外开放的API接口能力的具体实现参考[表1](#table203963834718): **表 1** Sensor驱动模型对外API接口功能介绍 + - - - - - - - - - - - - - - - - - -

功能分类

接口名

@@ -51,68 +84,56 @@ Sensor驱动模型对HDI开放的API接口功能,参考表1。

int32_t GetAllSensors(struct SensorInformation **sensorInfo, int32_t *count)

获取系统中注册的所有传感器信息,一种类型传感器信息包括传感器名字、设备厂商、固件版本号、硬件版本号、传感器类型编号、传感器标识、最大量程、精度、功耗。

+

获取系统中注册的所有传感器信息,一组完整传感器信息包括传感器名字、设备厂商、固件版本号、硬件版本号、传感器类型编号、传感器标识、最大量程、精度、功耗。

配置操作

int32_t Enable(int32_t sensorId)

使能一种传感器设备,只有数据订阅者使能传感器后,才能获取订阅的传感器数据。

+

使能指定传感器设备,只有数据订阅者使能传感器后,才能获取订阅的传感器数据。

int32_t Disable(int32_t sensorId)

去使能一种传感器设备。

+

去使能指定传感器设备。

int32_t SetBatch(iint32_t sensorId, int64_t samplingInterval, int64_t reportInterval)

设置一种传感器的数据采样间隔和数据上报间隔。

+

设置指定传感器的数据采样间隔和数据上报间隔。

int32_t SetMode(int32_t sensorTypeId, SensorUser *user, int32_t mode)

+

int32_t SetMode(int32_t sensorId, int32_t mode)

设置一种传感器的工作模式,不同的工作模式,上报数据方式不同。

+

设置指定传感器的工作模式,不同的工作模式,上报数据方式不同。

int32_t SetOption(int32_t sensorId, uint32_t option)

设置一种传感器量程,精度等可选配置。

+

设置指定传感器量程,精度等可选配置。

数据订阅操作

int32_t Register(RecordDataCallback cb)

-

订阅者注册传感器数据回调函数,系统会将获取到的传感器数据上报给订阅者。

+

int32_t Register(sensorId, RecordDataCallback cb);

int32_t Unregister(void)

-

订阅者去注册传感器数据回调函数。

+

订阅者根据不同sensorId注册传感器数据回调函数,系统会将获取到的传感器数据上报给订阅者。

接口实例

-

const struct SensorInterface *NewSensorInterfaceInstance(void)

+

int32_t Unregister(sensorId, RecordDataCallback cb)

创建传感器接口实例。

-

int32_t FreeSensorInterfaceInstance(void)

-

释放传感器接口实例。

+

订阅者根据sensorId和回调函数注销对应订阅者的传感器数据回调函数。

+Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无需实现,直接使用,参考[表2](#table1156812588320): -Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无需实现,直接使用,参考表2: - -**表 2** Sensor驱动模型对驱动开发者开放的功能接口列表 + **表2** Sensor驱动模型对驱动开发者开放的功能接口列表 + - @@ -138,7 +159,7 @@ Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无 - @@ -147,17 +168,7 @@ Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无 - - - - - - -

功能分类

接口名

@@ -128,7 +149,7 @@ Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无

添加当前类型的传感器设备到传感器设备管理。

int32_t DeleteSensorDevice(int32_t sensorId)

+

int32_t DeleteSensorDevice(const struct SensorBasicInfo *sensorBaseInfo)

删除传感器设备管理里指定的传感器设备。

上报指定类型传感器的数据到用户侧。

Sensor抽象总线和平台操作接口

+

Sensor抽象总线

int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, uint16_t dataLen)

int32_t WriteSensor(struct SensorBusCfg *busCfg, uint8_t *writeData, uint16_t len)

按照配置的总线方式,传感器配置数据写入寄存器。

-

int32_t CreateSensorThread(struct OsalThread *thread, OsalThreadEntry threadEntry, char *name, void *entryPara)

-

创建指定传感器的定时线程,用于传感器数据上报处理。

-

void DestroySensorThread(struct OsalThread *thread, uint8_t *status);

-

销毁传感器创建的定时线程。

+

按照配置的总线方式,将传感器配置数据写入寄存器。

通用配置操作接口

@@ -198,11 +209,12 @@ Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无
-Sensor驱动模型要求驱动开发者实现的接口功能,参考表3。 +Sensor驱动模型要求驱动开发者实现的接口功能,参考[表3](#table1083014911336): **表 3** Sensor驱动模型要求驱动开发者实现的接口列表 + - - - - -

功能分类

接口名

@@ -215,12 +227,7 @@ Sensor驱动模型要求驱动开发者实现的接口功能,参考表3。

int32_t init(void)

传感器设备探测成功后,需要对传感器器设备初始化配置。

-

int32_t GetInfo(struct SensorBasicInfo *info)

-

从传感器设备的HCS配置里,获取当前传感器设备的基本信息。

+

传感器设备探测成功后,需要对传感器设备初始化配置。

int32_t Enable(void)

@@ -245,7 +252,7 @@ Sensor驱动模型要求驱动开发者实现的接口功能,参考表3。

int32_t SetOption(uint32_t option)

根据可选配置,下发量程,精度等寄存器配置。

+

根据可选配置、下发量程和精度等寄存器配置。

void ReadSensorData(void)

@@ -255,613 +262,574 @@ Sensor驱动模型要求驱动开发者实现的接口功能,参考表3。
+接口实现参考[开发实例](#section257750691)章节。 -接口实现参考[SENSOR](#section257750691)章节。 - -## 开发步骤 - -Sensor驱动是基于HDF框架、PLATFORM和OSAL基础接口进行开发,不区分操作系统和芯片平台,为不同Sensor器件提供统一的驱动模型。本篇开发指导以加速度计传感器为例,介绍传感器驱动开发。 - -1. 加速度计传感器驱动注册。HDF驱动框架会提供统一的驱动管理模型,通过加速计传感器模块配置信息,识别并加载对应模块驱动。 -2. 加速度计传感器驱动初始化和去初始化。HDF驱动框架通过init入口函数,依次启动传感器设备驱动加载和分配传感器设备数据配置资源。HDF驱动框架通过release函数,释放驱动加载的资源和配置。 -3. 加速度计传感器寄存器组配置解析。不同类型传感器需要在hcs里配置器件对应的HCS配置文件,然后再设备驱动启动过程中探测器件是否在位,然后加载对应的配置文件,生成配置的结构体对象。 -4. 加速度计传感器驱动操作接口实现。实现各个类型传感器归一化驱动接口,如init,GetInfo,Enable,Disable,SetBatch,SetMode,SetOption,ReadSensorData等函数,完成传感器驱动配置下发和数据上报功能。 +### 开发步骤 +1. 基于HDF驱动框架,按照驱动Driver Entry程序,完成加速度抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。 +2. 完成加速度传感器驱动的设备信息配置。 +3. 完成加速度传感器抽象驱动内部接口开发,包括Enable、Disable、SetBatch、SetMode、SetOption、AccelCreateCfgData、AccelReleaseCfgData、AccelRegisterChipOps接口实现。 +4. 基于HDF驱动框架,按照驱动Driver Entry程序,完成加速度传感器差异化驱动开发,主要有Bind、Init、Release、Dispatch函数接口实现。 +5. 完成加速度传感器差异化驱动中差异化接口ReadData函数实现。 +6. 新增文件脚本适配。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->传感器驱动模型已经提供一部分能力集,包括驱动设备管理能力,抽象总线和平台操作接口能力,通用配置操作接口能力,配置解析操作接口能力,接口参考[表2](#table1156812588320)。需要开发人员实现部分有:1、传感器部分操作接口([表3](#table1083014911336));2、传感器HCS差异化数据配置;3、驱动基本功能验证。 - -## 开发实例 - -基于HDF驱动模型,加载启动加速度计传感器驱动,代码形式如下,具体原理可参考[HDF驱动开发指南](/pages/0004010001)。加速度传感器选择通讯接口方式为I2C,厂家选择博世BMI160加速度传感器。 - -1. 加速度计传感器驱动入口注册 - -- 加速度计传感器驱动入口函数实现 - -``` -/* 注册加速度计传感器入口数据结构体对象 */ -struct HdfDriverEntry g_sensorAccelDevEntry = { - .moduleVersion = 1, /* 加速度计传感器模块版本号 */ - .moduleName = "HDF_SENSOR_ACCEL", /* 加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样*/ - .Bind = BindAccelDriver, /* 加速度计传感器绑定函数 */ - .Init = InitAccelDriver, /* 加速度计传感器初始化函数 */ - .Release = ReleaseAccelDriver, /* 加速度计传感器资源释放函数 */ -}; - -/* 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动,当Init调用异常时,HDF框架会调用Release释放驱动资源并退出 */ -HDF_INIT(g_sensorAccelDevEntry); -``` - -- 加速度计传感器设备配置描述 - -加速度传感器模型使用HCS作为配置描述源码,HCS配置字段详细介绍参考[配置管理](/pages/0004010004)介绍。 - -``` -/* 加速度计传感器设备HCS配置 */ -device_sensor_accel :: device { - device0 :: deviceNode { - policy = 1; /* policy字段是驱动服务发布的策略 */ - priority = 105; /* 驱动启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证device的加载顺序 */ - preload = 2; /* 驱动按需加载字段,0表示加载,2表示不加载 */ - permission = 0664; /* 驱动创建设备节点权限 */ - moduleName = "HDF_SENSOR_ACCEL"; /* 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 */ - serviceName = "sensor_accel"; /* 驱动对外发布服务的名称,必须唯一 */ - deviceMatchAttr = "hdf_sensor_accel_driver"; /* 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等 */ - } -} -``` - -1. 加速度计传感器驱动初始化和去初始化 - -- 初始化入口函数init - -``` -/* 加速度计传感器驱动对外提供的服务绑定到HDF框架 */ -int32_t BindAccelDriver(struct HdfDeviceObject *device) -{ - CHECK_NULL_PTR_RETURN_VALUE(device, HDF_ERR_INVALID_PARAM); - - static struct IDeviceIoService service = { - .object = {0}, - .Dispatch = DispatchAccel, - }; - device->service = &service; - - return HDF_SUCCESS; -} -/*在探测到器件在位后,需要调用RegisterAccelChipOps注册差异化适配函数*/ -int32_t RegisterAccelChipOps(struct AccelOpsCall *ops) -{ - struct AccelDrvData *drvData = NULL; - - CHECK_NULL_PTR_RETURN_VALUE(ops, HDF_ERR_INVALID_PARAM); - - drvData = AccelGetDrvData(); - drvData->ops.Init = ops->Init; - drvData->ops.ReadData = ops->ReadData; - return HDF_SUCCESS; -} -/* 挂载加速度计传感器驱动归一化的接口函数 */ -static int32_t InitAccelOps(struct SensorDeviceInfo *deviceInfo) -{ - struct AccelDrvData *drvData = AccelGetDrvData(); - - (void)memset_s((void *)deviceInfo, sizeof(*deviceInfo), 0, sizeof(*deviceInfo)); - deviceInfo->ops.GetInfo = SetAccelInfo; - deviceInfo->ops.Enable = SetAccelEnable; - deviceInfo->ops.Disable = SetAccelDisable; - deviceInfo->ops.SetBatch = SetAccelBatch; - deviceInfo->ops.SetMode = SetAccelMode; - deviceInfo->ops.SetOption = SetAccelOption; - - if (memcpy_s(&deviceInfo->sensorInfo, sizeof(deviceInfo->sensorInfo), - &drvData->accelCfg->sensorInfo, sizeof(drvData->accelCfg->sensorInfo)) != EOK) { - HDF_LOGE("%s: copy sensor info failed", __func__); - return HDF_FAILURE; - } - /* 传感器类型标识可以在数据HCS配置文件里面配置,也可以在此处 */ - drvData->accelCfg->sensorInfo.sensorTypeId = SENSOR_TAG_ACCELEROMETER; - drvData->accelCfg->sensorInfo.sensorId = SENSOR_TAG_ACCELEROMETER; - - return HDF_SUCCESS; -} -/* 传感器寄存器初始化操作 */ -static int32_t InitAccelAfterConfig(void) -{ - struct SensorDeviceInfo deviceInfo; - - if (InitAccelConfig() != HDF_SUCCESS) { - HDF_LOGE("%s: init accel config failed", __func__); - return HDF_FAILURE; - } - - if (InitAccelOps(&deviceInfo) != HDF_SUCCESS) { - HDF_LOGE("%s: init accel ops failed", __func__); - return HDF_FAILURE; - } - - if (AddSensorDevice(&deviceInfo) != HDF_SUCCESS) { - HDF_LOGE("%s: add accel device failed", __func__); - return HDF_FAILURE; - } - - return HDF_SUCCESS; -} -/*通过器件探测函数,挂载器件差异化函数接口*/ -static int32_t DetectAccelChip(void) -{ - int32_t num; - int32_t ret; - int32_t loop; - struct AccelDrvData *drvData = AccelGetDrvData(); - CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); - - num = sizeof(g_accelDetectIfList) / sizeof(g_accelDetectIfList[0]); - for (loop = 0; loop < num; ++loop) { - if (g_accelDetectIfList[loop].DetectChip != NULL) { - ret = g_accelDetectIfList[loop].DetectChip(drvData->accelCfg); - if (ret == HDF_SUCCESS) { - drvData->detectFlag = true; - break; - } - } - } - - if (loop == num) { - HDF_LOGE("%s: detect accel device failed", __func__); - drvData->detectFlag = false; - return HDF_FAILURE; - } - return HDF_SUCCESS; -} -/* 加速度计传感器驱动初始化入口函数,主要功能为对传感器私有数据的结构体对象进行初始化,传感器HCS数据配置对象空间分配,传感器HCS数据配置初始化入口函数调用,传感器设备探测是否在位功能,传感器数据上报定时器创建,传感器归一化接口挂载,传感器设备注册功能 */ -int32_t InitAccelDriver(struct HdfDeviceObject *device) -{ - /* 获取传感器私有数据结构体对象 */ - struct AccelDrvData *drvData = AccelGetDrvData(); - - /* 同类型传感器不同厂家设备探测时,判断此类型传感器是否已经在位,若已经在位,无需再继续探测,直接返回 */ - if (drvData->detectFlag) { - HDF_LOGE("%s: accel sensor have detected", __func__); - return HDF_SUCCESS; - } - - CHECK_NULL_PTR_RETURN_VALUE(device, HDF_ERR_INVALID_PARAM); - /* 分配存放传感器数据配置的私有结构体数据对象,需要在驱动释放时释放分配的资源空间 */ - drvData->accelCfg = (struct SensorCfgData *)OsalMemCalloc(sizeof(*cfg)); - if (drvData->accelCfg == NULL) { - HDF_LOGE("%s: malloc sensor config data failed", __func__); - return HDF_FAILURE; - } - - drvData->accelCfg->regCfgGroup = &g_regCfgGroup[0]; - /* 初始化传感器配置数据主要是解析传感器通讯总线配置类型信息,传感器基本信息,传感器属性信息,传感器是否在位信息,寄存器分组信息 */ - if (GetSensorBaseConfigData(device->property, drvData->accelCfg) != HDF_SUCCESS) { - HDF_LOGE("%s: get sensor base config failed", __func__); - goto Base_CONFIG_EXIT; - } - - if (DetectAccelChip() != HDF_SUCCESS) { - HDF_LOGE("%s: accel sensor detect device no exist", __func__); - goto DETECT_CHIP_EXIT; - } - drvData->detectFlag = true; - if (ParseSensorRegConfig(drvData->accelCfg) != HDF_SUCCESS) { - HDF_LOGE("%s: detect sensor device failed", __func__); - goto REG_CONFIG_EXIT; - } - - if (InitAccelAfterConfig() != HDF_SUCCESS) { - HDF_LOGE("%s: init accel after config failed", __func__); - goto INIT_EXIT; - } - - HDF_LOGI("%s: init accel driver success", __func__); - return HDF_SUCCESS; - -INIT_EXIT: - DestroySensorThread(&drvData->thread, &drvData->threadStatus); - (void)DeleteSensorDevice(SENSOR_TAG_ACCELEROMETER); -REG_CONFIG_EXIT: - ReleaseSensorAllRegConfig(drvData->accelCfg); - (void)ReleaseSensorBusHandle(&drvData->accelCfg->busCfg); -DETECT_CHIP_EXIT: - drvData->detectFlag = false; -BASE_CONFIG_EXIT: - drvData->accelCfg->root = NULL; - drvData->accelCfg->regCfgGroup = NULL; - OsalMemFree(drvData->accelCfg); - drvData->accelCfg = NULL; - return HDF_FAILURE; -} - -/* 释放驱动初始化时分配的资源 */ -void ReleaseAccelDriver(struct HdfDeviceObject *device) -{ - (void)device; - struct AccelDrvData *drvData = NULL; - - drvData = AccelGetDrvData(); - (void)DestroySensorThread(&drvData->thread, &drvData->threadStatus); - (void)DeleteSensorDevice(SENSOR_TAG_ACCELEROMETER); - drvData->detectFlag = false; - - if (drvData->accelCfg != NULL) { - drvData->accelCfg->root = NULL; - drvData->accelCfg->regCfgGroup = NULL; - ReleaseSensorAllRegConfig(drvData->accelCfg); - (void)ReleaseSensorBusHandle(&drvData->accelCfg->busCfg); - OsalMemFree(drvData->accelCfg); - drvData->accelCfg = NULL; - } - - drvData->initStatus = false; -} -``` - -1. 加速度计传感器寄存器组配置信息 - -加速度计传感器数据配置只需要按照模板配置即可,基于模板配置的解析功能已经在**InitSensorConfigData**函数完成,只需初始化时调用即可。如果有新增配置项,需要同步修改此函数。 - -``` -加速度传感器数据配置模板(accel_config.hcs) -root { - sensorAccelConfig { - accelChipConfig { - /* 传感器设备信息模板 */ - template sensorInfo { - sensorName = "accelerometer"; /* 加速度计名字,字符最大长度16字节 */ - vendorName = "borsh_bmi160"; /* 传感器设备厂商,字符最大长度16字节 */ - firmwareVersion = "1.0"; /* 传感器固件版本号,默认1.0,字符最大长度16字节 */ - hardwareVersion = "1.0"; /* 传感器硬件版本号,默认1.0,字符最大长度16字节 */ - sensorTypeId = 1; /* 传感器类型编号,详见{@link SensorTypeTag} */ - sensorId = 1; /* 传感器的标识号,有传感器驱动开发者定义,推荐用{@link SensorTypeTag}枚举 */ - maxRange = 8; /* 传感器的最大量程,根据开发者需要配置 */ - precision = 0; /* 传感器的精度,与上报数据配合使用,上报数据结构体{@link SensorEvents } */ - power = 230; /* 传感器的功耗 */ - } - /* 传感器使用的总线类型和配置信息模板 */ - template sensorBusConfig { - busType = 0; /* 0:i2c 1:spi */ - busNum = 6; /* 芯片上分配给传感器的器件号 */ - busAddr = 0; /* 芯片上分配给传感器的地址 */ - regWidth = 1; /* 传感器寄存器地址宽度 */ - regBigEndian = 0; /* 传感器寄存器大小端 */ - } - /* 传感器设备属性模板 */ - template sensorAttr { - chipName = ""; /* 传感器芯片名字 */ - chipIdRegister = 0xf; /* 传感器在位检测寄存器地址 */ - chipIdValue = 0xd1; /* 校验传感器在位检测寄存器值 */ - } - } - } -} - -/* 根据不同器件硬件差异,修改模板配置,不修改的就会默认采用模板配置 */ -root { - sensorAccelConfig { - accel_bmi160_chip_config : accelChipConfig { - match_attr = "hdf_sensor_accel_driver"; /* 需要和加速度传感器设备配置match_attr字段保持一致 */ - accelInfo :: sensorInfo { - vendorName = "borsh_bmi160"; - sensorTypeId = 1; - sensorId = 1; - } - accelBusConfig :: sensorBusConfig { - busType = 0; /* i2c通讯方式 */ - busNum = 6; - busAddr = 0x68; - regWidth = 1; /* 1字节位宽 */ - } - accelAttr :: sensorAttr { - chipName = "bmi160"; - chipIdRegister = 0x00; - chipIdValue = 0xd1; - } - accelRegConfig { - /* regAddr: 寄存器地址 - value: 寄存器值 - mask: 寄存器值的掩码 - len: 寄存器值的数据长度(字节) - delay: 配置寄存器延时(ms) - opsType:操作类型 0-无 1-读 2-写 3-读并检查 4-位更新 - calType: 计算类型 0-无 1-写 2-取反 3-异或 4-左移 5-右移 - shiftNum: 移动位数 - debug: 调试开关,0-调试关闭 1-调试打开 - save: 保存数据开关,0-不保存数据 1-保存数据 +> +>- 传感器驱动模型已经提供一部分能力集,包括驱动设备管理能力、抽象总线和平台操作接口能力、通用配置操作接口能力、配置解析操作接口能力,接口参考[表2](#table1156812588320)。 +> +>- 需要开发人员实现部分有:传感器部分操作接口([表3](#table1083014911336))和传感器HCS差异化数据配置。 +> - 驱动基本功能验证。 + +### 开发实例 + +基于HDF驱动模型,加载启动加速度计传感器驱动,代码形式如下,具体原理可参考[HDF驱动开发指南](/pages/0105020102)。本例中加速度传感器选择博世BMI160,其通讯接口方式选择I2C。 + +1. 加速度传感器驱动入口注册 + + - 加速度传感器驱动入口函数实现 + + ``` + /* 注册加速度计传感器入口数据结构体对象 */ + struct HdfDriverEntry g_sensorAccelDevEntry = { + .moduleVersion = 1, //加速度计传感器模块版本号 + .moduleName = "HDF_SENSOR_ACCEL", //加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样 + .Bind = BindAccelDriver, // 加速度计传感器绑定函数 + .Init = InitAccelDriver, // 加速度计传感器初始化函数 + .Release = ReleaseAccelDriver, // 加速度计传感器资源释放函数 + }; + + /* 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动,当Init调用异常时,HDF框架会调用Release释放驱动资源并退出 */ + HDF_INIT(g_sensorAccelDevEntry); + ``` + + - 加速度传感器设备配置描述 + + 加速度传感器模型使用HCS作为配置描述源码,HCS配置字段请参考[配置管理](/pages/0105020105)介绍。 + + ``` + /* 加速度计传感器设备HCS配置 */ + device_sensor_accel :: device { + device0 :: deviceNode { + policy = 1; // 驱动服务发布的策略 + priority = 110; // 驱动启动优先级(0-200),值越大优先级越低,建议配置为100,优先级相同则不保证device的加载顺序 + preload = 0; // 驱动按需加载字段,0表示加载,2表示不加载 + permission = 0664; // 驱动创建设备节点权限 + moduleName = "HDF_SENSOR_ACCEL"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 + serviceName = "sensor_accel"; // 驱动对外发布服务的名称,必须唯一 + deviceMatchAttr = "hdf_sensor_accel_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等 + } + } + ``` + +2. 加速度传感器驱动操作接口实现 + + 开发者需要根据每种类型的传感器实现归一化接口。 + + ``` + /* 不使用函数暂时置空 */ + static int32_t SetAccelInfo(struct SensorBasicInfo *info) + { + (void)info; + + return HDF_ERR_NOT_SUPPORT; + } + /* 下发使能寄存器组的配置 */ + static int32_t SetAccelEnable(void) + { + int32_t ret; + struct AccelDrvData *drvData = AccelGetDrvData(); + + CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM); + CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); + + if (drvData->enable) { + HDF_LOGE("%s: Accel sensor is enabled", __func__); + return HDF_SUCCESS; + } + + ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_ENABLE_GROUP]); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Accel sensor enable config failed", __func__); + return ret; + } + + ret = OsalTimerCreate(&drvData->accelTimer, SENSOR_TIMER_MIN_TIME, AccelTimerEntry, (uintptr_t)drvData); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Accel create timer failed[%d]", __func__, ret); + return ret; + } + + ret = OsalTimerStartLoop(&drvData->accelTimer); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Accel start timer failed[%d]", __func__, ret); + return ret; + } + drvData->enable = true; + + return HDF_SUCCESS; + } + /* 下发去使能寄存器组的配置 */ + static int32_t SetAccelDisable(void) + { + int32_t ret; + struct AccelDrvData *drvData = AccelGetDrvData(); + + CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM); + CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); + + if (!drvData->enable) { + HDF_LOGE("%s: Accel sensor had disable", __func__); + return HDF_SUCCESS; + } + + ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_DISABLE_GROUP]); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Accel sensor disable config failed", __func__); + return ret; + } + + ret = OsalTimerDelete(&drvData->accelTimer); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Accel delete timer failed", __func__); + return ret; + } + drvData->enable = false; + + return HDF_SUCCESS; + } + /* 配置传感器采样率和数据上报间隔 */ + static int32_t SetAccelBatch(int64_t samplingInterval, int64_t interval) + { + (void)interval; + + struct AccelDrvData *drvData = NULL; + + drvData = AccelGetDrvData(); + CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM); + + drvData->interval = samplingInterval; + + return HDF_SUCCESS; + } + /* 设置传感器工作模式,当前支持实时模式 */ + static int32_t SetAccelMode(int32_t mode) + { + return (mode == SENSOR_WORK_MODE_REALTIME) ? HDF_SUCCESS : HDF_FAILURE; + } + + static int32_t SetAccelOption(uint32_t option) + { + (void)option; + return HDF_SUCCESS; + } + + /* 设置传感器可选配置 */ + static int32_t SetAccelOption(uint32_t option) + { + (void)option; + return HDF_ERR_NOT_SUPPORT; + } + ``` + +3. 加速度传感器驱动初始化和去初始化 + + ``` + /* 加速度计传感器驱动对外提供的服务绑定到HDF框架 */ + int32_t AccelBindDriver(struct HdfDeviceObject *device) + { + CHECK_NULL_PTR_RETURN_VALUE(device, HDF_ERR_INVALID_PARAM); + + struct AccelDrvData *drvData = (struct AccelDrvData *)OsalMemCalloc(sizeof(*drvData)); + if (drvData == NULL) { + HDF_LOGE("%s: Malloc accel drv data fail!", __func__); + return HDF_ERR_MALLOC_FAIL; + } + + drvData->ioService.Dispatch = DispatchAccel; + drvData->device = device; + device->service = &drvData->ioService; + g_accelDrvData = drvData; + return HDF_SUCCESS; + } + + /* 挂载加速度计传感器驱动归一化的接口函数 */ + static int32_t InitAccelOps(struct SensorCfgData *config, struct SensorDeviceInfo *deviceInfo) + { + CHECK_NULL_PTR_RETURN_VALUE(config, HDF_ERR_INVALID_PARAM); + + deviceInfo->ops.Enable = SetAccelEnable; + deviceInfo->ops.Disable = SetAccelDisable; + deviceInfo->ops.SetBatch = SetAccelBatch; + deviceInfo->ops.SetMode = SetAccelMode; + deviceInfo->ops.SetOption = SetAccelOption; + + if (memcpy_s(&deviceInfo->sensorInfo, sizeof(deviceInfo->sensorInfo), + &config->sensorInfo, sizeof(config->sensorInfo)) != EOK) { + HDF_LOGE("%s: Copy sensor info failed", __func__); + return HDF_FAILURE; + } + + return HDF_SUCCESS; + } + /* 提供给差异化驱动的初始化接口,完成加速度器件基本配置信息解析(加速度信息,加速度总线配置,加速度器件探测寄存器配置),器件探测,器件寄存器解析 */ + static int32_t InitAccelAfterDetected(struct SensorCfgData *config) + { + struct SensorDeviceInfo deviceInfo; + CHECK_NULL_PTR_RETURN_VALUE(config, HDF_ERR_INVALID_PARAM); + /* 初始化加速度计接口函数 */ + if (InitAccelOps(config, &deviceInfo) != HDF_SUCCESS) { + HDF_LOGE("%s: Init accel ops failed", __func__); + return HDF_FAILURE; + } + /* 注册加速度计设备到传感器管理模块 */ + if (AddSensorDevice(&deviceInfo) != HDF_SUCCESS) { + HDF_LOGE("%s: Add accel device failed", __func__); + return HDF_FAILURE; + } + /* 器件寄存器解析 */ + if (ParseSensorRegConfig(config) != HDF_SUCCESS) { + HDF_LOGE("%s: Parse sensor register failed", __func__); + (void)DeleteSensorDevice(&config->sensorInfo); + ReleaseSensorAllRegConfig(config); + return HDF_FAILURE; + } + return HDF_SUCCESS; + } + struct SensorCfgData *AccelCreateCfgData(const struct DeviceResourceNode *node) + { + …… + /* 如果探测不到器件在位,返回进行下个器件探测 */ + if (drvData->detectFlag) { + HDF_LOGE("%s: Accel sensor have detected", __func__); + return NULL; + } + if (drvData->accelCfg == NULL) { + HDF_LOGE("%s: Accel accelCfg pointer NULL", __func__); + return NULL; + } + /* 设备基本配置信息解析 */ + if (GetSensorBaseConfigData(node, drvData->accelCfg) != HDF_SUCCESS) { + HDF_LOGE("%s: Get sensor base config failed", __func__); + goto BASE_CONFIG_EXIT; + } + /* 如果探测不到器件在位,返回进行下个器件探测 */ + if (DetectSensorDevice(drvData->accelCfg) != HDF_SUCCESS) { + HDF_LOGI("%s: Accel sensor detect device no exist", __func__); + drvData->detectFlag = false; + goto BASE_CONFIG_EXIT; + } + drvData->detectFlag = true; + /* 器件寄存器解析 */ + if (InitAccelAfterDetected(drvData->accelCfg) != HDF_SUCCESS) { + HDF_LOGE("%s: Accel sensor detect device no exist", __func__); + goto INIT_EXIT; + } + return drvData->accelCfg; + …… + } + /* 加速度计传感器驱动初始化入口函数,主要功能为对传感器私有数据的结构体对象进行初始化,传感器HCS数据配置对象空间分配,传感器HCS数据配置初始化入口函数调用,传感器设备探测是否在位功能,传感器数据上报定时器创建,传感器归一化接口挂载,传感器设备注册功能 */ + int32_t InitAccelDriver(struct HdfDeviceObject *device) + { + int32_t AccelInitDriver(struct HdfDeviceObject *device) + { + …… + /* 工作队列资源初始化 */ + if (InitAccelData(drvData) != HDF_SUCCESS) { + HDF_LOGE("%s: Init accel config failed", __func__); + return HDF_FAILURE; + } + /* 分配加速度配置信息资源 */ + drvData->accelCfg = (struct SensorCfgData *)OsalMemCalloc(sizeof(*drvData->accelCfg)); + if (drvData->accelCfg == NULL) { + HDF_LOGE("%s: Malloc accel config data failed", __func__); + return HDF_FAILURE; + } + /* 挂接寄存器分组信息 */ + drvData->accelCfg->regCfgGroup = &g_regCfgGroup[0]; + …… + return HDF_SUCCESS; + } + + /* 释放驱动初始化时分配的资源 */ + void AccelReleaseDriver(struct HdfDeviceObject *device) + { + CHECK_NULL_PTR_RETURN(device); + struct AccelDrvData *drvData = (struct AccelDrvData *)device->service; + CHECK_NULL_PTR_RETURN(drvData); + /* 器件在位,释放已分配资源 */ + if (drvData->detectFlag) { + AccelReleaseCfgData(drvData->accelCfg); + } + OsalMemFree(drvData->accelCfg); + drvData->accelCfg = NULL; + /* 器件在位,销毁工作队列资源 */ + HdfWorkDestroy(&drvData->accelWork); + HdfWorkQueueDestroy(&drvData->accelWorkQueue); + OsalMemFree(drvData); + } + ``` + +4. 加速度传感器差异化驱动私有HCS配置实现 + + - 为了方便开发者使用传感器HCS私有配置,在sensor_common.hcs里面定义通用的传感器配置模板,加速度传感器直接引用模板修改对应的属性值即可。 + + ``` + accel sensor common config template + root { + sensorAccelConfig { + accelChipConfig { + /* 传感器设备信息模板 */ + template sensorInfo { + sensorName = "accelerometer"; // 加速度计名字,字符最大长度16字节 + vendorName = "borsh_bmi160"; // 传感器设备厂商,字符最大长度16字节 + firmwareVersion = "1.0"; // 传感器固件版本号,默认1.0,字符最大长度16字节 + hardwareVersion = "1.0"; // 传感器硬件版本号,默认1.0,字符最大长度16字节 + sensorTypeId = 1; // 传感器类型编号,详见{@link SensorTypeTag} + sensorId = 1; // 传感器的标识号,有传感器驱动开发者定义,推荐用{@link SensorTypeTag}枚举 + maxRange = 8; // 传感器的最大量程,根据开发者需要配置 + accuracy = 0; // 传感器的精度,与上报数据配合使用,上报数据结构体{@link SensorEvents } + power = 230; // 传感器的功耗 + } + /* 传感器使用的总线类型和配置信息模板 */ + template sensorBusConfig { + busType = 0; // 0:i2c 1:spi + busNum = 6; // 芯片上分配给传感器的器件号 + busAddr = 0; // 芯片上分配给传感器的地址 + regWidth = 1; // 传感器寄存器地址宽度 + regBigEndian = 0; // 传感器寄存器大小端 + } + /* 传感器设备属性模板 */ + template sensorAttr { + chipName = ""; // 传感器芯片名字 + chipIdRegister = 0xf; // 传感器在位检测寄存器地址 + chipIdValue = 0xd1; // 校验传感器在位检测寄存器值 + } + } + } + } + ``` + + - 开发者使用传感器HCS配置,在accel_config.hcs里面配置通用的传感器模板,加速度传感器直接引用模板并修改对应的属性值,在此基础上新增寄存器配置,生成accel_bmi160_config.hcs配置文件。 + + ``` + /* 根据不同器件硬件差异,修改模板配置,不修改的就会默认采用模板配置 */ + #include "accel_config.hcs" + root { + accel_bmi160_chip_config : sensorConfig { + match_attr = "hdf_sensor_accel_bmi160_driver"; + sensorInfo :: sensorDeviceInfo { + vendorName = "borsh_bmi160"; // max string length is 16 bytes + sensorTypeId = 1; // enum SensorTypeTag + sensorId = 1; // user define sensor id + } + sensorBusConfig:: sensorBusInfo { + busType = 0; // 0:i2c 1:spi + busNum = 6; + busAddr = 0x68; + regWidth = 1; // 1btye + } + sensorIdAttr :: sensorIdInfo{ + chipName = "bmi160"; + chipIdRegister = 0x00; + chipIdValue = 0xd1; + } + sensorRegConfig { + /* regAddr: register address + value: config register value + len: size of value + mask: mask of value + delay: config register delay time (ms) + opsType: enum SensorOpsType 0-none 1-read 2-write 3-read_check 4-update_bit + calType: enum SensorBitCalType 0-none 1-set 2-revert 3-xor 4-left shift 5-right shift + shiftNum: shift bits + debug: 0-no debug 1-debug + save: 0-no save 1-save */ - /* 传感器寄存器操作分组,按照分组进行有序配置 */ - /* 寄存器地址, 寄存器值, 寄存器值的掩码, 寄存器值的数据长度, 配置寄存器延时, 操作类型, 计算类型, 移动位数, 调试开关, 保存开关 */ + /* regAddr, value, mask, len, delay, opsType, calType, shiftNum, debug, save */ /* 初始化寄存器组 */ - initSeqConfig = [ - 0x7e, 0xb6, 0xff, 1, 5, 2, 0, 0, 0, 0, - 0x7e, 0x10, 0xff, 1, 5, 2, 0, 0, 0, 0 - ]; - /* 使能寄存器组 */ - enableSeqConfig = [ - 0x7e, 0x11, 0xff, 1, 5, 2, 0, 0, 0, 0, - 0x41, 0x03, 0xff, 1, 0, 2, 0, 0, 0, 0, - 0x40, 0x08, 0xff, 1, 0, 2, 0, 0, 0, 0 - ]; - /* 去使能寄存器组 */ - disableSeqConfig = [ - 0x7e, 0x10, 0xff, 1, 5, 2, 0, 0, 0, 0 - ]; - } - } - } -} -``` - -1. 加速度计传感器驱动操作接口实现 - -开发者需要根据每种类型的传感器实现归一化接口。 - -``` -/* 不使用函数暂时置空 */ -static int32_t SetAccelInfo(struct SensorBasicInfo *info) -{ - (void)info; - - return HDF_ERR_NOT_SUPPORT; -} -/* 下发使能寄存器组的配置 */ -static int32_t SetAccelEnable(void) -{ - int32_t ret; - struct AccelDrvData *drvData = AccelGetDrvData(); - - CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); - ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_ENABLE_GROUP]); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: accel sensor disable config failed", __func__); - return HDF_FAILURE; - } - - drvData->threadStatus = SENSOR_THREAD_RUNNING; - - return HDF_SUCCESS; -} -/* 下发去使能寄存器组的配置 */ -static int32_t SetAccelDisable(void) -{ - int32_t ret; - struct AccelDrvData *drvData = AccelGetDrvData(); - - CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); - - ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_DISABLE_GROUP]); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: accel sensor disable config failed", __func__); - return HDF_FAILURE; - } - - drvData->threadStatus = SENSOR_THREAD_STOPPED; - - return HDF_SUCCESS; -} -/* 配置传感器采样率和数据上报间隔 */ -static int32_t SetAccelBatch(int64_t samplingInterval, int64_t interval) -{ - (void)interval; - - struct AccelDrvData *drvData = AccelGetDrvData(); - drvData->interval = samplingInterval; - - return HDF_SUCCESS; -} -/* 设置传感器工作模式,当前支持实时模式 */ -static int32_t SetAccelMode(int32_t mode) -{ - return (mode == SENSOR_WORK_MODE_REALTIME) ? HDF_SUCCESS : HDF_FAILURE; -} -/* 设置传感器可选配置 */ -static int32_t SetAccelOption(uint32_t option) -{ - (void)option; - return HDF_ERR_NOT_SUPPORT; -} -``` - -- 差异化处理接口 - - ``` - /* 器件探测时,如果探测成功,则注册差异化处理函数到accel驱动模型里 */ - int32_t DetectAccelBim160Chip(struct SensorCfgData *data) - { - int32_t ret; - struct AccelOpsCall ops; - CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); - - if (strcmp(ACCEL_CHIP_NAME_BMI160, data->sensorAttr.chipName) != 0) { - return HDF_SUCCESS; - } - ret = InitAccelPreConfig(); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: init BMI160 bus mux config", __func__); - return HDF_FAILURE; - } - if (DetectSensorDevice(data) != HDF_SUCCESS) { - return HDF_FAILURE; - } - - /* 差异化处理函数 */ - ops.Init = InitBmi160; - ops.ReadData = ReadBmi160Data; - ret = RegisterAccelChipOps(&ops); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: register BMI160 accel failed", __func__); - (void)ReleaseSensorBusHandle(&data->busCfg); - return HDF_FAILURE; - } - return HDF_SUCCESS; - } - /* 初始化处理函数 */ - static int32_t InitBmi160(struct SensorCfgData *data) - { - int32_t ret; - - CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); - ret = SetSensorRegCfgArray(&data->busCfg, data->regCfgGroup[SENSOR_INIT_GROUP]); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: bmi160 sensor init config failed", __func__); - return HDF_FAILURE; - } - return HDF_SUCCESS; - } - /* 数据处理函数 */ - int32_t ReadBmi160Data(struct SensorCfgData *data) - { - int32_t ret; - struct AccelData rawData = { 0, 0, 0 }; - int32_t tmp[ACCEL_AXIS_NUM]; - struct SensorReportEvent event; - - (void)memset_s(&event, sizeof(event), 0, sizeof(event)); - - ret = ReadBmi160RawData(data, &rawData, &event.timestamp); - if (ret != HDF_SUCCESS) { - return HDF_FAILURE; - } - - event.sensorId = SENSOR_TAG_ACCELEROMETER; - event.option = 0; - event.mode = SENSOR_WORK_MODE_REALTIME; - - rawData.x = rawData.x * BMI160_ACC_SENSITIVITY_2G; - rawData.y = rawData.y * BMI160_ACC_SENSITIVITY_2G; - rawData.z = rawData.z * BMI160_ACC_SENSITIVITY_2G; - - tmp[ACCEL_X_AXIS] = (rawData.x * SENSOR_1K_UNIT) / SENSOR_CONVERT_UNIT; - tmp[ACCEL_Y_AXIS] = (rawData.y * SENSOR_1K_UNIT) / SENSOR_CONVERT_UNIT; - tmp[ACCEL_Z_AXIS] = (rawData.z * SENSOR_1K_UNIT) / SENSOR_CONVERT_UNIT; - - event.dataLen = sizeof(tmp); - event.data = (uint8_t *)&tmp; - ret = ReportSensorEvent(&event); - return ret; - } - ``` - -- 数据处理函数 - -创建传感器定时器,按照配置的采样率定时采样,并上报给数据订阅者。 - -``` -/* 传感器定时工作线程 */ -static int32_t ReadAccelDataThreadWorker(void *arg) -{ - (void)arg; - int64_t interval; - struct AccelDrvData *drvData = AccelGetDrvData(); - - drvData->threadStatus = SENSOR_THREAD_START; - while (true) { - if (drvData->threadStatus == SENSOR_THREAD_RUNNING) { - if (drvData->ops.ReadData != NULL) { - (void)drvData->ops.ReadData(drvData->accelCfg); - } - interval = OsalDivS64(drvData->interval, (SENSOR_CONVERT_UNIT * SENSOR_CONVERT_UNIT)); - OsalMSleep(interval); - } else if (drvData->threadStatus == SENSOR_THREAD_DESTROY) { - break; - } else { - OsalMSleep(ACC_DEFAULT_SAMPLING_200_MS / SENSOR_CONVERT_UNIT / SENSOR_CONVERT_UNIT); - } - - if ((!drvData->initStatus) || (drvData->interval < 0) || drvData->threadStatus != SENSOR_THREAD_RUNNING) { - continue; - } - } - - return HDF_SUCCESS; -} -/* 创建传感器定时器和器件初始化 */ -static int32_t InitAccelConfig(void) -{ - int32_t ret; - struct AccelDrvData *drvData = AccelGetDrvData(); - - if (drvData->threadStatus != SENSOR_THREAD_NONE && drvData->threadStatus != SENSOR_THREAD_DESTROY) { - HDF_LOGE("%s: accel thread have created", __func__); - return HDF_SUCCESS; - } - - ret = CreateSensorThread(&drvData->thread, ReadAccelDataThreadWorker, "hdf_sensor_accel", drvData); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: accel create thread failed", __func__); - drvData->threadStatus = SENSOR_THREAD_NONE; - return HDF_FAILURE; - } - - CHECK_NULL_PTR_RETURN_VALUE(drvData->ops.Init, HDF_ERR_INVALID_PARAM); - - ret = drvData->ops.Init(drvData->accelCfg); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: accel create thread failed", __func__); - drvData->threadStatus = SENSOR_THREAD_NONE; - return HDF_FAILURE; - } - drvData->initStatus = true; - return HDF_SUCCESS; -} -``` - -- 主要的数据结构 - -``` -/* 传感器转换单位*/ -#define SENSOR_CONVERT_UNIT 1000 -#define SENSOR_1K_UNIT 1024 -/* 传感器2g对应灵敏度转换值 */ -#define BMI160_ACC_SENSITIVITY_2G 61 -/* 传感器数据采样寄存器地址 */ -#define BMI160_ACCEL_X_LSB_ADDR 0X12 -#define BMI160_ACCEL_X_MSB_ADDR 0X13 -#define BMI160_ACCEL_Y_LSB_ADDR 0X14 -#define BMI160_ACCEL_Y_MSB_ADDR 0X15 -#define BMI160_ACCEL_Z_LSB_ADDR 0X16 -#define BMI160_ACCEL_Z_MSB_ADDR 0X17 -/* 传感器数据维度 */ -enum AccelAxisNum { - ACCEL_X_AXIS = 0, - ACCEL_Y_AXIS = 1, - ACCEL_Z_AXIS = 2, - ACCEL_AXIS_NUM = 3, -}; -/* 传感器每个维度值 */ -struct AccelData { - int32_t x; - int32_t y; - int32_t z; -}; -/* 传感器私有数据结构体 */ -struct AccelDrvData { - bool detectFlag; - uint8_t threadStatus; - uint8_t initStatus; - int64_t interval; - struct SensorCfgData *accelCfg; - struct OsalThread thread; - struct AccelOpsCall ops; -}; -/* 差异化适配函数 */ -struct AccelOpsCall { - int32_t (*Init)(struct SensorCfgData *data); - int32_t (*ReadData)(struct SensorCfgData *data); -}; -``` - -## 测试指导 + initSeqConfig = [ + 0x7e, 0xb6, 0xff, 1, 5, 2, 0, 0, 0, 0, + 0x7e, 0x10, 0xff, 1, 5, 2, 0, 0, 0, 0 + ]; + /* 使能寄存器组 */ + enableSeqConfig = [ + 0x7e, 0x11, 0xff, 1, 5, 2, 0, 0, 0, 0, + 0x41, 0x03, 0xff, 1, 0, 2, 0, 0, 0, 0, + 0x40, 0x08, 0xff, 1, 0, 2, 0, 0, 0, 0 + ]; + /* 去使能寄存器组 */ + disableSeqConfig = [ + 0x7e, 0x10, 0xff, 1, 5, 2, 0, 0, 0, 0 + ]; + } + } + } + ``` + +5. 加速度传感器差异化驱动实现 + + - 定义加速度传感器差异化驱动对应的HdfDriverEntry对象,其中Driver Entry入口函数定义如下: + + ``` + struct HdfDriverEntry g_accelBmi160DevEntry = { + .moduleVersion = 1, + .moduleName = "HDF_SENSOR_ACCEL_BMI160", + .Bind = Bmi160BindDriver, + .Init = Bmi160InitDriver, + .Release = Bmi160ReleaseDriver, + }; + HDF_INIT(g_accelBmi160DevEntry); + ``` + + - Bind驱动接口实例化。 + + ``` + int32_t Bmi160BindDriver(struct HdfDeviceObject *device) + { + CHECK_NULL_PTR_RETURN_VALUE(device, HDF_ERR_INVALID_PARAM); + struct Bmi160DrvData *drvData = (struct Bmi160DrvData *)OsalMemCalloc(sizeof(*drvData)); + if (drvData == NULL) { + HDF_LOGE("%s: Malloc Bmi160 drv data fail", __func__); + return HDF_ERR_MALLOC_FAIL; + } + drvData->ioService.Dispatch = DispatchBMI160; + drvData->device = device; + device->service = &drvData->ioService; + g_bmi160DrvData = drvData; + return HDF_SUCCESS; + } + ``` + + - Init驱动接口实例化。 + + ``` + int32_t Bmi160InitDriver(struct HdfDeviceObject *device) + { + …… + /* 加速度计差异化初始化配置 */ + ret = InitAccelPreConfig(); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Init BMI160 bus mux config", __func__); + return HDF_FAILURE; + } + /* 创建传感器配置数据接口,完成器件探测,私有数据配置解析 */ + drvData->sensorCfg = AccelCreateCfgData(device->property); + if (drvData->sensorCfg == NULL) { + return HDF_ERR_NOT_SUPPORT; + } + /* 注册差异化接口 */ + ops.Init = NULL; + ops.ReadData = ReadBmi160Data; + ret = AccelRegisterChipOps(&ops); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Register BMI160 accel failed", __func__); + return HDF_FAILURE; + } + /* 初始化器件配置 *、 + ret = InitBmi160(drvData->sensorCfg); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Init BMI160 accel failed", __func__); + return HDF_FAILURE; + } + return HDF_SUCCESS; + } + ``` + + - Release驱动接口实例化。 + + ``` + void Bmi160ReleaseDriver(struct HdfDeviceObject *device) + { + CHECK_NULL_PTR_RETURN(device); + struct Bmi160DrvData *drvData = (struct Bmi160DrvData *)device->service; + CHECK_NULL_PTR_RETURN(drvData); + AccelReleaseCfgData(drvData->sensorCfg); + drvData->sensorCfg = NULL; + OsalMemFree(drvData); + } + ``` + +6. 加速度传感器差异化函数接口实现 + + 需要开发者实现的ReadBmi160Data接口函数,在Bmi160InitDriver函数里面注册此函数。 + + ``` + int32_t ReadBmi160Data(struct SensorCfgData *data) + { + int32_t ret; + struct AccelData rawData = { 0, 0, 0 }; + int32_t tmp[ACCEL_AXIS_NUM]; + struct SensorReportEvent event; + (void)memset_s(&event, sizeof(event), 0, sizeof(event)); + ret = ReadBmi160RawData(data, &rawData, &event.timestamp); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: BMI160 read raw data failed", __func__); + return HDF_FAILURE; + } + event.sensorId = SENSOR_TAG_ACCELEROMETER; + event.option = 0; + event.mode = SENSOR_WORK_MODE_REALTIME; + …… + ret = ReportSensorEvent(&event); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: BMI160 report data failed", __func__); + } + return ret; + } + ``` + +7. 主要的数据结构 + + ``` + /* 传感器2g对应灵敏度转换值 */ + #define BMI160_ACC_SENSITIVITY_2G 61 + /* 传感器数据采样寄存器地址 */ + #define BMI160_ACCEL_X_LSB_ADDR 0X12 + #define BMI160_ACCEL_X_MSB_ADDR 0X13 + #define BMI160_ACCEL_Y_LSB_ADDR 0X14 + #define BMI160_ACCEL_Y_MSB_ADDR 0X15 + #define BMI160_ACCEL_Z_LSB_ADDR 0X16 + #define BMI160_ACCEL_Z_MSB_ADDR 0X17 + #define BMI160_STATUS_ADDR 0X1B + /* 传感器数据维度 */ + enum AccelAxisNum { + ACCEL_X_AXIS = 0, + ACCEL_Y_AXIS = 1, + ACCEL_Z_AXIS = 2, + ACCEL_AXIS_NUM = 3, + }; + /* 传感器每个维度值 */ + struct AccelData { + int32_t x; + int32_t y; + int32_t z; + }; + /* 传感器私有数据结构体 */ + struct AccelDrvData { + struct IDeviceIoService ioService; + struct HdfDeviceObject *device; + HdfWorkQueue accelWorkQueue; + HdfWork accelWork; + OsalTimer accelTimer; + bool detectFlag; + bool enable; + int64_t interval; + struct SensorCfgData *accelCfg; + struct AccelOpsCall ops; + }; + /* 差异化适配函数 */ + struct AccelOpsCall { + int32_t (*Init)(struct SensorCfgData *data); + int32_t (*ReadData)(struct SensorCfgData *data); + }; + ``` + +### 调测验证 驱动开发完成后,在传感器单元测试里面开发自测试用例,验证驱动基本功能。测试环境采用开发者自测试平台。 ``` -/* 标识是否上报传感器数据 */ -static int32_t g_sensorDataFlag = 0; -/* 保持获取的传感器接口实例地址 */ -static const struct SensorInterface *g_sensorDev = nullptr; +static int32_t g_sensorDataFlag = 0; //标识是否上报传感器数据 +static const struct SensorInterface *g_sensorDev = nullptr; //保持获取的传感器接口实例地址 /* 订阅者注册数据上报函数 */ static int SensorTestDataCallback(struct SensorEvents *event) @@ -896,14 +864,14 @@ void HdfSensorTest::TearDownTestCase() /* 传感器驱动测试验证 */ HWTEST_F(HdfSensorTest,TestAccelDriver_001, TestSize.Level0) { - int32_t sensorInterval = 1000000000; /* 数据采样率单位纳秒 */ - int32_t pollTime = 5; /* 数据采样时间单位秒 */ - int32_t accelSensorId = 1; /* 加速度传感器类型标识为1 */ + int32_t sensorInterval = 1000000000; // 数据采样率单位纳秒 + int32_t pollTime = 5; // 数据采样时间单位秒 + int32_t accelSensorId = 1; // 加速度传感器类型标识为1 int32_t count = 0; int ret; struct SensorInformation *sensorInfo = nullptr; - ret = g_sensorDev->Register(SensorTestDataCallback) + ret = g_sensorDev->Register(0, TraditionSensorTestDataCallback) EXPECT_EQ(SENSOR_NULL_PTR, ret); ret = g_sensorDev->GetAllSensors(&sensorInfo, &count); @@ -930,7 +898,7 @@ HWTEST_F(HdfSensorTest,TestAccelDriver_001, TestSize.Level0) g_sensorDataFlag = 0; EXPECT_EQ(0, ret); - ret = g_sensorDev->Unregister(); + ret = g_sensorDev->Unregister(0, TraditionSensorTestDataCallback); EXPECT_EQ(0, ret); } ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/04.WLAN.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/04.WLAN.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/04.WLAN.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/04.WLAN.md" index 7d5aa11efce5d5b06d66a4fbe34f426182141a5d..c795ee28f4c02be30c918b102461e38a5ed3ca08 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/04.WLAN.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/04.WLAN.md" @@ -1,6 +1,6 @@ --- title: WLAN -permalink: /pages/0004010303 +permalink: /pages/0105020404 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # WLAN diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/05.AUDIO.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/05.AUDIO.md" new file mode 100644 index 0000000000000000000000000000000000000000..d442dd6df855991129316706b67ec0593f293ee5 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/05.AUDIO.md" @@ -0,0 +1,1422 @@ +--- +title: AUDIO +permalink: /pages/0105020405 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# AUDIO + +- **[Audio驱动概述](#section1000)** + +- **[Audio驱动框架介绍](#section2000)** + +- **[Audio驱动开发](#section3000)** + + - **[Audio ADM模块框架介绍](#section3100)** + - [启动流程](#section3111) + - [播放流程](#section3112) + - [控制流程](#section3113) + + - **[Audio驱动开发步骤](#section3200)** + - [已有平台开发](#section3221) + - [新平台开发](#section3222) + +- **[Audio驱动开发实例](#section4000)** + - [Codec驱动开发实例](#section4100) + - [Codec数据结构填充](#section4111) + - [codecDevice和codecDai设备初始化](#section4112) + - [Codec操作函数集实现](#section4113) + - [Codec注册绑定到HDF](#section4114) + - [HCS配置流程](#section4115) + - [Accessory驱动开发实例](#section4200) + - [Accessory数据结构填充](#section4221) + - [accessoryDevice和accessoryDai设备初始化](#section4222) + - [Accessory操作函数集实现](#section4223) + - [Accessory注册绑定到HDF](#section4224) + - [HCS配置流程](#section4225) + - [Platform驱动开发实例](#section4300) + - [Platform数据结构填充](#section4331) + - [dmaDevice设备初始化](#section4332) + - [DMA操作函数集实现](#section4333) + - [Platform注册绑定到HDF](#section4334) + - [HCS配置流程](#section4335) + - [Dai驱动开发实例](#section4400) + - [Dai数据结构填充](#section4441) + - [daiDevice设备初始化](#section4442) + - [Dai操作函数集实现](#section4443) + - [Dai注册绑定到HDF](#section4444) + - [HCS配置流程](#section4445) + - [Makefile中添加编译配置](#section4500) + - [源码结构与目录](#section4600) + +- **[使用HAL的开发步骤与实例](#section5000)** + - [HAL模块使用步骤](#section5100) + - [HAL使用实例](#section5200) + +- **[总结](#section9999)** + +# Audio驱动概述 + +多媒体系统是物联网设备开发中不可缺少的一部分,Audio作为其中重要的一个模块,Audio驱动模型的构建显得尤为重要。 + +本文主要介绍基于HDF(Hardware Driver Foundation)驱动框架开发的Audio驱动,包括Audio驱动的架构组成和功能部件。芯片厂商可以根据此驱动架构,进行各自驱动的开发及HAL层接口的调用。 + + + +# Audio驱动框架介绍 + +Audio驱动框架基于[HDF驱动框架](https://device.harmonyos.com/cn/docs/documentation/guide/driver-hdf-overview-0000001051715456)实现。Audio驱动架构组成: +![](/images/device-dev/driver/figures/Audio框架图.png) + +驱动架构主要由以下几部分组成。 +- HDI adapter : 实现Audio HAL层驱动(HDI接口适配),给Audio服务(frameworks)提供所需的音频硬件驱动能力接口。包含 Audio Manager、Audio Adapter、 Audio Control、Audio Capture、Audio Render 等接口对象。 +- Audio Interface Lib : 配合内核中的Audio Driver Model使用,实现音频硬件的控制、录音数据的读取、播放数据的写入。它里面包括Stream_ctrl_common 通用层,主要是为了和上层的audio HDI adapter 层进行对接。 +- ADM(Audio Driver Model): 音频驱动框架模型,向上服务于多媒体音频子系统,便于系统开发者能够更便捷的根据场景来开发应用。向下服务于具体的设备厂商,对于Codec和DSP设备厂商来说,可根据ADM模块提供的向下统一接口适配各自的驱动代码,就可以实现快速开发和适配OpenHarmony系统。 +- Audio Control Dispatch : 接收lib层的控制指令并将控制指令分发到驱动层。 +- Audio Stream Dispatch : 接收lib层的数据并将数据分发到驱动层。 + +- Card Manager : 多声卡管理模块。每个声卡含有Dai、Platform、Codec、Accessory、Dsp、Sapm模块。 +- Platform Driver : 驱动适配层。 +- SAPM(Smart Audio Power Manager) : 电源管理模块,对整个ADM电源进行功耗策略优化。 + +# Audio驱动开发 + +以下将基于Audio驱动框架,并以Hi3516DV300平台为例,介绍相关驱动开发的具体步骤。 + +## Audio ADM模块框架介绍 +Audio驱动对HDI层提供三个服务hdf_audio_render、hdf_audio_capture、hdf_audio_control。开发板dev目录下 驱动服务节点如下: + +```c +# ls -l hdf_audio* +crw-rw---- 1 system system 248, 6 1970-01-01 00:00 hdf_audio_capture //音频数据录音流服务。 +crw-rw---- 1 system system 248, 4 1970-01-01 00:00 hdf_audio_codec_dev0 //音频声卡设备0名称。 +crw-rw---- 1 system system 248, 4 1970-01-01 00:00 hdf_audio_codec_dev1 //音频声卡设备1名称。 +crw-rw---- 1 system system 248, 5 1970-01-01 00:00 hdf_audio_control //音频控制流服务。 +crw-rw---- 1 system system 248, 7 1970-01-01 00:00 hdf_audio_render //音频数据播放流务。 +``` + +音频声卡设备包括的驱动服务: + +hdf_audio_codec_dev0 +- dma_service_0 : dma 服务 +- dai_service : cpu dai 服务 +- codec_service_0 : codec 服务(特指内置codec) +- dsp_service_0 : dsp 服务(可选项) + +hdf_audio_codec_dev1 +- dma_service_0 : dma 服务 +- dai_service : cpu dai 服务 +- codec_service_1 : accessory 服务(特指smartPA) +- dsp_service_0 : dsp 服务(可选项) + +### 启动流程 + +![](/images/device-dev/driver/figures/ADM启动流程图.png) + +1. 系统启动时audio模块的Platform、Codec、Accessory、Dsp、Dai各个驱动首先被加载,各驱动从各自私有配置文件中获取配置信息,并将获取的配置信息保存到各驱动的Data数据结构中。 + +2. 各驱动模块调用ADM注册接口将自己添加到各驱动模块的链表中。 + +3. ADM模块读取hdf_audio_driver_0和hdf_audio_driver_1配置信息,加载各模块的具体设备。 + +4. ADM模块调用各模块的初始化函数对各模块设备进行初始化。 + +5. 将初始化成功的音频设备添加到cardManager链表。 + +### 播放流程 +![=](/images/device-dev/driver/figures/ADM播放流程图.png) +1. 播放音频时,Interface Lib层通过播放流服务下发Render Open指令,Audio Stream Dispatch服务收到指令后分别调用各模块的函数接口对指令进行下发。 + +2. Interface Lib层通过控制服务下发通路选择指令,Control Dispatch控制服务收到指令后调用Dai模块接口设置通路。 + +3. Interface Lib层通过播放流服务下发硬件参数,Audio Stream Dispatch服务收到参数后分别调用各模块参数设置接口,对硬件参数进行设置。 + +4. Interface Lib层通过播放流服务下发播放启动指令,Audio Stream Dispatch服务收到指令后分别调用各模块启动接口,对各模块进行启动设置。 + +5. Interface Lib层通过播放流服务下发音频数据,Audio Stream Dispatch服务收到数据后调用Platform AudioPcmWrite接口将音频数据传给Dma。 + +6. Interface Lib层通过播放流服务下发播放停止指令,Audio Stream Dispatch服务收到指令后分别调用各模块停止接口,对各模块进行停止设置。 + +7. Interface Lib层通过播放流服务下发Render Close指令,Audio Stream Dispatch服务收到指令后调用Platform AudioRenderClose对已申请资源进行释放。 + +### 控制流程 + +![](/images/device-dev/driver/figures/ADM控制流程图.png) + +1. 设置音量,首先Interface Lib层通过控制服务下发获取音量范围指令,Control Dispatch控制服务收到指令后进行解析,并调用Codec模块Get函数,获取可设置音量的范围。 +2. Interface Lib层通过控制服务下发设置音量指令,Control Dispatch控制服务收到指令后进行解析,并调用Codec模块Set函数设置音量。 + +## Audio驱动开发步骤 + +### 已有平台开发 + +ADM适配已有平台(Hi3516DV300)Codec或Accessory(Smart PA)的驱动开发流程: + +![](/images/device-dev/driver/figures/开发流程图1.png) + +- 根据芯片说明将相关寄存器信息配置到Codec或Smart PA的私有HCS中。 + +- 如果新添加Codec或Smart PA和已适配Codec或Smart PA的工作流程相同则不需要实现Codec或Smart PA的操作函数集和配置编译文件。 + + +- 进行编译调试验证。 + +### 新平台开发 + +ADM适配新平台Audio驱动开发流程: + +![](/images/device-dev/driver/figures/开发流程图2.png) + +Audio驱动需要将Audio相关的Codec(可选)、Dai、DMA、DSP(可选)、Smart PA(可选)驱动进行适配。 + +- 根据芯片说明将各模块驱动的寄存器信息配置到各模块的私有配置文件中。 + +- 实现各模块的操作函数集。 + +- 修改配置Audio模块编译文件。 + +- 进行编译调试验证。 + + + +# Audio驱动开发实例 + +代码路径:drivers/peripheral/audio + +下面以Hi3516DV300为例,介绍audio的codec驱动、accessory驱动、dai驱动、platform驱动开发步骤。 + +## Codec驱动开发实例 +代码路径:drivers/peripheral/audio/chipsets/hi3516dv300/codec + +codec驱动开发主要包含如下几个重要步骤: +1. 定义填充一个具体的codec +2. 实现codec回调函数 +3. 注册绑定到HDF框架 +4. 配置HCS和Makefile + +### Codec数据结构填充 + +Codec模块需要填充如下3个结构体: + +- g_codecData:codec设备的操作函数集和私有数据集。 + +- g_codecDaiDeviceOps:codecDai的操作函数集,包括启动传输和参数配置等函数接口。 + +- g_codecDaiData:codec的数字音频接口的操作函数集和私有数据集。 + +```c +struct CodecData g_codecData = { + .Init = CodecDeviceInit, // codec设备初始化(适配新平台需重新实现) + .Read = AudioDeviceReadReg, // 读寄存器(现有框架已实现,无需适配) + .Write = AudioDeviceWriteReg, // 写寄存器(现有框架已实现,无需适配) +}; + +struct AudioDaiOps g_codecDaiDeviceOps = { + .Startup = CodecDaiStartup, // 启动传输(适配新平台需重新实现) + .HwParams = CodecDaiHwParams, // 参数配置(适配新平台需重新实现) +}; + +struct DaiData g_codecDaiData = { + .DaiInit = CodecDaiDeviceInit, // codecdai设备初始化(适配新平台需重新实现) + .ops = &g_codecDaiDeviceOps, //codecdai操作函数 +}; +``` + +### codecDevice和codecDai设备初始化 + +CodecDeviceInit将完成AIAO的设置、寄存器默认值初始化、g_audioControls插入到controls链、电源管理初始化、通路选择设置等。 + +```c +int32_t CodecDeviceInit(struct AudioCard *audioCard, struct CodecDevice *codec) +{ + ... + /* hi3516平台AIAO的Set和Get 注册*/ + CodecSetCtlFunc(codec->devData, AudioCodecAiaoGetCtrlOps, AudioCodecAiaoSetCtrlOps) + ... + /* hi3516平台codec寄存器IoRemap*/ + CodecHalSysInit(); + ... + /* hi3516平台codec寄存器默认值初始化*/ + CodecRegDefaultInit(codec->devData->regCfgGroup); + ... + /* hi3516平台g_audioControls 挂到Control链表上*/ + AudioAddControls(audioCard, codec->devData->controls, codec->devData->numControls); + ... + /* hi3516平台codec加载到sapm*/ + AudioSapmNewComponents(audioCard, codec->devData->sapmComponents, codec->devData->numSapmComponent); + ... + /* hi3516平台codec加挂到通路选择链表上*/ + AudioSapmAddRoutes(audioCard, g_audioRoutes, HDF_ARRAY_SIZE(g_audioRoutes); + ... + AudioSapmNewControls(audioCard); + ... + /* hi3516平台codec电源管理*/ + AudioSapmSleep(audioCard); + ... + return HDF_SUCCESS; +} +``` + +CodecDaiDeviceInit将完成codecDai侧初始化,hi3516此处未涉及,接口保留: + +```c +int32_t CodecDaiDeviceInit(struct AudioCard *card, const struct DaiDevice *device) + +{ + ... + AUDIO_DRIVER_LOG_DEBUG("codec dai device name: %s\n", device->devDaiName); + (void)card; + return HDF_SUCCESS; +} +``` + +### Codec操作函数集实现 + +codec模块当前封装了OSAL读写寄存器的Read、Write函数。 + +如新增平台无法使用OSAL的Read、Write函数来操作寄存器,则此Read、Write函数接口需自行实现。 + +```c +int32_t AudioDeviceReadReg(unsigned long virtualAddress, uint32_t reg, uint32_t *val) +{ + ... + *val = OSAL_READL((void *)((uintptr_t)(virtualAddress + reg))); + return HDF_SUCCESS; +} + +int32_t AudioDeviceWriteReg(unsigned long virtualAddress, uint32_t reg, uint32_t value) +{ + OSAL_WRITEL(value, (void *)((uintptr_t)(virtualAddress + reg))); + return HDF_SUCCESS; +} +``` + +CodecDaiStartup为启动时的一些设置。 + +```c +int32_t CodecDaiStartup(const struct AudioCard *card, const struct DaiDevice *device) +{ + int32_t ret; + ... + (void)card; + ret = CodecSetAdcTuneEnable(device->devData->regCfgGroup); + ... + return HDF_SUCCESS; +} +``` + +CodecDaiHwParams为参数配置,包括采样率、位宽等。 + +```c +int32_t CodecDaiHwParams(const struct AudioCard *card, const struct AudioPcmHwParams *param) +{ + unsigned int bitWidth; + struct CodecDaiParamsVal codecDaiParamsVal; + ... + int ret = AudioFramatToBitWidth(param->format, &bitWidth); + ... + codecDaiParamsVal.frequencyVal = param->rate; + codecDaiParamsVal.formatVal = bitWidth; + ret = CodecDaiParamsUpdate(card->rtd->codecDai->devData->regCfgGroup, codecDaiParamsVal); + ... + return HDF_SUCCESS; +} +``` + +### Codec注册绑定到HDF + +此处依赖HDF框架的驱动实现方式,具体流程可参考[HDF驱动框架](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf.md)指导。 + +填充g_codecDriverEntry结构体,moduleName与device_info.hcs中的moduleName匹配,实现Bind、Init、Release函数指针。 + +drivers/peripheral/audio/chipsets/hi3516dv300/codec/src/hi3516_codec_adapter.c + +```c +struct HdfDriverEntry g_codecDriverEntry = { + .moduleVersion = 1, + .moduleName = "CODEC_HI3516", + .Bind = CodecDriverBind, + .Init = CodecDriverInit, + .Release = CodecDriverRelease, +}; +HDF_INIT(g_codecDriverEntry); +``` + +CodecDriverBind:将HDF中device绑定到codec,将codec service注册到HDF框架。 + +```c +static int32_t CodecDriverBind(struct HdfDeviceObject *device) +{ + struct CodecHost *codecHost = (struct CodecHost *)OsalMemCalloc(sizeof(*codecHost)); + ... + codecHost->device = device; + device->service = &codecHost->service; + return HDF_SUCCESS; +} +``` + +CodecDriverInit:获取codecServive名字和私有寄存器配置,并通过AudioRegisterCodec插入到链表中。 + +```c +static int32_t CodecDriverInit(struct HdfDeviceObject *device) +{ + ... + CodecGetConfigInfo(device, &g_codecData); + CodecSetConfigInfo(&g_codecData, &g_codecDaiData); + CodecGetServiceName(device, &g_codecData.drvCodecName); + CodecGetDaiName(device, &g_codecDaiData.drvDaiName); + AudioRegisterCodec(device, &g_codecData, &g_codecDaiData); + ... + return HDF_SUCCESS; +} +``` + +CodecDriverRelease:释放驱动资源。 + +```c +static void CodecDriverRelease(struct HdfDeviceObject *device) +{ + codecHost = (struct CodecHost *)device->service; + OsalMemFree(codecHost); +} +``` + +### HCS配置流程 + +hcs中配置驱动节点、加载顺序、服务名称等。hcs语法可参考HDF框架的[配置管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md)。 + +标准系统配置文件路径: + +vendor/hisilicon/Hi3516DV300/hdf_config/khdf/ + +小型系统配置文件路径: + +vendor/hisilicon/hispark_taurus/hdf_config/ + +**device_info.hcs中配置Codec设备信息** + +添加Codec节点配置。修改如下配置中的moduleName,该名字会与HdfDriverEntry结构体中moduleName进行匹配,一般情况需体现出硬件平台名称。例:moduleName = "CODEC_HI3516"。 + +代码片段如下: + +```c + audio :: host { + device_codec :: device { + device0 :: deviceNode { + policy = 1; // codec模块只对内核提供服务 + priority = 50; // codec模块需在HDF_AUDIO模块之前加载 + preload = 0; + permission = 0666; + moduleName = "CODEC_HI3516"; // 名字会与HdfDriverEntry结构体中moduleName进行匹配 + serviceName = "codec_service_0"; // 对外提供的服务名称 + deviceMatchAttr = "hdf_codec_driver"; //私有配置属性名称,通过此名称匹配对应的私有数据(包含寄存器配置) + } + } +``` + +**audio_config.hcs中配置私有依赖** + +配置audio_card设备依赖的codec、platform、dai、dsp、accessory之间的依赖关系。 + +代码片段如下: + +```c +root { + platfrom { + ... + controller_0x120c1001 :: card_controller { + //配置私有数据属性名称,与device_info.hcs中的deviceMatchAttr对应 + match_attr = "hdf_audio_driver_1"; + serviceName = "hdf_audio_smartpa_dev0"; //对外提供的服务名称 + accessoryName = "codec_service_1"; //外置codec服务名称 + platformName = "dma_service_0"; //dma服务 + cpuDaiName = "dai_service"; //cpu dai 服务 + accessoryDaiName = "accessory_dai"; //外置dai + dspName = "dsp_service_0"; //dsp服务名称 + dspDaiName = "dsp_dai"; //dsp dai + } + } +} +``` + +**codec_config.hcs中配置私有寄存器** + +与配置在device_info.hcs中codec的deviceMatchAttr匹配,目前配置中包含寄存器配置。 + +绑定控制功能配置主要是将控制功能及其寄存器参数按统一的结构规范,配置在HCS文件中并获取与解析后增加到控制链表中。 + +- regConfig:寄存器与控制功能配置组名称。 + +- ctrlParamsSeqConfig:控制功能寄存器配置组名称。 + +- daiStartupSeqConfig:Dai启动配置配置组名称。 + +- daiParamsSeqConfig:播放参数配置组名称。 + +- resetSeqConfig:重置过程寄存器配置组名称。 + +- initSeqConfig:初始化过程寄存器配置组名称。 + +- controlsConfig:控制功能配置组,其中array index(具体业务场景)和 iface(与HAL保持一致)为固定的值。 + +``` +array index +0:Main Playback Volume +1:Main Capture Volume +2:Playback Mute +3:Capture Mute +4:Mic Left Gain +5:Mic Right Gain +6:External Codec Enable +7:Internally Codec Enable +8:Render Channel Mode +9:Capture Channel Mode +iface +0:virtual dac device +1:virtual adc device +2:virtual adc device +3:virtual mixer device +4:Codec device +5:PGA device +6:AIAO device +``` + +ctrlParamsSeqConfig:控制功能寄存器配置组,其中item与controlsConfig组中的item位置顺序一一对应,表示某一功能对应的寄存器配置。 + +```c + root { + platfrom { + template codec_controller { + match_attr = ""; + serviceName = ""; + codecDaiName = ""; + } + controller_0x120c1030 :: codec_controller { + match_attr = "hdf_codec_driver"; + serviceName = "codec_service_0"; + codecDaiName = "codec_dai"; + + /* 3516寄存器基地址 */ + idInfo { + chipName = "hi3516"; //codec名字 + chipIdRegister = 0x113c0000; //codec 基地址 + chipIdSize = 0x1000; //codec 地址偏移 + } + + /* 寄存器配置,包含各种寄存器配置信息 */ + regConfig { + /* reg: register address + rreg: register address + shift: shift bits + rshift: rshift bits + min: min value + max: max value + mask: mask of value + invert: enum InvertVal 0-uninvert 1-invert + value: value + */ + + /* reg, value */ + initSeqConfig = [ + 0x14, 0x04000002, + 0x18, 0xFD200004, + 0x1C, 0x00180018, + 0x20, 0x83830028, + 0x24, 0x00005C5C, + 0x28, 0x00130000, + 0x30, 0xFF035A00, + 0x34, 0x08000001, + 0x38, 0x06062424, + 0x3C, 0x1E1EC001, + 0x14, 0x04000002 + ]; + + /* control function config + array index, iface, enable*/ + controlsConfig = [ + 0, 0, 0, + 1, 1, 1, + 2, 0, 1, + 3, 1, 1, + 4, 2, 1, + 5, 2, 1, + 8, 6, 0, + 9, 6, 0, + ]; + /* control function register config + reg, rreg, shift, rshift, min, max, mask, invert, value */ + ctrlParamsSeqConfig = [ + 0x3c, 0x3c, 24, 24, 0x0, 0x57, 0x7F, 1, 0, //"Main Capture Volume" + 0x38, 0x38, 31, 31, 0x0, 0x1, 0x1, 0, 0, //"Playback Mute" + 0x3c, 0x3c, 31, 31, 0x0, 0x1, 0x1, 0, 0, //"Capture Mute" + 0x20, 0x20, 16, 16, 0x0, 0xF, 0x1F, 0, 0, //"Mic Left Gain" + 0x20, 0x20, 24, 24, 0x0, 0xF, 0x1F, 0, 0, //"Mic Right Gain" + 0x2000, 0x2000, 16, 16, 0x0, 0x7, 0x7, 0, 0, //"Render Channel Mode" + 0x1000, 0x1000, 16, 16, 0x0, 0x7, 0x7, 0, 0 //"Capture Channel Mode" + ]; + + /* 上层下发参数后,写入音频相关信息的寄存器 + reg, rreg, shift, rshift, min, max, mask, invert, value */ + daiParamsSeqConfig = [ + 0x30, 0x30, 13, 13, 0x0, 0x1F, 0x1F, 0, 0x0, // i2s_frequency + 0x1C, 0x1C, 6, 6, 0x0, 0x3, 0x3, 0, 0x0, // adc_mode_sel + 0x30, 0x30, 22, 22, 0x0, 0x3, 0x3, 0, 0x0, // i2s_datawith + ]; + + /* 电源管理功能寄存器配置 + reg, rreg, shift, rshift, min, max, mask, invert, value */ + ctrlSapmParamsSeqConfig = [ + 0x20, 0x20, 23, 23, 0x0, 0x1, 0x1, 0, 0, //LPGA MIC 0 -- connect MIC + 0x20, 0x20, 31, 31, 0x0, 0x1, 0x1, 0, 0, //RPGA MIC 0 -- connect MIC + 0x30, 0x30, 27, 27, 0x0, 0x1, 0x1, 0, 0, //dacl to dacr mixer + 0x30, 0x30, 26, 26, 0x0, 0x1, 0x1, 0, 0 //dacr to dacl mixer + ]; + + /* + 电源管理组件配置 + componentName: 功能名称,{"ADCL", "ADCR", "DACL", "DACR", "LPGA", "RPGA", "SPKL", "SPKR", "MIC"} 数组索引。 + sapmType,compNameIndex,reg, mask,shift,invert, kcontrolNews,kcontrolsNum + */ + sapmComponent = [ + 10, 0, 0x20, 0x1, 15, 1, 0, 0, //ADCL + 10, 1, 0x20, 0x1, 14, 1, 0, 0, //ADCR + 11, 2, 0x14, 0x1, 11, 1, 0, 0, //DACL + 11, 3, 0x14, 0x1, 12, 1, 0, 0, //DACR + 8, 4, 0x20, 0x1, 13, 1, 1, 1, //LPGA + 8, 5, 0x20, 0x1, 12, 1, 2, 1, //RPGA + 15, 6, 0, 0x1, 0, 0, 3, 1, //SPKL + 15, 7, 0, 0x1, 0, 0, 4, 1, //SPKR + 0, 8, 0, 0x1, 0, 0, 0, 0 //MIC + ]; + + /* 电源管理功能配置 + array index, iface, enable + */ + sapmConfig = [ + 0, 5, 1, + 1, 5, 1, + 2, 0, 1, + 3, 0, 1 + ]; + } + } + } +} +``` + +在C代码中读取HCS配置文件来寄存器配置。 + +```c +static int32_t CodecDriverInit(struct HdfDeviceObject *device) +{ + ... + CodecGetConfigInfo(device, &g_codecData) ; + CodecSetConfigInfo(&g_codecData, &g_codecDaiData); + ... + return HDF_SUCCESS; +} +``` + +Codec注册时入参device中已有controller_0x120c1030的节点信息,只需要解析其中的节点就可以获取配置信息。 + +```c +int32_t CodecGetConfigInfo(const struct HdfDeviceObject *device, struct CodecData *codecData) +{ + codecData->regConfig = (struct AudioRegCfgData *)OsalMemCalloc(sizeof(*(codecData->regConfig))); + CodecGetRegConfig(device, codecData->regConfig); + return HDF_SUCCESS; +} +``` + +配置信息获取,配置节点。 + +```c +int32_t CodecGetRegConfig(const struct HdfDeviceObject *device, struct AudioRegCfgData *configData) +{ + ... + drsOps = DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE); + ... + idNode = drsOps->GetChildNode(root, "idInfo"); + ParseAudioAttr(drsOps, idNode, &configData->audioIdInfo); + regCfgNode = drsOps->GetChildNode(root, "regConfig"); + ... + DEV_RES_NODE_FOR_EACH_ATTR(regCfgNode, regAttr) { + ... + return HDF_SUCCESS; +} +``` + +regConfig节点中子项的配置信息获取并使用。在框架进行配置文件解析后,可直接替换代码中的寄存器信息。 + +```c +int32_t CodecDeviceInit(struct AudioCard *audioCard, struct CodecDevice *codec) +{ +... + if (CodecRegDefaultInit(codec->devData->regCfgGroup) != HDF_SUCCESS) { + AUDIO_DRIVER_LOG_ERR("CodecRegDefaultInit failed."); + return HDF_FAILURE; + } +... + return HDF_SUCCESS; +} +``` + + + +## Accessory驱动开发实例 +代码路径:drivers/peripheral/audio/chipsets/tfa9879/accessory + +SmartPA归属于Accessory驱动的一种,开发步骤类似于codec: +1. 定义填充一个具体的accessory +2. 实现accessory回调函数 +3. 注册绑定到HDF框架 +4. 配置HCS和Makefile。 + +### Accessory数据结构填充 + +Accessory模块需要填充如下3个结构体: + +- g_tfa9879Data :accessory设备操作函数集,其中包含HCS文件中的配置信息,且定义与映射了accessory设备的初始化、读写寄存器的方法函数。 + +- g_tfa9879DaiDeviceOps :accessory设备DAI的数据集,其中定义与映射了accessory设备DAI的操作集。 + +- g_tfa9879DaiData :accessory设备DAI的数据集,其中定义与映射了accessory设备的数据访问接口的驱动名、初始化和操作集。 + +```c +struct AccessoryData g_tfa9879Data = { + .Init = Tfa9879DeviceInit, + .Read = AccessoryDeviceRegRead, + .Write = AccessoryDeviceRegWrite, +}; + +struct AudioDaiOps g_tfa9879DaiDeviceOps = { + .Startup = Tfa9879DaiStartup, + .HwParams = Tfa9879DaiHwParams, +}; + +struct DaiData g_tfa9879DaiData = { + .drvDaiName = "accessory_dai", + .DaiInit = Tfa9879DaiDeviceInit, + .ops = &g_tfa9879DaiDeviceOps, +}; +``` + +### accessoryDevice和accessoryDai设备初始化 + +设备初始化入口函数为Tfa9879DeviceInit,其中主要包括设置SmartPA I2C设备地址,获取配置数据、初始化(含重置)设备寄存器和绑定控制功能配置到控制链表中,当前Demo实现中也包括了Hi3516DV300设备的相关寄存器初始化,如初始化GPIO引脚等。 + +```c +int32_t Tfa9879DeviceInit(struct AudioCard *audioCard, const struct AccessoryDevice *device) +{ + int32_t ret; + ... + g_accessoryTransferData.i2cDevAddr = TFA9879_I2C_DEV_ADDR; // 0x6D + // 获取配置数据 + ret = AccessoryDeviceCfgGet(device->devData, &g_accessoryTransferData); + ... + // 初始化GPIO引脚 + ret = Hi35xxGpioPinInit(); + ... + // 初始化设备寄存器 + ret = AccessoryDeviceCtrlRegInit(); + ... + // 绑定功能控制配置 + ret = AudioAddControls(audioCard, g_accessoryTransferData.accessoryControls, + g_accessoryTransferData.accessoryCfgCtrlCount); + ... +} +``` + +I2C读写寄存器公用函数:AccessoryI2cReadWrite + +```c +int32_t AccessoryI2cReadWrite(struct AudioAddrConfig *regAttr, uint16_t rwFlag) +{ + int32_t ret; + DevHandle i2cHandle; + int16_t transferMsgCount = 1; + uint8_t regs[I2C_REG_LEN]; + struct I2cMsg msgs[I2C_MSG_NUM]; + ... + i2cHandle = I2cOpen(I2C_BUS_NUM); + ... + if (rwFlag == I2C_FLAG_READ) { + transferMsgCount = I2C_MSG_NUM; + } + ret = AccessoryI2cMsgFill(regAttr, rwFlag, regs, msgs); + ... + ret = I2cTransfer(i2cHandle, msgs, transferMsgCount); + ... + AccessoryI2cRelease(msgs, transferMsgCount, i2cHandle); + return HDF_SUCCESS; +} +``` + +### Accessory操作函数集实现 + +AccessoryDeviceRegRead和AccessoryDeviceRegWrite 2个回调函数中,调用I2C读写寄存器公用函数AccessoryI2cReadWrite,读写控制寄存器的值。 + +```c +int32_t AccessoryDeviceRegRead(const struct AccessoryDevice *codec, uint32_t reg, uint32_t *val) +{ + int32_t ret; + struct AudioAddrConfig regAttr; + ... + (void)codec; + regAttr.addr = (uint8_t)reg; + regAttr.value = 0; + ret = AccessoryI2cReadWrite(®Attr, I2C_FLAG_READ); + if (ret != HDF_SUCCESS) { + AUDIO_DRIVER_LOG_ERR("failed."); + return HDF_FAILURE; + } + *val = regAttr.value; + ... + return HDF_SUCCESS; +} + +int32_t AccessoryDeviceRegWrite(const struct AccessoryDevice *codec, uint32_t reg, uint32_t value) +{ + int32_t ret; + struct AudioAddrConfig regAttr; + (void)codec; + regAttr.addr = (uint8_t)reg; + regAttr.value = (uint16_t)value; + ret = AccessoryI2cReadWrite(®Attr, 0); + ... + return HDF_SUCCESS; +} +``` + +Tfa9879DaiStartup为启动时的一些设置,代码片段如下: + +```c +int32_t Tfa9879DaiStartup(const struct AudioCard *card, const struct DaiDevice *device) +{ + int ret; + (void)card; + (void)device; + // 设置SmartPA的工作状态 + ret = Tfa9879WorkStatusEnable(); + ... + return HDF_SUCCESS; +} + +``` + +Tfa9879DaiHwParams为下发播放参数接口函数,代码片段如下: + +```c +int32_t Tfa9879DaiHwParams(const struct AudioCard *card, const struct AudioPcmHwParams *param) +{ + int32_t ret; + uint16_t frequency, bitWidth; + struct DaiParamsVal daiParamsVal; + (void)card; + ... + // 匹配采样率 + ret = AcessoryDeviceFrequencyParse(param->rate, &frequency); + ... + // 匹配位宽 + ret = Tfa9879FormatParse(param->format, &bitWidth); + ... + daiParamsVal.frequencyVal = frequency; + daiParamsVal.formatVal = bitWidth; + daiParamsVal.channelVal = param->channels; // 匹配声道 + ret = AccessoryDaiParamsUpdate(daiParamsVal); + ... + return HDF_SUCCESS; +} +``` + +### Accessory注册绑定到HDF + +此处依赖HDF框架的驱动实现方式,具体流程可参考[HDF驱动框架](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf.md)。 + +填充g_tfa9879DriverEntry结构体,moduleName与device_info.hcs中的moduleName匹配,实现Bind、Init、Release函数指针。 + +drivers/peripheral/audio/chipsets/tfa9879/accessory/src/tfa9879_accessory_adapter.c + +```c +static int32_t Tfa9879DriverBind(struct HdfDeviceObject *device) +{ + (void)device; + AUDIO_DRIVER_LOG_INFO("success!"); + return HDF_SUCCESS; +} + +static int32_t Tfa9879DriverInit(struct HdfDeviceObject *device) +{ + int32_t ret; + ... + // 获取HCS中的配置数据 + ret = AccessoryGetConfigInfo(device, &g_tfa9879Data); + ... + ret = ret = GetServiceName(device); + ... + ret = AudioRegisterAccessory(device, &g_tfa9879Data, &g_tfa9879DaiData); + .... + return HDF_SUCCESS; +} + +/* HdfDriverEntry definitions */ +struct HdfDriverEntry g_tfa9879DriverEntry = { + .moduleVersion = 1, + .moduleName = "CODEC_TFA9879", + .Bind = Tfa9879DriverBind, + .Init = Tfa9879DriverInit, + .Release = NULL, +}; +HDF_INIT(g_tfa9879DriverEntry); +``` + +### HCS配置流程 + +配置过程可参考Codec驱动开发实例[HCS配置流程](#section4115)章节。 + + + +## Platform驱动开发实例 +代码路径:drivers/peripheral/audio/chipsets/hi3516dv300/soc + +在Audio驱动开发中,platform为DMA驱动的适配。platform驱动开发主要包含如下几个重要步骤: +1. 定义填充一个具体的platform +2. 实现platform回调函数 +3. 注册绑定到HDF框架 +4. 配置HCS和Makefile + +### Platform数据结构填充 + +Platform模块需要填充如下2个结构体: + +- g_platformData :platform设备私有配置,其中包含platform设备的初始化和操作函数。 + +- g_dmaDeviceOps :Dma设备操作函数集,包含了DMA一些通用接口的封装。 + +```c +struct AudioDmaOps g_dmaDeviceOps = { + .DmaBufAlloc = Hi3516DmaBufAlloc, // dma内存申请函数接口 + .DmaBufFree = Hi3516DmaBufFree, // dma内存释放函数接口 + .DmaRequestChannel = Hi3516DmaRequestChannel, // dma申请通道函数接口 + .DmaConfigChannel = Hi3516DmaConfigChannel, // dma通道配置函数接口 + .DmaPrep = Hi3516DmaPrep, // dma准备函数接口 + .DmaSubmit = Hi3516DmaSubmit, // dma submit函数接口 + .DmaPending = Hi3516DmaPending, // dma pending函数接口 + .DmaPause = Hi3516DmaPause, // dma 暂停、停止函数接口 + .DmaResume = Hi3516DmaResume, // dma 恢复函数接口 + .DmaPointer = Hi3516DmaPointer, // dma获取当前播放或录音位置函数接口 +}; + +struct PlatformData g_platformData = { + .PlatformInit = AudioDmaDeviceInit, //dma设备初始化接口 + .ops = &g_dmaDeviceOps, +}; +``` + +### dmaDevice设备初始化 + +设备初始化入口函数为AudioDmaDeviceInit,其中主要包括设置3516平台特有的AIAO初始化等。 + +```c +int32_t AudioDmaDeviceInit(const struct AudioCard *card, const struct PlatformDevice *platformDevice) +{ +... + AiaoHalSysInit(); + /* PIN MUX */ + AiaoSysPinMux(); + /* CLK reset */ + AiaoClockReset(); + /* aiao init */ + AiaoDeviceInit(chnId); +... + return HDF_SUCCESS; +} +``` + +### DMA操作函数集实现 + +Dma设备操作函数集,包含了DMA通用接口的封装。如通用接口不能满足开发要求,可自行实现新的DMA回调函数。 + +```c +int32_t Hi3516DmaBufAlloc(struct PlatformData *data, const enum AudioStreamType streamType); +int32_t Hi3516DmaBufFree(struct PlatformData *data, const enum AudioStreamType streamType); +int32_t Hi3516DmaRequestChannel(const struct PlatformData *data); +int32_t Hi3516DmaConfigChannel(const struct PlatformData *data); +int32_t Hi3516DmaPrep(const struct PlatformData *data); +int32_t Hi3516DmaSubmit(const struct PlatformData *data); +int32_t Hi3516DmaPending(struct PlatformData *data); +int32_t Hi3516DmaPause(struct PlatformData *data); +int32_t Hi3516DmaResume(const struct PlatformData *data); +int32_t Hi3516DmaPointer(struct PlatformData *data, uint32_t *pointer); +``` + +### Platform注册绑定到HDF + +此处依赖HDF框架的驱动实现方式,具体流程可参考[HDF驱动框架](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf.md)。 + +- 填充g_platformDriverEntry结构体 +- moduleName与device_info.hcs中的moduleName匹配 +- 实现Bind、Init、Release函数指针。 + +drivers/peripheral/audio/chipsets/hi3516dv300/soc/src/hi3516_dma_adapter.c + +```c +static int32_t Hi3516DmaDriverInit(struct HdfDeviceObject *device) +{ +... + OsalMutexInit(&g_platformData.renderBufInfo.buffMutex); + OsalMutexInit(&g_platformData.captureBufInfo.buffMutex); + g_platformData.platformInitFlag = false; + ret = AudioSocRegisterPlatform(device, &g_platformData); +... + return HDF_SUCCESS; +} + +static void Hi3516DmaDriverRelease(struct HdfDeviceObject *device) +{ + struct PlatformHost *platformHost = NULL; +... + platformHost = (struct PlatformHost *)device->service; +... + OsalMutexDestroy(&g_platformData.renderBufInfo.buffMutex); + OsalMutexDestroy(&g_platformData.captureBufInfo.buffMutex); + OsalMemFree(platformHost); +} + +/* HdfDriverEntry definitions */ +struct HdfDriverEntry g_platformDriverEntry = { + .moduleVersion = 1, + .moduleName = "DMA_HI3516", + .Bind = Hi3516DmaDriverBind, + .Init = Hi3516DmaDriverInit, + .Release = Hi3516DmaDriverRelease, +}; +HDF_INIT(g_platformDriverEntry); +``` + +### HCS配置流程 + +配置过程可参考Codec驱动开发实例[HCS配置流程](#section4115)章节。 + + + +## Dai驱动开发实例 +代码路径:drivers/peripheral/audio/chipsets/hi3516dv300/soc + +Dai驱动开发主要包含如下几个重要步骤: +1. 定义填充一个具体的dai +2. 实现dai回调函数 +3. 注册绑定到HDF框架 +4. 配置HCS和Makefile + +### Dai数据结构填充 + +Dai模块需要填充如下2个结构体: + +- g_daiData :dai设备私有配置,其中包含dai设备的初始化、读写寄存器、操作函数。 + +- g_daiDeviceOps :dai设备操作函数集,包含了dai的参数设置、触发、启动。 + +```c +struct AudioDaiOps g_daiDeviceOps = { + .HwParams = DaiHwParams, + .Trigger = DaiTrigger, + .Startup = DaiStartup, +}; + +struct DaiData g_daiData = { + .DaiInit = DaiDeviceInit, + .Read = AudioDeviceReadReg, + .Write = AudioDeviceWriteReg, + .ops = &g_daiDeviceOps, +}; +``` + +### daiDevice设备初始化 + +设备初始化入口函数为DaiDeviceInit,其中主要包括设置dai的配置信息初始化,添加到Controls等。 + +```c +int32_t DaiDeviceInit(struct AudioCard *audioCard, const struct DaiDevice *dai) +{ +... + struct DaiData *data = dai->devData; + struct AudioRegCfgData *regConfig = dai->devData->regConfig; +... + g_regCodecBase = OsalIoRemap(CODEC_REG_BASE, CODEC_MAX_REG_SIZE); +... + data->regVirtualAddr = (uintptr_t)g_regCodecBase; + DaiSetConfigInfo(data); + AudioAddControls(audioCard, data->controls, data->numControls); + I2c6PinInit(); +... + data->daiInitFlag = true; + return HDF_SUCCESS; +} +``` + +### Dai操作函数集实现 + +AudioDeviceReadReg和AudioDeviceWriteReg在3516平台均未使用,作为接口预留。 + +DaiHwParams中主要完成一些pcm流信息的设置。 + +```c +int32_t DaiHwParams(const struct AudioCard *card, const struct AudioPcmHwParams *param) +{ + uint32_t bitWidth; + struct DaiDevice *device = card->rtd->cpuDai; +... + DaiCheckSampleRate(param->rate); + struct DaiData *data = DaiDataFromCard(card); + data->pcmInfo.channels = param->channels; +... + AudioFramatToBitWidth(param->format, &bitWidth); +... + data->pcmInfo.bitWidth = bitWidth; + data->pcmInfo.rate = param->rate; + data->pcmInfo.streamType = param->streamType; + data->regVirtualAddr = (uintptr_t)g_regDaiBase; +... + DaiParamsUpdate(device); + data->regVirtualAddr = (uintptr_t)g_regCodecBase; + return HDF_SUCCESS; +} +``` + +DaiTrigger在3516平台也未使用,作为接口预留。 + +DaiStartup为dai的启动函数,主要包括更新初始化寄存器配置、配置I2S等。 + +```c +int32_t DaiStartup(const struct AudioCard *card, const struct DaiDevice *device) +{ + struct AudioMixerControl *regCfgItem = NULL; +... + regCfgItem = device->devData->regConfig->audioRegParams[AUDIO_DAI_STARTUP_PATAM_GROUP]->regCfgItem; + itemNum = device->devData->regConfig->audioRegParams[AUDIO_DAI_STARTUP_PATAM_GROUP]->itemNum; + + device->devData->regVirtualAddr = (uintptr_t)g_regDaiBase; + for (int i = 0; i < itemNum; i++) { + int ret = AudioUpdateDaiRegBits(device, ®CfgItem[i], regCfgItem[i].value); + if (ret != HDF_SUCCESS) { + AUDIO_DRIVER_LOG_ERR("set frequency fail."); + return HDF_FAILURE; + } + } + device->devData->regVirtualAddr = (uintptr_t)g_regCodecBase; + + if (I2sPinInit() != HDF_SUCCESS) { + AUDIO_DRIVER_LOG_ERR("I2sPinInit fail."); + } + + return HDF_SUCCESS; +} +``` + +### Dai注册绑定到HDF + +此处依赖HDF框架的驱动实现方式,具体流程可参考[HDF驱动框架](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf.md)。 + +- 填充g_daiDriverEntry结构体 +- moduleName与device_info.hcs中的moduleName匹配 +- 实现Bind、Init、Release函数指针 + +drivers/peripheral/audio/chipsets/hi3516dv300/soc/src/hi3516_dai_adapter.c + +```c +static int32_t DaiDriverBind(struct HdfDeviceObject *device) +{ +... + struct DaiHost *daiHost = (struct DaiHost *)OsalMemCalloc(sizeof(*daiHost)); +... + daiHost->device = device; + device->service = &daiHost->service; + g_daiData.daiInitFlag = false; +... + return HDF_SUCCESS; +} + +static int32_t DaiDriverInit(struct HdfDeviceObject *device) +{ +... + DaiGetConfigInfo(device, &g_daiData); + DaiGetServiceName(device); +... + OsalMutexInit(&g_daiData.mutex); + AudioSocRegisterDai(device, &g_daiData); +... + return HDF_SUCCESS; +} + +static void DaiDriverRelease(struct HdfDeviceObject *device) +{ +... + OsalMutexDestroy(&g_daiData.mutex); +... + struct DaiHost *daiHost = (struct DaiHost *)device->service; +... + OsalMemFree(daiHost); +} + +/* HdfDriverEntry definitions */ +struct HdfDriverEntry g_daiDriverEntry = { + .moduleVersion = 1, + .moduleName = "DAI_HI3516", + .Bind = DaiDriverBind, + .Init = DaiDriverInit, + .Release = DaiDriverRelease, +}; +HDF_INIT(g_daiDriverEntry); +``` + +### HCS配置流程 + +配置过程可参考Codec驱动开发实例[HCS配置流程](#section4115)章节。 + + + +## Makefile中添加编译配置 + +添加新增文件到对应的config中,将其编译链接到内核镜像。 + +标准系统(linux):drivers/adapter/khdf/linux/model/audio/Makefile + +```makefile +obj-$(CONFIG_DRIVERS_HDF_AUDIO_CODEC) += \ +$(KHDF_AUDIO_HI3516DV300_DIR)/../tfa9879/accessory/src/tfa9879_accessory_adapter.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/../tfa9879/accessory/src/tfa9879_accessory_impl.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_adapter.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_impl.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_ops.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/dsp/src/dsp_adapter.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dai_adapter.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dai_ops.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_aiao_impl.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dma_ops.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dma_adapter.o \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_adapter.o +``` + +小型系统(liteOS):drivers/adapter/khdf/liteos/model/audio/Makefile + +```makefile +LOCAL_SRCS += \ +$(KHDF_AUDIO_HI3516DV300_DIR)/../tfa9879/accessory/src/tfa9879_accessory_adapter.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/../tfa9879/accessory/src/tfa9879_accessory_impl.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_adapter.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_impl.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/codec/src/hi3516_codec_ops.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/dsp/src/dsp_adapter.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dai_adapter.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dai_ops.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_aiao_impl.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dma_ops.c \ +$(KHDF_AUDIO_HI3516DV300_DIR)/soc/src/hi3516_dma_adapter.c +``` + + + +## 源码结构与目录 + +实现驱动接口头文件中的函数。以Hi3516为例,目录架构如下: + +驱动实现示例代码路径:drivers\peripheral\audio\chipsets\ + +``` +├── hi3516dv300 +│   ├── codec +│   │   ├── include +│   │   │   ├── hi3516_codec_impl.h +│   │   │   └── hi3516_codec_ops.h +│   │   ├── src +│   │   │   ├── hi3516_codec_adapter.c // codec驱动入口 +│   │   │   ├── hi3516_codec_impl.c // codec硬件相关操作实现 +│   │   │   └── hi3516_codec_ops.c // codec驱动函数接口实现 +│   │   └── test +│   │   └── unittest +│   ├── dsp +│   │   └── include +│   │   └── dsp_ops.h +│   │   └── src +│   │   └── dsp_adapter.c // dsp驱动入口 +│   │   └── dsp_ops.c +│   └── soc +│   ├── include +│   │   ├── hi3516_aiao_impl.h +│   │   ├── hi3516_dai_ops.h +│   │   └── hi3516_dma_ops.h +│   ├── src +│   │   ├── hi3516_aiao_impl.c +│   │   ├── hi3516_dai_adapter.c //dai驱动入口 +│   │   ├── hi3516_dai_ops.c +│   │   ├── hi3516_dma_adapter.c //dma驱动入口 +│   │   └── hi3516_dma_ops.c +│   └── test +│   └── unittest +└── tfa9879 +    └── accessory +    ├── include +    │   └── tfa9879_accessory_impl.h +    └── src +    ├── tfa9879_accessory_adapter.c // accessory驱动入口 +    └── tfa9879_accessory_impl.c +``` + +hcs文件与目录 + +``` +标准系统: +vendor/hisilicon/Hi3516DV300/ +└── hdf_config + └── khdf + ├── audio + │   ├── audio_config.hcs + │   ├── codec_config.hcs + │   ├── dai_config.hcs + │   ├── dma_config.hcs + │   └── dsp_config.hcs + ├── device_info + │   └── device_info.hcs + └── hdf.hcs + +小型系统: +vendor/hisilicon/hispark_taurus/ +├── config.json +└── hdf_config + ├── audio + │   ├── audio_config.hcs + │   ├── codec_config.hcs + │   ├── dai_config.hcs + │   ├── dma_config.hcs + │   └── dsp_config.hcs + ├── device_info + │   └── device_info.hcs + └── hdf.hcs +``` + + + +# 使用HAL的开发步骤与实例 +代码路径:drivers/peripheral/audio/hal + +## HAL模块使用步骤 + +![](/images/device-dev/driver/figures/HAL流程图.png) + +1. 使用入口函数GetAudioManagerFuncs()获取函数方法。 + +2. 获取所支持的声卡信息GetAllAdapters(),加载对应的声卡LoadAdapter()。 + +3. 创建播放类CreateRender()或者录音类,下发音频文件音频相关属性。 + +4. 调用创建好的播放类中挂载的方法调用render->control.Start()、render->RenderFrame()进行下发开始命令,音频数据循环下发。 + +5. 播放过程中可调用其他控制命令对播放业务进行控制操作,例如调节音量、暂停、静音等render->control.Pause()、 render->control.Resume()、 render->volume.SetVolume()。 + +6. 播放业务完成后,下发停止命令、销毁播放类、卸载声卡。 + + 1. render->control.Stop(); + + 2. adapter->DestroyRender(); + + 3. manager->UnloadAdapter(); + +## HAL使用实例 + +```c +#include +#include +#include "audio_types.h" +#include +#include "audio_manager.h" + + /* so动态库引用打开 */ +char *soPathHdi = "/system/lib/libhdi_audio.z.so"; +void *g_handle = dlopen(soPathHdi , 1); + +int32_t FrameStart(void *param) +{ +... + /* 循环进行下发音频数据 */ + do { + readSize = (remainingDataSize > bufferSize) ? bufferSize : remainingDataSize; + numRead = fread(frame, 1, readSize, g_file); + if (numRead > 0) { + ret = render->RenderFrame(render, frame, numRead, &replyBytes); + if (ret == HDF_ERR_INVALID_OBJECT) { + LOG_FUN_ERR("Render already stop!"); + break; + } + remainingDataSize -= numRead; + } + /* 暂停等待函数 */ + while (g_waitSleep) { + printf("music pause now.\n"); + pthread_cond_wait(&g_functionCond, &g_mutex); + printf("music resume now.\n"); + } + } while (!g_closeEnd && numRead > 0 && remainingDataSize > 0); +... +} + +static void *hal_main() +{ + /* 映射入口函数及调用 */ + struct AudioManager *(*getAudioManager)() = + (struct AudioManager *(*)())(dlsym(g_handle, "GetAudioManagerFuncs")); + struct AudioManager *manager = getAudioManager(); + + /* 获取声卡列表 */ + struct AudioAdapterDescriptor *descs = NULL; + int32_t size = 0; + int32_t ret = manager->GetAllAdapters(manager, &descs, &size); + + /* 根据用户指定的声卡名称和端口描述进行匹配声卡及端口 */ + enum AudioPortDirection port = PORT_OUT; // 端口类型为OUT,放音 + struct AudioPort renderPort; + char * adapterNameCase = "usb"; + int32_t index = SwitchAdapter(descs, adapterNameCase, port, &renderPort, size); + + /* 根据匹配到的声卡信息进行加载声卡 */ + struct AudioAdapter *adapter = NULL; + struct AudioAdapterDescriptor *desc = &descs[index]; // 根据匹配到的声卡信息获取对应设备 + manager->LoadAdapter(manager, desc, &adapter); //加载声卡,获取声卡方法实例 + + /* 创建播放类 */ + struct AudioRender *render; + struct AudioDeviceDescriptor devDesc; + struct AudioSampleAttributes attrs; + InitDevDesc(&devDesc, renderPort.portId); //初始化设置设备参数 + WavHeadAnalysis(g_file, &attrs); // 解析音频文件设置Attributes + adapter->CreateRender(adapter, &devDesc, &attrs, &render); + + /* 下发音频数播放 */ + render->control.Start((AudioHandle)render); // 下发控制命令start,准备动作 + pthread_create(&g_tids, NULL, (void *)(&FrameStart), &g_str); // 起线程进行播放 + + /* 控制命令 */ + render->control.Pause((AudioHandle)render); // 下发进行暂停操作 + render->control.Resume((AudioHandle)render); // 恢复操作 + render->volume.SetVolume((AudioHandle)render, 0.5); // 设置音量 + + /* 停止播放,销毁播放类 */ + render->control.Stop((AudioHandle)render); + adapter->DestroyRender(adapter, render); + /* 卸载声卡 */ + manager->UnloadAdapter(manager, adapter); +} +``` + + + +# 总结 + +以上就是基于Audio驱动框架进行移植开发过程中,所涉及的所有关键适配点。重点介绍了 Audio驱动适配方法、HDI层接口使用方法。开发者可以根据不同芯片进行适配,方便简单。希望通过本次的文档,您能初步掌握基于HDF框架的Audio驱动开发。 \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/05.USB.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/06.USB.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/05.USB.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/06.USB.md" index 667528c594effafd99a48ab767ef3fca4ee9d239..cd5b15dc5b82e12959ed0eb217961639a8a5c9b6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221/05.USB.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/06.USB.md" @@ -1,6 +1,6 @@ --- title: USB -permalink: /pages/0004010304 +permalink: /pages/0105020406 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # USB @@ -1468,7 +1468,7 @@ HDF_INIT(g_usbSerialRawDriverEntry); ### Device DDK API驱动开发 -USB ACM设备核心代码路径为drivers/peripheral/usb/gadget/function/acmcdcacm.c,其使用示例如下所示,首先根据描述符创建设备,然后获取接口,打开接口,获取Pipe信息,接收Event事件,接着进行USB通信(读写等),设备卸载时候,关闭接口,停止Event接收,删除设备。 +USB ACM设备核心代码路径为drivers/peripheral/usb/gadget/function/acm/cdcacm.c,其使用示例如下所示,首先根据描述符创建设备,然后获取接口,打开接口,获取Pipe信息,接收Event事件,接着进行USB通信(读写等),设备卸载时候,关闭接口,停止Event接收,删除设备。 ``` 1、创建设备 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/07.CAMERA.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/07.CAMERA.md" new file mode 100644 index 0000000000000000000000000000000000000000..b30632b95c57a89242e71f68556db668d649b147 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/02.\351\251\261\345\212\250/04.\345\244\226\350\256\276\351\251\261\345\212\250\344\275\277\347\224\250/07.CAMERA.md" @@ -0,0 +1,685 @@ +--- +title: CAMERA +permalink: /pages/0105020407 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# Camera + +- [Camera](#camera) + - [概述](#概述) + - [开发指导](#开发指导) + - [HDI接口说明](#hdi接口说明) + - [开发步骤](#开发步骤) + - [开发实例](#开发实例) + + +## 概述 + +OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 +该驱动框架模型内部分为三层,依次为HDI实现层、框架层和适配层,各层基本概念如下: ++ **HDI实现层**:对上实现OHOS(OpenHarmony Operation System)相机标准南向接口。 + ++ **框架层**:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。 + ++ **适配层**:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。 + +**** +**图 1** 基于HDF驱动框架的Camera驱动模型 +![](/images/device-dev/driver/figures/logic-view-of-camera-hal-zh.png) + +1. 系统启动时创建CameraDeviceHost进程。进程创建后,首先枚举底层设备,创建(也可以通过配置表创建)管理设备树的DeviceManager类及其内部各个底层设备的对象,创建对应的CameraHost类实例并且将其注册到UHDF服务中,方便上层通过UHDF服务获取底层CameraDeviceHost的服务,从而操作底层设备。 + +2. Service通过CameraDeviceHost服务获取CameraHost实例,CameraHost可以获取底层的Camera能力,打开手电筒、调用Open接口打开Camera创建连接、创建DeviceManager(负责底层硬件模块上电)、创建CameraDevice(向上提供设备控制接口)。创建CameraDevice时会实例化PipelineCore的各个子模块,其中StreamPiplineCore负责创建Pipeline,MetaQueueManager负责上报meta。 + +3. Service通过底层的CameraDevice配置流、创建Stream类。StreamPipelineStrategy模块通过上层下发的模式和查询配置表创建对应流的Node连接方式,StreamPipelineBuilder模块创建Node实例并且连接返回该Pipline给StreamPipelineDispatcher。StreamPipelineDispatcher提供统一的Pipline调用管理。 + +4. Service通过Stream控制整个流的操作,AttachBufferQueue接口将从显示模块申请的BufferQueue下发到底层,由CameraDeviceDriverModel自行管理buffer,当Capture接口下发命令后,底层开始向上传递buffer。Pipeline的IspNode依次从BufferQueue获取指定数量buffer,然后下发到底层ISP(Image Signal Processor,图像信号处理器)硬件,ISP填充完之后将buffer传递给CameraDeviceDriverModel,CameraDeviceDriverModel通过循环线程将buffer填充到已经创建好的Pipeline中,各个Node处理后通过回调传递给上层,同时buffer返回BufferQueue等待下一次下发。 + +5. Service通过Capture接口下发拍照命令。ChangeToOfflineStream接口查询拍照buffer位置,如果ISP已经出图,并且图像数据已经送到IPP node,可以将普通拍照流转换为离线流,否则直接走关闭流程。ChangeToOfflineStream接口通过传递StreamInfo使离线流获取到普通流的流信息,并且通过配置表确认离线流的具体Node连接方式,创建离线流的Node连接(如果已创建则通过CloseCamera释放非离线流所需的Node),等待buffer从底层Pipeline回传到上层再释放持有的Pipeline相关资源。 + +6. Service通过CameraDevice的UpdateSettings接口向下发送CaptureSetting参数,CameraDeviceDriverModel通过StreamPipelineDispatcher模块向各个Node转发,StartStreamingCapture和Capture接口携带的CaptureSetting通过StreamPipelineDispatcher模块向该流所属的Node转发。 + +7. Service通过EnableResult和DisableResult接口控制底层meta的上报。如果需要底层meta上报,pipeline会创建CameraDeviceDriverModel内部的一个Bufferqueue用来收集和传递meta,根据StreamPipelineStrategy模块查询配置表并通过StreamPipelineBuilder创建和连接Node,MetaQueueManager下发buffer至底层,底层相关Node填充数据,MetaQueueManager模块再调用上层回调传递给上层。 + +8. Service调用CameraDevice的Close接口,CameraDevice调用对应的DeviceManager模块对各个硬件下电;如果此时在Ipp的SubPipeline中存在OfflineStream,则需要保留OfflineStream,直到执行完毕。 + +9. 动态帧率控制。在StreamOperator中起一个CollectBuffer线程,CollectBuffer线程从每一路stream的BufferQueue中获取buffer,如果某一路流的帧率需要控制(为sensor出帧帧率的1/n),可以根据需求控制每一帧的buffer打包,并决定是否collect此路流的buffer(比如sensor出帧帧率为120fps,预览流的帧率为30fps,CollectBuffer线程collect预览流的buffer时,每隔4fps collect一次)。 + +## 开发指导 + +### HDI接口说明 +旨在了解HDI接口的作用及函数参数的传递规则,详情可见[Camera驱动子系统HDI使用说明](https://gitee.com/openharmony/drivers_peripheral/blob/master/camera/README_zh.md)。 + + +### 开发步骤 + +下面分步骤描述了Camera驱动框架的主要接口,包括注册、检测;创建、捕获和销毁流;打开和关闭设备等接口(为了更清晰的展示和描述主要功能的实现部分,该章节删除了部分判错和LOG源码)。 +1. 注册CameraHost + + 定义Camera的HdfDriverEntry结构体,该结构体中定义了CameraHost初始化的方法。 + + ``` + struct HdfDriverEntry g_cameraHostDriverEntry = { + .moduleVersion = 1, + .moduleName = "camera_service", + .Bind = HdfCameraHostDriverBind, + .Init = HdfCameraHostDriverInit, + .Release = HdfCameraHostDriverRelease, + }; + HDF_INIT(g_cameraHostDriverEntry); // 将Camera的HdfDriverEntry结构体注册到HDF上 + ``` + +2. CameraHost初始化 + + 步骤1中提到的HdfCameraHostDriverBind接口提供了CameraServiceDispatch和CameraHostStubInstance的注册。这两个接口一个是远端调用CameraHost的方法,如OpenCamera(),SetFlashlight()等,另外一个是Camera设备的初始化,在开机时被调用。 + + ``` + int HdfCameraHostDriverBind(HdfDeviceObject *deviceObject) + { + HDF_LOGI("HdfCameraHostDriverBind enter!"); + if (deviceObject == nullptr) { + HDF_LOGE("HdfCameraHostDriverBind: HdfDeviceObject is NULL !"); + return HDF_FAILURE; + } + HdfCameraService *hdfCameraService = reinterpret_cast(OsalMemAlloc(sizeof(HdfCameraService))); + if (hdfCameraService == nullptr) { + HDF_LOGE("HdfCameraHostDriverBind OsalMemAlloc HdfCameraService failed!"); + return HDF_FAILURE; + } + hdfCameraService->ioservice.Dispatch = CameraServiceDispatch; // 提供远端CameraHost调用方法 + hdfCameraService->ioservice.Open = nullptr; + hdfCameraService->ioservice.Release = nullptr; + hdfCameraService->instance = CameraHostStubInstance(); // 初始化Camera设备 + deviceObject->service = &hdfCameraService->ioservice; + return HDF_SUCCESS; + } + ``` + + 下面的函数是远端CameraHost调用的方法: + + ``` + int32_t CameraHostStub::CameraHostServiceStubOnRemoteRequest(int cmdId, MessageParcel &data, + MessageParcel &reply, MessageOption &option) + { + switch(cmdId) { + case CMD_CAMERA_HOST_SET_CALLBACK: { + return CameraHostStubSetCallback(data, reply, option); + } + case CMD_CAMERA_HOST_GET_CAMERAID: { + return CameraHostStubGetCameraIds(data, reply, option); + } + case CMD_CAMERA_HOST_GET_CAMERA_ABILITY: { + return CameraHostStubGetCameraAbility(data, reply, option); + } + case CMD_CAMERA_HOST_OPEN_CAMERA: { + return CameraHostStubOpenCamera(data, reply, option); + } + case CMD_CAMERA_HOST_SET_FLASH_LIGHT: { + return CameraHostStubSetFlashlight(data, reply, option); + } + default: { + HDF_LOGE("%s: not support cmd %d", __func__, cmdId); + return HDF_ERR_INVALID_PARAM; + } + } + return HDF_SUCCESS; + } + ``` + + CameraHostStubInstance()接口最终调用CameraHostImpl::Init()方法,该方法会获取物理Camera,并对DeviceManager和PipelineCore进行初始化。 + +3. 获取CamerHost + + 调用Get()接口从远端CameraService中获取CameraHost对象。get()方法如下: + + ``` + sptr ICameraHost::Get(const char *serviceName) + { + do { + using namespace OHOS::HDI::ServiceManager::V1_0; + auto servMgr = IServiceManager::Get(); + if (servMgr == nullptr) { + HDF_LOGE("%s: IServiceManager failed!", __func__); + break; + } + auto remote = servMgr->GetService(serviceName); // 根据serviceName名称获取CameraHost + if (remote != nullptr) { + sptr hostSptr = iface_cast(remote); // 将CameraHostProxy对象返回给调用者,该对象中包含OpenCamera()等方法。 + return hostSptr; + } + HDF_LOGE("%s: GetService failed! serviceName = %s", __func__, serviceName); + } while(false); + HDF_LOGE("%s: get %s failed!", __func__, serviceName); + return nullptr; + } + ``` + +4. OpenCamera()接口 + + CameraHostProxy对象中有五个方法,分别是SetCallback、GetCameraIds、GetCameraAbility、OpenCamera和SetFlashlight。下面着重描述OpenCamera接口。 + CameraHostProxy的OpenCamera()接口通过CMD_CAMERA_HOST_OPEN_CAMERA调用远端CameraHostStubOpenCamera()接口并获取ICameraDevice对象。 + + ``` + CamRetCode CameraHostProxy::OpenCamera(const std::string &cameraId, const OHOS::sptr &callback, OHOS::sptr &pDevice) + { + int32_t ret = Remote()->SendRequest(CMD_CAMERA_HOST_REMOTE_OPEN_CAMERA, data, reply, option); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%{public}s: SendRequest failed, error code is %{public}d", __func__, ret); + return INVALID_ARGUMENT; + } + CamRetCode retCode = static_cast(reply.ReadInt32()); + bool flag = reply.ReadBool(); + if (flag) { + sptr remoteCameraDevice = reply.ReadRemoteObject(); + if (remoteCameraDevice == nullptr) { + HDF_LOGE("%{public}s: CameraHostProxy remoteCameraDevice is null", __func__); + } + pDevice = OHOS::iface_cast(remoteCameraDevice); + } + return retCode; + } + ``` + + Remote()->SendRequest调用上文提到的CameraHostServiceStubOnRemoteRequest(),根据cmdId进入CameraHostStubOpenCamera()接口,最终调用CameraHostImpl::OpenCamera(),该接口获取了CameraDevice并对硬件进行上电等操作。 + + ``` + CamRetCode CameraHostImpl::OpenCamera(const std::string &cameraId, const OHOS::sptr &callback, OHOS::sptr &device) + { + std::shared_ptr cameraDevice = std::static_pointer_cast(itr->second); + if (cameraDevice == nullptr) { + CAMERA_LOGE("camera device is null."); + return INSUFFICIENT_RESOURCES; + } + CamRetCode ret = cameraDevice->SetCallback(callback); + if (ret != NO_ERROR) { + CAMERA_LOGW("set camera device callback faild."); + return ret; + } + CameraHostConfig *config = CameraHostConfig::GetInstance(); + if (config == nullptr) { + return INVALID_ARGUMENT; + } + std::vector phyCameraIds; + RetCode rc = config->GetPhysicCameraIds(cameraId, phyCameraIds); + if (rc != RC_OK) { + CAMERA_LOGE("get physic cameraId failed."); + return DEVICE_ERROR; + } + if (CameraPowerUp(cameraId, phyCameraIds) != RC_OK) { // 对Camera硬件上电 + CAMERA_LOGE("camera powerup failed."); + CameraPowerDown(phyCameraIds); + return DEVICE_ERROR; + } + + auto sptrDevice = deviceBackup_.find(cameraId); + if (sptrDevice == deviceBackup_.end()) { + deviceBackup_[cameraId] = cameraDevice.get(); + } + device = deviceBackup_[cameraId]; + cameraDevice->SetStatus(true); + return NO_ERROR; + } + ``` + +5. GetStreamOperator()接口 + + CameraDeviceImpl定义了GetStreamOperator、UpdateSettings、SetResultMode和GetEnabledResult等方法,获取流操作方法如下: + + ``` + CamRetCode CameraDeviceImpl::GetStreamOperator(const OHOS::sptr &callback, + OHOS::sptr &streamOperator) + { + if (callback == nullptr) { + CAMERA_LOGW("input callback is null."); + return INVALID_ARGUMENT; + } + spCameraDeciceCallback_ = callback; + if (spStreamOperator_ == nullptr) { + // 这里new了一个spStreamOperator对象传递给调用者,以便对stream进行各种操作。 + spStreamOperator_ = new(std::nothrow) StreamOperatorImpl(spCameraDeciceCallback_, shared_from_this()); + if (spStreamOperator_ == nullptr) { + CAMERA_LOGW("create stream operator failed."); + return DEVICE_ERROR; + } + ismOperator_ = spStreamOperator_; + } + streamOperator = ismOperator_; + + spStreamOperator_->SetRequestCallback([this](){ + cameraDeciceCallback_->OnError(REQUEST_TIMEOUT, 0); + }); + } + ``` + +6. 创建流 + + 调用CreateStreams创建流前需要填充StreamInfo结构体,具体内容如下: + + ``` + using StreamInfo = struct _StreamInfo { + int streamId_; + int width_; // 数据流宽 + int height_; // 数据流高 + int format_; // 数据流格式,如PIXEL_FMT_YCRCB_420_SP + int datasapce_; + StreamIntent intent_; // StreamIntent 如PREVIEW + bool tunneledMode_; + OHOS::sptr bufferQueue_; // 数据流bufferQueue可用streamCustomer->CreateProducer()接口创建 + int minFrameDuration_; + EncodeType encodeType_; + }; + ``` + + CreateStreams()接口是StreamOperatorImpl类中的方法,该接口的主要作用是创建一个StreamBase对象,通过StreamBase的Init方法初始化CreateBufferPool等操作。 + + ``` + RetCode StreamOperatorImpl::CreateStream(const std::shared_ptr& streamInfo) + { + static std::map typeMap = { + {PREVIEW, "PREVIEW"}, + {VIDEO, "VIDEO"}, + {STILL_CAPTURE, "STILL_CAPTURE"}, + {POST_VIEW, "POST_VIEW"}, {ANALYZE, "ANALYZE"}, + {CUSTOM, "CUSTOM"} + }; + + auto itr = typeMap.find(streamInfo->intent_); + if (itr == typeMap.end()) { + CAMERA_LOGE("do not support stream type. [type = %{public}d]", streamInfo->intent_); + return RC_ERROR; + } + std::shared_ptr stream = StreamFactory::Instance().CreateShared(itr->second); // 创建StreamBase实例 + RetCode rc = stream->Init(streamInfo); + return RC_OK; + } + ``` + +7. 配置流 + + CommitStreams()是配置流的接口,必须在创建流之后调用,其主要作用是初始化Pipeline和创建Pipeline。 + + ``` + CamRetCode StreamOperatorImpl::CommitStreams(OperationMode mode, const std::shared_ptr& modeSetting) + { + auto cameraDevice = cameraDevice_.lock(); + if (cameraDevice == nullptr) { + CAMERA_LOGE("camera device closed."); + return CAMERA_CLOSED; + } + std::shared_ptr PipelineCore = + std::static_pointer_cast(cameraDevice)->GetPipelineCore(); + if (PipelineCore == nullptr) { + CAMERA_LOGE("get pipeline core failed."); + return CAMERA_CLOSED; + } + + streamPipeCore_ = PipelineCore->GetStreamPipelineCore(); + if (streamPipeCore_ == nullptr) { + CAMERA_LOGE("get stream pipeline core failed."); + return DEVICE_ERROR; + } + + RetCode rc = streamPipeCore_->Init(); // 对pipelinecore的初始化 + if (rc != RC_OK) { + CAMERA_LOGE("stream pipeline core init failed."); + return DEVICE_ERROR; + } + rc = streamPipeCore_->CreatePipeline(mode); // 创建一个pipeline + if (rc != RC_OK) { + CAMERA_LOGE("create pipeline failed."); + return INVALID_ARGUMENT; + } + return NO_ERROR; + } + ``` + +8. 捕获图像 + + 在调用Capture()接口前需要先填充CaptureInfo结构体,具体内容如下: + + ``` + using CaptureInfo = struct _CaptureInfo { + std::vector streamIds_; //需要Capture的streamIds + std::shared_ptr captureSetting_; // 这里填充camera ability 可通过CameraHost 的GetCameraAbility()接口获取 + bool enableShutterCallback_; + }; + ``` + + StreamOperatorImpl中的Capture方法主要调用CreateCapture()接口去捕获数据流: + + ``` + CamRetCode StreamOperatorImpl::Capture(int captureId, const std::shared_ptr& captureInfo, bool isStreaming) + { + if (!ValidCaptureInfo(captureId, captureInfo)) { + CAMERA_LOGE("capture streamIds is empty. [captureId = %d]", captureId); + return INVALID_ARGUMENT; + } + std::shared_ptr cameraCapture = nullptr; + RetCode rc = CreateCapture(captureId, captureInfo, isStreaming, cameraCapture); + if (rc != RC_OK) { + CAMERA_LOGE("create capture is failed."); + return DEVICE_ERROR; + } + + { + std::unique_lock lock(captureMutex_); + camerCaptureMap_.insert(std::make_pair(captureId, cameraCapture)); + } + + rc = StartThread(); + if (rc != RC_OK) { + CAMERA_LOGE("preview start failed."); + return DEVICE_ERROR; + } + return NO_ERROR; + } + ``` + +9. 取消捕获和释放离线流 + + StreamOperatorImpl类中的CancelCapture()接口的主要作用是根据captureId取消数据流的捕获。 + + ``` + CamRetCode StreamOperatorImpl::CancelCapture(int captureId) + { + auto itr = camerCaptureMap_.find(captureId); //根据captureId 在Map中查找对应的CameraCapture对象 + RetCode rc = itr->second->Cancel(); //调用CameraCapture中Cancel方法结束数据捕获 + std::unique_lock lock(captureMutex_); + camerCaptureMap_.erase(itr); //擦除该CameraCapture对象 + return NO_ERROR; + } + ``` + + StreamOperatorImpl类中的ReleaseStreams接口的主要作用是释放之前通过CreateStream()和CommitStreams()接口创建的流,并销毁Pipeline。 + + ``` + CamRetCode StreamOperatorImpl::ReleaseStreams(const std::vector& streamIds) + { + RetCode rc = DestroyStreamPipeline(streamIds); //销毁该streamIds 的pipeline + rc = DestroyHostStreamMgr(streamIds); + rc = DestroyStreams(streamIds); //销毁该streamIds 的 Stream + return NO_ERROR; + } + ``` + +10. 关闭Camera设备 + + 调用CameraDeviceImpl中的Close()来关闭CameraDevice,该接口调用deviceManager中的PowerDown()来给设备下电。 + + +## 开发实例 + +在/drivers/peripheral/camera/hal/init目录下有一个关于Camera的demo,开机后会在/system/bin下生成可执行文件ohos_camera_demo,该demo可以完成camera的预览,拍照等基础功能。下面我们就以此demo为例讲述怎样用HDI接口去编写预览PreviewOn()和拍照CaptureON()的用例。 + +1. 在main函数中构造一个Hos3516Demo对象,该对象中有对camera初始化、启停流、释放等控制的方法。下面mainDemo->InitSensors()函数为初始化CameraHost,mainDemo->InitCameraDevice()函数为初始化CameraDevice。 + + ``` + int main(int argc, char** argv) + { + RetCode rc = RC_OK; + auto mainDemo = std::make_shared(); + rc = mainDemo->InitSensors(); // 初始化CameraHost + if (rc == RC_ERROR) { + CAMERA_LOGE("main test: mainDemo->InitSensors() error\n"); + return -1; + } + + rc = mainDemo->InitCameraDevice(); // 初始化CameraDevice + if (rc == RC_ERROR) { + CAMERA_LOGE("main test: mainDemo->InitCameraDevice() error\n"); + return -1; + } + + rc = PreviewOn(0, mainDemo); // 配流和启流 + if (rc != RC_OK) { + CAMERA_LOGE("main test: PreviewOn() error demo exit"); + return -1; + } + + ManuList(mainDemo, argc, argv); // 打印菜单到控制台 + + return RC_OK; + } + ``` + + 初始化CameraHost函数实现如下,这里调用了HDI接口ICameraHost::Get()去获取demoCameraHost,并对其设置回调函数。 + + ``` + RetCode Hos3516Demo::InitSensors() + { + demoCameraHost_ = ICameraHost::Get(DEMO_SERVICE_NAME); + if (demoCameraHost_ == nullptr) { + CAMERA_LOGE("demo test: ICameraHost::Get error"); + return RC_ERROR; + } + + hostCallback_ = new CameraHostCallback(); + rc = demoCameraHost_->SetCallback(hostCallback_); + return RC_OK; + } + ``` + + 初始化CameraDevice函数实现如下,这里调用了GetCameraIds(cameraIds_),GetCameraAbility(cameraId, ability_),OpenCamera(cameraIds_.front(), callback, demoCameraDevice_)等接口实现了demoCameraHost的获取。 + + ``` + RetCode Hos3516Demo::InitCameraDevice() + { + (void)demoCameraHost_->GetCameraIds(cameraIds_); + const std::string cameraId = cameraIds_.front(); + demoCameraHost_->GetCameraAbility(cameraId, ability_); + + sptr callback = new CameraDeviceCallback(); + rc = demoCameraHost_->OpenCamera(cameraIds_.front(), callback, demoCameraDevice_); + return RC_OK; + } + ``` + +2. PreviewOn()接口包含配置流、开启预览流和启动Capture动作。该接口执行完成后Camera预览通路已经开始运转并开启了两路流,一路流是preview,另外一路流是capture或者video,两路流中仅对preview流进行capture动作。 + + ``` + static RetCode PreviewOn(int mode, const std::shared_ptr& mainDemo) + { + rc = mainDemo->StartPreviewStream(); // 配置preview流 + if (mode == 0) { + rc = mainDemo->StartCaptureStream(); // 配置capture流 + } else { + rc = mainDemo->StartVideoStream(); // 配置video流 + } + + rc = mainDemo->CaptureON(STREAM_ID_PREVIEW, CAPTURE_ID_PREVIEW, CAPTURE_PREVIEW); // 将preview流capture + return RC_OK; + } + ``` + + StartCaptureStream()、StartVideoStream()和StartPreviewStream()接口都会调用CreateStream()接口,只是传入的参数不同。 + + ``` + RetCode Hos3516Demo::StartVideoStream() + { + RetCode rc = RC_OK; + if (isVideoOn_ == 0) { + isVideoOn_ = 1; + rc = CreateStream(STREAM_ID_VIDEO, streamCustomerVideo_, VIDEO); // 如需启preview或者capture流更改该接口参数即可。 + } + return RC_OK; + } + ``` + + CreateStream()方法调用HDI接口去配置和创建流,首先调用HDI接口去获取StreamOperation对象,然后创建一个StreamInfo。调用CreateStreams()和CommitStreams()实际创建流并配置流。 + + ``` + RetCode Hos3516Demo::CreateStreams(const int streamIdSecond, StreamIntent intent) + { + std::vector> streamInfos; + std::vector>().swap(streamInfos); + GetStreamOpt(); // 获取StreamOperator对象 + std::shared_ptr previewStreamInfo = std::make_shared(); + SetStreamInfo(previewStreamInfo, streamCustomerPreview_, STREAM_ID_PREVIEW, PREVIEW); // 填充StreamInfo + if (previewStreamInfo->bufferQueue_ == nullptr) { + CAMERA_LOGE("demo test: CreateStream CreateProducer(); is nullptr\n"); + return RC_ERROR; + } + streamInfos.push_back(previewStreamInfo); + + std::shared_ptr secondStreamInfo = std::make_shared(); + if (streamIdSecond == STREAM_ID_CAPTURE) { + SetStreamInfo(secondStreamInfo, streamCustomerCapture_, STREAM_ID_CAPTURE, intent); + } else { + SetStreamInfo(secondStreamInfo, streamCustomerVideo_, STREAM_ID_VIDEO, intent); + } + + if (secondStreamInfo->bufferQueue_ == nullptr) { + CAMERA_LOGE("demo test: CreateStreams CreateProducer() secondStreamInfo is nullptr\n"); + return RC_ERROR; + } + streamInfos.push_back(secondStreamInfo); + + rc = streamOperator_->CreateStreams(streamInfos); // 创建流 + if (rc != Camera::NO_ERROR) { + CAMERA_LOGE("demo test: CreateStream CreateStreams error\n"); + return RC_ERROR; + } + + rc = streamOperator_->CommitStreams(Camera::NORMAL, ability_); + if (rc != Camera::NO_ERROR) { + CAMERA_LOGE("demo test: CreateStream CommitStreams error\n"); + std::vector streamIds = {STREAM_ID_PREVIEW, streamIdSecond}; + streamOperator_->ReleaseStreams(streamIds); + return RC_ERROR; + } + return RC_OK; + } + ``` + + CaptureON()接口调用streamOperator的Capture()方法获取camera数据并轮转buffer,拉起一个线程接收相应类型的数据。 + + ``` + RetCode Hos3516Demo::CaptureON(const int streamId, const int captureId, CaptureMode mode) + { + std::shared_ptr captureInfo = std::make_shared(); // 创建并填充CaptureInfo + captureInfo->streamIds_ = {streamId}; + captureInfo->captureSetting_ = ability_; + captureInfo->enableShutterCallback_ = false; + + int rc = streamOperator_->Capture(captureId, captureInfo, true); // 实际capture开始,buffer轮转开始 + if (mode == CAPTURE_PREVIEW) { + streamCustomerPreview_->ReceiveFrameOn(nullptr); // 创建预览线程接收递上来的buffer + } else if (mode == CAPTURE_SNAPSHOT) { + streamCustomerCapture_->ReceiveFrameOn([this](void* addr, const uint32_t size) { // 创建capture线程通过StoreImage回调接收递上来的buffer + StoreImage(addr, size); + }); + } else if (mode == CAPTURE_VIDEO) { + OpenVideoFile(); + streamCustomerVideo_->ReceiveFrameOn([this](void* addr, const uint32_t size) {// 创建Video线程通过StoreVideo回调接收递上来的buffer + StoreVideo(addr, size); + }); + } + return RC_OK; + } + ``` + +3. ManuList()函数从控制台通过fgets()接口获取字符,不同字符所对应demo支持的功能不同,并打印出该demo所支持功能的菜单。 + + ``` + static void ManuList(const std::shared_ptr& mainDemo, + const int argc, char** argv) + { + int idx, c; + int awb = 1; + constexpr char shortOptions[] = "h:cwvaqof:"; + c = getopt_long(argc, argv, shortOptions, longOptions, &idx); + while(1) { + switch (c) { + case 'h': + c = PutMenuAndGetChr(); // 打印菜单 + break; + + case 'f': + FlashLightTest(mainDemo); // 手电筒功能测试 + c = PutMenuAndGetChr(); + break; + case 'o': + OfflineTest(mainDemo); // Offline功能测试 + c = PutMenuAndGetChr(); + break; + case 'c': + CaptureTest(mainDemo); // Capture功能测试 + c = PutMenuAndGetChr(); + break; + case 'w': // AWB功能测试 + if (awb) { + mainDemo->SetAwbMode(OHOS_CAMERA_AWB_MODE_INCANDESCENT); + } else { + mainDemo->SetAwbMode(OHOS_CAMERA_AWB_MODE_OFF); + } + awb = !awb; + c = PutMenuAndGetChr(); + break; + case 'a': // AE功能测试 + mainDemo->SetAeExpo(); + c = PutMenuAndGetChr(); + break; + case 'v': // Video功能测试 + VideoTest(mainDemo); + c = PutMenuAndGetChr(); + break; + case 'q': // 退出demo + PreviewOff(mainDemo); + mainDemo->QuitDemo(); + exit(EXIT_SUCCESS); + + default: + CAMERA_LOGE("main test: command error please retry input command"); + c = PutMenuAndGetChr(); + break; + } + } + } + ``` + + PutMenuAndGetChr()接口打印了demo程序的菜单,并调用fgets()等待从控制台输入命令,内容如下: + + ``` + static int PutMenuAndGetChr(void) + { + constexpr uint32_t inputCount = 50; + int c = 0; + char strs[inputCount]; + Usage(stdout); + CAMERA_LOGD("pls input command(input -q exit this app)\n"); + fgets(strs, inputCount, stdin); + + for (int i = 0; i < inputCount; i++) { + if (strs[i] != '-') { + c = strs[i]; + break; + } + } + return c; + } + ``` + + 控制台输出菜单详情如下: + + ``` + "Options:\n" + "-h | --help Print this message\n" + "-o | --offline stream offline test\n" + "-c | --capture capture one picture\n" + "-w | --set WB Set white balance Cloudy\n" + "-v | --video capture Viedeo of 10s\n" + "-a | --Set AE Set Auto exposure\n" + "-f | --Set Flashlight Set flashlight ON 5s OFF\n" + "-q | --quit stop preview and quit this app\n"); + ``` + + demo中其他功能会调用不同的HDI接口去实现,与PreviewOn()接口类似,这里不再赘述,具体详情可以参见[ohos_camera_demo](https://gitee.com/openharmony/drivers_peripheral/tree/master/camera/hal/init)。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" index 5bc5529cb5b71c43aa96f3bbe559e360d52fb6b5..994b058f63b9f4f242877cc56973c8e05bef5916 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 轻量和小型系统编译构建指导 -permalink: /pages/00040200 +permalink: /pages/01050301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 轻量和小型系统编译构建指导 @@ -50,7 +50,7 @@ date: 2021-12-30 18:31:32 ### 基本概念 -在使用编译构建子系统前,应了解如下基本概念:s +在使用编译构建子系统前,应了解如下基本概念: - 子系统 @@ -433,7 +433,7 @@ vendor ### 前提条件 -开发环境需安装gn、ninja构建工具、python 3.7.4及以上和hb。安装方法请见[搭建系统基础环境](/pages/extra/ae3006/)。 +开发环境需安装gn、ninja构建工具、python 3.7.4及以上和hb。安装方法请见[搭建系统基础环境](/pages/extra/9bd424/)。 ### hb工具使用说明 @@ -638,7 +638,7 @@ optional arguments: 2. 创建内核适配目录,并编写开发板编译配置config.gni文件。 - 以realtek的“rtl8720“开发板的liteos\_m适配为例,device/realtek/rtl8720/liteos\_a/config.gni的内容如下: + 以realtek的“rtl8720“开发板的liteos\_a适配为例,device/realtek/rtl8720/liteos\_a/config.gni的内容如下: ``` # Kernel type, e.g. "linux", "liteos_a", "liteos_m". @@ -909,7 +909,7 @@ optional arguments: - **解决办法:** - 卸载环境中ninja和gn,按照[获取工具](/pages/000a01)。 + 卸载环境中ninja和gn,按照[获取工具](/pages/010b02)。 ### 编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses” diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" index 1eff1c638831e4384077fb622386a7ddaf0e280b..fa608ea7e37c791d2fd0fbadee5e694d6c9c7dc1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/02.\346\240\207\345\207\206\347\263\273\347\273\237\347\274\226\350\257\221\346\236\204\345\273\272\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 标准系统编译构建指导 -permalink: /pages/00040201 +permalink: /pages/01050302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 标准系统编译构建指导 @@ -30,7 +30,7 @@ date: 2021-12-30 18:31:32 - 构建不同芯片平台的产品。如:Hi3516DV300平台。 -- 根据产品配置可以按照组件组装打包产品需要的能力。 +- 根据产品配置,按照组件组装打包产品需要的能力。 ### 基本概念 @@ -67,7 +67,7 @@ OpenHarmony侧的编译构建流程主要包括编译命令行解析,调用gn ### 约束与限制 -- 需按照[源码获取](/pages/000102)指导下载全量源码(采用方式三获取)。 +- 需按照[源码获取](/pages/extra/00a0c5/)指导下载全量源码(采用方式三获取)。 - 编译环境需要Ubuntu18.04及以上版本。 - 安装编译所需的程序包。 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/03.\346\236\204\345\273\272\347\263\273\347\273\237\347\274\226\347\240\201\350\247\204\350\214\203\345\222\214\346\234\200\344\275\263\345\256\236\350\267\265\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/03.\346\236\204\345\273\272\347\263\273\347\273\237\347\274\226\347\240\201\350\247\204\350\214\203\345\222\214\346\234\200\344\275\263\345\256\236\350\267\265\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..f254503cb41dbb1a7a6b946380af0bce01714660 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272/03.\346\236\204\345\273\272\347\263\273\347\273\237\347\274\226\347\240\201\350\247\204\350\214\203\345\222\214\346\234\200\344\275\263\345\256\236\350\267\265\346\214\207\345\257\274.md" @@ -0,0 +1,538 @@ +--- +title: 构建系统编码规范和最佳实践指导 +permalink: /pages/01050303 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:46 +--- +# 构建系统编码规范与最佳实践 + +## 概述 + +gn是generate ninja的缩写,它是一个元编译系统(meta-build system),是ninja的前端,gn和ninja结合起来,完成OpenHarmony操作系统的编译任务。 + +### gn简介 + +- 目前采用gn的大型软件系统有:Chromium,Fuchsia和OpenHarmony。 +- gn语法自设计之初就自带局限性,比如不能求list的长度,不支持通配符等。这些局限性源于其 **有所为有所不为** 的设计哲学,见https://gn.googlesource.com/gn/+/main/docs/language.md#Design-philosophy。 所以在使用gn的过程中,如果发现某件事情用gn实现起来很复杂,请先停下来思考这件事情是否真的需要做。 +- 关于gn的更多详情见gn官方文档,见https://gn.googlesource.com/gn/+/main/docs/。 + +### 本文的目标读者和覆盖范围 + +目标读者为OpenHarmony的开发者。本文主要讨论gn的编码风格和使用gn过程中容易出现的问题,不讨论gn的语法,如需了解gn基础知识,见gn reference文档,见https://gn.googlesource.com/gn/+/main/docs/reference.md。 + +### 总体原则 + +在保证功能可用的前提下,脚本需要满足易于阅读,便于维护,良好的扩展性和性能等要求。 + +## 代码风格 + +### 命名 + +总体上遵循Linux kernel的命名风格,即**小写字母+下划线**的命名风格。 + +#### 局部变量 + +我们这里对局部变量的定义为:在某作用域内,且不向下传递的变量。 + +为了更好的区别于全局变量,局部变量统一采用**下划线开头**。 + +``` +# 例1 +action("some_action") { + ... + # _output是个局部变量,所以使用下划线开头 + _output = "${target_out_dir}/${target_name}.out" + outputs = [ _output ] + args = [ + ... + "--output", + rebase_path(_output, root_build_dir), + ... + ] + ... +} +``` + +#### 全局变量 + +全局变量使用**小写字母**开头。 + +如果变量值可以被gn args修改,则需要使用declare_args来声明,否则不要使用declare_args。 + +``` +# 例2 +declare_args() { + # 可以通过gn args来修改some_feature的值 + some_feature = false +} +``` + +#### 目标命名 + +目标命名采用**小写字母+下划线**的命名方式。 + +模板中的**子目标**命名方式采用"${target_name}+双下划线+后缀"的命名方式。这样做有两点好处: + +- 加入"${target_name}"可以防止子目标重名。 + +- 加入双下划线可以很方便地区分出子目标属于哪一个模块,方便在出现问题时快速定位。 + + ``` + # 例3 + template("ohos_shared_library") { + # "{target_name}"(主目标名)+"__"(双下划线)+"notice"(后缀) + _notice_target = "${target_name}__notice" + collect_notice(_notice_target) { + ... + } + shared_library(target_name) { + ... + } + } + ``` + +#### 自定义模板的命名 + +推荐采用**动宾短语**的形式来命名。 + +``` +# 例4 +# Good +template("compile_resources") { + ... +} +``` + +### 格式化 + +gn脚本在提交之前需要执行格式化。格式化可以保证代码对齐,换行等风格的统一。使用gn自带的format工具即可。命令如下: + +```shell +$ gn format path-to-BUILD.gn +``` + +gn format会按照字母序对import文件做排序,如果想保证import的顺序,可以添加空注释行。 + +假设原来的import顺序为: + +``` +# 例5 +import("//b.gni") +import("//a.gni") +``` + +经过format之后变为: + +``` +import("//a.gni") +import("//b.gni") +``` + +如果想保证原有的import顺序,可以添加空注释行。 + +``` +import("//b.gni") +# Comment to keep import order +import("//a.gni") +``` + +## 编码实践 + +### 实践原则 + +编译脚本实质上完成了两件工作: + +1. **描述模块之间依赖关系(deps)** + + 实践过程中,最常出现的问题是**依赖关系缺失**。 + +2. **描述模块编译的规则(rule)** + + 实践过程中,容易出现的问题是**输入和输出不明确**。 + +依赖缺失会导致两个问题: + +- **概率性编译错误** + + ``` + # 例6 + # 依赖关系缺失,导致概率性编译出错 + shared_library("a") { + ... + } + shared_library("b") { + ... + ldflags = [ "-la" ] + deps = [] + ... + } + group("images") { + deps = [ ":b" ] + } + ``` + + 上面的例子中,libb.so在链接的时候会链接liba.so,实质上构成b依赖a,但是b的依赖列表(deps)却没有声明对a的依赖。由于编译是并发执行的,如果libb.so在链接的时候liba.so还没有编译出来,就会出现编译错误。 + + 由于liba.so也有可能在libb.so之前编译出来,所以依赖缺失导致的编译错误是概率性的。 + +- **依赖关系缺失导致模块没有参与编译** + + 还是上面的例子,如果我们指定ninja编译目标为images,由于images仅仅依赖b,所以a不会参与编译。由于b实质上依赖a, 这时b在链接时会出现必现错误。 + +有一种不太常见的问题是**过多的依赖**。**过多的依赖会降低并发,导致编译变慢**。见下面的例子: + +_compile_js_target不需要依赖 _compile_resource_target,增加这层依赖,会导致 _compile_js_target在 _compile_resource_target编译完成之后才能开始编译。 + +``` +# 例7 +# 过多的依赖导致编译变慢 +template("too_much_deps") { + ... + _gen_resource_target = "${target_name}__res" + action(_gen_resource_target) { + ... + } + + _compile_resouce_target = "${target_name}__compile_res" + action(_compile_resource_target) { + deps = [":$_gen_resource_target"] + ... + } + + _compile_js_target = "${target_name}__js" + action(_compile_js_target) { + # 这个deps不需要 + deps = [":$_compile_resource_target"] + } +} +``` + +输入不明确会导致: + +- **代码修改了,但增量编译时却没有参与编译。** +- **当使用缓存时,代码发生变化,但是缓存仍然命中。** + +下面的例子中,foo.py引用了bar.py中的函数。bar.py实质上是foo.py的输入,需要将bar.py添加到implict_input_action的input或者depfile中去。否则,修改bar.py,模块implict_input_action将不会重新编译。 + +``` +# 例8 +action("implict_input_action") { + script = "//path-to-foo.py" + ... +} +``` + +``` +#!/usr/bin/env +# Contents of foo.py +import bar +... +bar.some_function() +... +``` + +输出不明确会导致: + +- **隐式的输出** +- **当使用缓存时,隐式输出无法从缓存中获得** + +下面的例子中,foo.py会生成两个文件,a.out和b.out,但是implict_output_action的输出只声明了a.out。这种情况下,b.out实质上就是一个隐式输出。缓存中只会存储a.out,不会存储b.out,当缓存命中时,b.out就编译不出来了。 + +``` +# 例9 +action("implict_output_action") { + outputs = ["${target_out_dir}/a.out"] + script = "//path-to-foo.py" + ... +} +``` + +``` +#!/usr/bin/env +# Contents of foo.py +... +write_file("b.out") +write_file("a.out") +... +``` + +### 模板 + +**不要使用gn的原生模板,使用编译系统提供的模板** + +所谓gn原生模板,是指source_set,shared_library, static_library, action, executable,group这六个模板。 + +不推荐使用原生模板的原因有二: + +- **原生模板是最小功能模板**,无法提供external_deps的解析,notice收集,安装信息生成等的额外功能,这些额外功能最好是随着模块编译时同时生成,所以必须对原生模板做额外的扩展才能满足实际的需求。 + +- 当输入文件依赖的文件发生变化时,gn原生的action模板不能自动感知不到这种编译,无法重新编译。见例8 + + + + 原生模板和编译系统提供的模板之间的对应关系: + + | 编译系统提供的模板 | 原生模板 | + | :------------------ | -------------- | + | ohos_shared_library | shared_library | + | ohos_source_set | source_set | + | ohos_executable | executable | + | ohos_static_library | static_library | + | action_with_pydeps | action | + | ohos_group | group | + + +### 使用python脚本 + +action中的script推荐使用python脚本,不推荐使用shell脚本。相比于shell脚本,python脚本: + +- python语法友好,不会因为少写一个空格就导致奇怪的错误。 +- python脚本有很强的可读性。 +- 可维护性强,可调试。 +- OpenHarmony对python任务做了缓存,可以加快编译速度。 + +### rebase_path + +- 仅在向action的参数列表中(args)调用rebase_path。 + + ``` + # 例10 + template("foo") { + action(target_name) { + ... + args = [ + # 仅在args中调用rebase_path + "--bar=" + rebase_path(invoker.bar, root_build_dir), + ... + ] + ... + } + } + + foo("good") { + bar = something + ... + } + ``` + +- 同一变量做两次rebase_path会出现意想不到的结果。 + + ``` + # 例11 + template("foo") { + action(target_name) { + ... + args = [ + # bar被执行了两次rebase_path, 传递的bar的值已经不对了 + "--bar=" + rebase_path(invoker.bar, root_build_dir), + ... + ] + ... + } + } + + foo("bad") { + # 不要在这里调用rebase_path + bar = rebase_path(some_value,root_build_dir) + ... + } + ``` + +### 模块间数据分享 + +模块间数据分享是很常见的事情,比如A模块想要知道B模块的输出和deps。 + +- 同一BUILD.gn之间数据分享 + + 同一BUILD.gn之间数据可以通过定义全局变量的方式来共享。 + + 下面的例子中,模块a的输出是模块b的输入,可以通过定义全局变量的方式来共享给b + + ``` + # 例12 + _output_a = get_label_info(":a", "out_dir") + "/a.out" + action("a") { + outputs = _output_a + ... + } + action("b") { + inputs = [_output_a] + ... + } + ``` + +- 不同BUILD.gn之间数据分享 + + 不同BUILD.gn之间传递数据,最好的办法是将需要共享的数据保存成文件,然后不同模块之间通过文件来传递和共享数据。这种场景比较复杂,读者可以参照OpenHarmony的hap编译过程的write_meta_data。 + +### forward_variable_from + +- 自定义模板需要首先将testonly传递(forward)进来。因为该模板的target有可能被testonly的目标依赖。 + + ``` + # 例13 + # 自定义模板首先要传递testonly + template("foo") { + forward_variable_from(invoker, ["testonly"]) + ... + } + ``` + +- 不推荐使用*来forward变量,需要的变量应该**显式地,一个一个地**被forward进来。 + + ``` + # 例14 + # Bad,使用*forward变量 + template("foo") { + forward_variable_from(invoker, "*") + ... + } + + # Good, 显式地,一个一个地forward变量 + template("bar") { + # + forward_variable_from(invoker, [ + "testonly", + "deps", + ... + ]) + ... + } + ``` + +### target_name + +target_name会随着作用域变化而变化,使用时需要注意。 + +``` +# 例15 +# target_name会随着作用域变化而变化 +template("foo") { + # 此时打印出来的target_name为"${target_name}" + print(target_name) + _code_gen_target = "${target_name}__gen" + code_gen(_code_gen_target) { + # 此时打印出来的target_name为"${target_name}__gen" + print(target_name) + ... + } + _compile_gen_target = "${target_name}__compile" + compile(_compile_gen_target) { + # 此时打印出来的target_name为"${target_name}__compile" + print(target_name) + ... + } + ... +} +``` + +### public_configs + +如果模块需要向外export头文件,请使用public_configs。 + +``` +# 例16 +# b依赖a,会同时继承a的headers +config("headers") { + include_dirs = ["//path-to-headers"] + ... +} +shared_library("a") { + public_configs = [":headers"] + ... +} +executable("b") { + deps = [":a"] + ... +} +``` + +### template + +自定义模板中必须有一个子目标的名字是target_name。该子目标会作为template的主目标。其他子目标都应该被主目标依赖,否则子目标不会被编译。 + +``` +# 例17 +# 自定义模板中必须有一个子目标的名字是target_name +template("foo") { + _code_gen_target = "${target_name}__gen" + code_gen(_code_gen_target) { + ... + } + _compile_gen_target = "${target_name}__compile" + compile(_compile_gen_target) { + # 此时打印出来的target_name为"${target_name}__compile" + print(target_name) + ... + } + ... + group(target_name) { + deps = [ + # 由于_compile_gen_target依赖了_code_gen_target,所以主目标只需要依赖_compile_gen_target即可。 + ":$_compile_gen_target" + ] + } +} +``` + +### set_source_assignment_filter + +set_source_assignment_filter除了可以过滤sources,还可以用来过滤其他变量。过滤完成后记得将过滤器和sources置空。 + +``` +# 例18 +# 使用set_source_assignment_filter过滤依赖, 挑选label符合*:*_res的添加到依赖列表中 +_deps = [] +foreach(_possible_dep, invoker.deps) { + set_source_assignment_filter(["*:*_res"]) + _label = get_label_info(_possible_dep, "label_no_toolchain") + sources = [] + sources = [ _label ] + if (sources = []) { + _deps += _sources + } +} +sources = [] +set_source_assignment_filter([]) +``` + +最新版本上set_source_assignment_filter被filter_include和filter_exclude取代。 + +### 部件内依赖采用deps,跨部件依赖采用external_deps + +- 部件在OpenHarmony上指能提供某个能力的一组模块。 +- 在模块定义的时候可以声明part_name,用来表明当前模块属于哪个部件。 + +- 每个部件会声明其inner-kit,供其他部件调用。部件innerkit的声明见源码中的ohos.build。 +- 部件间依赖只能依赖innerkit,不能依赖非innerkit的模块。 + +- 如果a模块和b模块的part_name相同,那么a、b模块属于同一个部件,a,b模块之间的依赖关系可以用deps来声明。 + +- 如果a、b模块的part_name不同,那么a、b模块不属于同一个部件,a、b模块之间的依赖关系需要通过external_deps来声明,依赖方式为"部件名:模块名"的方式。见例19。 + + ``` + # 例19 + shared_library("a") { + ... + external_deps = ["part_name_of_b:b"] + ... + } + ``` + + + + + + + + + + + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" index b5a404797e7582f362371c25ab8277ff9f83a048..178fe5d80ae9f0a183dd7861866d525a66895ea0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/04.\345\210\206\345\270\203\345\274\217\350\277\234\347\250\213\345\220\257\345\212\250.md" @@ -1,6 +1,6 @@ --- title: 分布式远程启动 -permalink: /pages/000403 +permalink: /pages/010504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 分布式远程启动 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" index c4a4a24e639e230a24fd60c9738fd0c310d1c5b1..c59e8f820ddf7dc97d98eabbde0a20f76032e255 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/01.\345\233\276\345\275\242\345\233\276\345\203\217\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 图形图像概述 -permalink: /pages/00040400 +permalink: /pages/01050501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 图形图像概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index 5f57c0f951b726e5d0c9e3ea67b0ca77bdac4a52..443fa67ff7b1e4a097c037d8df047385cbbcb3d2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/02.\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 容器类组件开发指导 -permalink: /pages/00040401 +permalink: /pages/01050502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 容器类组件开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index c24c86b88f66951c7764f9b350bdcdb2cab2760c..291b80699e7dd3a3a7b37687f490e09298c48497 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/03.\345\270\203\345\261\200\345\256\271\345\231\250\347\261\273\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 布局容器类组件开发指导 -permalink: /pages/00040402 +permalink: /pages/01050503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 布局容器类组件开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index 03cb374e2ae9905905c7d15f68a0755a0624e9f1..2c0710189135204bc9665fe2c6bc80728ea505a1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/04.\346\231\256\351\200\232\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 普通组件开发指导 -permalink: /pages/00040403 +permalink: /pages/01050504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 普通组件开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" index 842812279fc6329bffdab77c4b3da454cd26d4fb..be7dcd9cacea24d46ccb10774fa373ecefbd5fc4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/05.\345\233\276\345\275\242\345\233\276\345\203\217/05.\345\212\250\347\224\273\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 动画开发指导 -permalink: /pages/00040404 +permalink: /pages/01050505 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 动画开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" index 2975c5ffe1adaee228bda06a27153cdc4abc203e..6b4d2ff1441904b4a79b5fe4fa3ddfca24ef11bf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/01.\347\233\270\346\234\272\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 相机开发概述 -permalink: /pages/0004050000 +permalink: /pages/0105060101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 相机开发概述 @@ -103,7 +103,7 @@ date: 2021-12-30 18:31:32 类似的,用户也可以自行创建Surface传递给Camera实例,并实现消费者逻辑(例如通过网络传输视频流,或是将拍照的帧数据保存成图片文件)。 - 图形图像模块也通过Surface从Camera获取流资源,具体步骤详见[图形图像开发指导](/pages/00040400)。 + 图形图像模块也通过Surface从Camera获取流资源,具体步骤详见[图形图像开发指导](/pages/01050501)。 - 相机运行流程 1. Camera创建流程 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" index 18fd756f0dd0b4565b397188301da83908c64ac2..16fd81fae9554101cf247a65c6cca4e44f509cbc 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/02.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 拍照开发指导 -permalink: /pages/0004050001 +permalink: /pages/0105060102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 拍照开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" index c8c83eb23aa922a8635db15940335a37a2f2cfc2..7f663f075efbac618a2acedae9d9e419b052ce2f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/03.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 录像开发指导 -permalink: /pages/0004050002 +permalink: /pages/0105060103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 录像开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" index aa6c7325db8efc677b15f592580fce3aaf9892db..1f2c0326366e268ed1b8ead13532539ec3670bd7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/01.\347\233\270\346\234\272/04.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 预览开发指导 -permalink: /pages/0004050003 +permalink: /pages/0105060104 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 预览开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" index 6c8388533ba575de14cf5316f50e5b4d7961411b..5a189e92f9e1c59cf2ef7de5a6b5478b3556ae16 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/01.\351\237\263\350\247\206\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 音视频开发概述 -permalink: /pages/0004050100 +permalink: /pages/0105060201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:46 --- # 音视频开发概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" index 4633242fa952211d0189df14101509c1628b7e55..41a26ed997494798c63c863354bb23b27aa35047 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/02.\351\237\263\350\247\206\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 音视频播放开发指导 -permalink: /pages/0004050101 +permalink: /pages/0105060202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 音视频播放开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index ae1807add9a4639d96a98aeec4a4d9461af2054e..7616c5ad7e3c3a705a791a31035a9a7c2c60d6ba 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/06.\345\252\222\344\275\223/02.\351\237\263\350\247\206\351\242\221/03.\351\237\263\350\247\206\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 音视频录制开发指导 -permalink: /pages/0004050102 +permalink: /pages/0105060203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 音视频录制开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" index bdb1435c3882333006335fb276f5654cd3b92e71..f3aa1cb33b594e4ca0f6a26005fc2fdbdb436278 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/01.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 公共基础库概述 -permalink: /pages/00040600 +permalink: /pages/01050701 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 公共基础库概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" index 1b0195245ce5f23b5431a017ef7b84d5e7d59b06..466e29441736006fbb25b9304654d911576ee8de 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/02.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 公共基础库开发指导 -permalink: /pages/00040601 +permalink: /pages/01050702 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 公共基础库开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" index 5dc891aab6cd84be6c140d66f0d86ca439a403e7..6f5224edd9cfab699a3a009588d4513237635166 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/07.\345\205\254\345\205\261\345\237\272\347\241\200/03.\345\205\254\345\205\261\345\237\272\347\241\200\345\272\223\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 公共基础库常见问题 -permalink: /pages/00040602 +permalink: /pages/01050703 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 公共基础库常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" index 8c19ee61dd5a89282c6f39e51c3b419011ec0744..56b0cbaeaae6b20eccdc9f99a7d597c34b3fd8e3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/00040700 +permalink: /pages/01050801 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # AI引擎框架开发指南 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" similarity index 71% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" index ab19bd830c515f4fe9be88f213b44d742344eca4..8a9183827817ab96f7fcf81e0e4de63ef7a1ec8f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: 搭建环境 -permalink: /pages/00040701 +permalink: /pages/01050802 navbar: true sidebar: true prev: true @@ -9,10 +9,10 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 搭建环境 1. 准备开发板:Hi3516DV300,Hi3518EV300 -2. [下载源码](/pages/000102) +2. [下载源码](/pages/extra/00a0c5/) diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" index 28e4899f6b3cb5e5b319d82219239c0126214ef3..bd8fc9b63a27a892c2b68b47f24e9e3cd19a9777 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/01.\344\273\243\347\240\201\347\256\241\347\220\206\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: 代码管理规范 -permalink: /pages/0004070200 +permalink: /pages/0105080301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 代码管理规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" index 2b0a1ec005fe0dd3d1b750e6199de1418ff49e13..24d5c6842a897f40597b7dcae68496f47a5801b2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/02.\345\221\275\345\220\215\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: 命名规范 -permalink: /pages/0004070201 +permalink: /pages/0105080302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 命名规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" index 775289a2ee930539083f3b9b4b14c2a8dcca7284..206ab45a032f1cd9852f5fbbf41f922a272ac3d9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/03.\346\212\200\346\234\257\350\247\204\350\214\203/03.\346\216\245\345\217\243\345\274\200\345\217\221\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: 接口开发规范 -permalink: /pages/0004070202 +permalink: /pages/0105080303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 接口开发规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" index 34cb21db76f64c535f4b62d810fa91ef93b4a0bd..6a71914af53cea4fa9874b608bb5829c1a501345 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/01.SDK\345\274\200\345\217\221\350\277\207\347\250\213.md" @@ -1,6 +1,6 @@ --- title: SDK开发过程 -permalink: /pages/0004070300 +permalink: /pages/0105080401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # SDK开发过程 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" index 3da61d04d001e0742fceefa8520d7a2601ec8d72..03965cb9007c13a95bbd2567c9435ce653d752fc 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/02.\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 插件的开发过程 -permalink: /pages/0004070301 +permalink: /pages/0105080402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 插件的开发过程 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" index a76f8c5013ee3f9a679e18458292524535360bf2..0fef8ad75bbedfdbf44b83b1765fc707d81190db 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/04.\345\274\200\345\217\221\346\214\207\345\257\274/03.\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\350\277\207\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 配置文件的开发过程 -permalink: /pages/0004070302 +permalink: /pages/0105080403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 配置文件的开发过程 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" index 2586c761f8ca09c0ed6c54fcb57e9deea4d011d5..251e924007f7100c4e63a7d0ec5aeabb706af302 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/01.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253SDK\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 唤醒词识别SDK的开发示例 -permalink: /pages/0004070400 +permalink: /pages/0105080501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 唤醒词识别SDK的开发示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" index 382578248fa0790fe614a7450d4c59c2e61135c0..8e5dfaec9dc791a18edd5a24eaf738cc657d0cdf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/02.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\346\217\222\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 唤醒词识别插件的开发示例 -permalink: /pages/0004070401 +permalink: /pages/0105080502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 唤醒词识别插件的开发示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" index 791ffcf0c26263aa2e83c3f70095741322f764f3..b2e34620685225cd314fbc2f94fc21c7839b83f3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/08.AI\346\241\206\346\236\266/05.\345\274\200\345\217\221\347\244\272\344\276\213/03.\345\224\244\351\206\222\350\257\215\350\257\206\345\210\253\351\205\215\347\275\256\346\226\207\344\273\266\347\232\204\345\274\200\345\217\221\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 唤醒词识别配置文件的开发示例 -permalink: /pages/0004070402 +permalink: /pages/0105080503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 唤醒词识别配置文件的开发示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" index a054904b367a39aac8e20a1b2cc9d406886d17f5..1afabe3f102fc97e4149b11568da3b4d0371d51b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/01.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: Sensor服务子系概述 -permalink: /pages/00040800 +permalink: /pages/01050901 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # Sensor服务子系概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" index c0724984548ee4eaf331353b13b58107895c4617..de261531c9499a9eab6c9e7353ff8556fc3b845b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/02.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: Sensor服务子系使用指导 -permalink: /pages/00040801 +permalink: /pages/01050902 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # Sensor服务子系使用指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" index 252b3fe23855bbb495bb17a61eaeef9b9b2cc78a..a011f61d5eee834dd31e48b5be65b5d3c6f59b7a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/09.Sensor\346\234\215\345\212\241/03.Sensor\346\234\215\345\212\241\345\255\220\347\263\273\344\275\277\347\224\250\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: Sensor服务子系使用实例 -permalink: /pages/00040802 +permalink: /pages/01050903 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # Sensor服务子系使用实例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" index b8bfcd6d594ed1f6715472e2f5e6a66c0bc87ea9..2041492c897ec11ce1807241f8ee751459d47fa0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/00040900 +permalink: /pages/01050a01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 概述 @@ -86,7 +86,7 @@ Ability子系统是管理OpenHarmony应用运行状态的开发框架。 - **AbilityKit**:Ability框架提供给开发者的开发包,开发者基于该开发包可以开发出基于Ability组件的应用。基于Ability组件开发的应用有两种类型:基于Javascript语言开发的Ability(JS Ability)和基于C/C++语言开发的Ability(Native Ability)。JS应用开发框架是开发者开发JS Ability所用到框架,是在AbilityKit基础封装的包含js UI组件的一套方便开发者能够迅速开发Ability应用的框架。 - **AbilityLoader**:负责注册和加载开发者Ability的模块。开发者开发的Ability先要调用AbilityLoader的注册接口注册到框架中,接着Ability启动时会被实例化。 -- **AbilityManager:**负责AbilityKit和Ability管理服务进行IPC的通信。 +- **AbilityManager**:负责AbilityKit和Ability管理服务进行IPC的通信。 - **EventHandler**:AbilityKit提供给开发者的用于在Ability中实现线程间通信的一个模块。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" similarity index 61% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" index d4f01416899602773d4ee860473a8c784fe461b1..ec9e5440a384f0e87415c10cc7a11ef92ed40931 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/02.\346\220\255\345\273\272\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: 搭建环境 -permalink: /pages/00040901 +permalink: /pages/01050a02 navbar: true sidebar: true prev: true @@ -9,12 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 搭建环境 - 开发板:Hi3516DV300 -- [下载源码](/pages/000102) -- [编译用户程序框架](/pages/00000118) +- [下载源码](/pages/extra/00a0c5/) +- [编译用户程序框架](/pages/01010219) diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" index d531d91f89fa1cc2248d2989d6b9439c40b3b439..4c8359570c371d4fd26b62d45f4e0ebc0d255e3c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/03.\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 开发指导 -permalink: /pages/00040902 +permalink: /pages/01050a03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" index a653f7d726e11fd203db3e14c332e31c9e8fe8bf..5b6e6864138d30c97ef1a33d87478ffabf23c61b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/10.\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266/04.\345\274\200\345\217\221\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 开发实例 -permalink: /pages/00040903 +permalink: /pages/01050a04 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 开发实例 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" index 7ef05c4084ba4654c6d01aeebd6b95c9f0458f17..3ce3d388573d32711d148d64a512b036e8710ea5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/11.OTA\345\215\207\347\272\247.md" @@ -1,6 +1,6 @@ --- title: OTA升级 -permalink: /pages/00040a +permalink: /pages/01050b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # OTA升级 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" index 83b5071bc5ffdb77174d60364357b439f02afc1a..8158b0d9ca8979ebad878aa68ba1da6a6c5fec1b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/01.\347\224\265\350\257\235\346\234\215\345\212\241\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 电话服务概述 -permalink: /pages/00040b00 +permalink: /pages/01050c01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 电话服务概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" index e2213aeef906c5091998978e5122160ac7f6137b..53af36f2a6d0c2d42429f970baf6f0206addf447 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/12.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\224\265\350\257\235\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 电话服务开发指导 -permalink: /pages/00040b01 +permalink: /pages/01050c02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 电话服务开发指导 @@ -157,7 +157,7 @@ Modem厂商库初始化接口。 ### 调测验证 -1. 用[hdc\_std工具](/pages/00080101#section05992022154916)连接调试设备,把编译生成的libril\_vendor.z.so库文件(参见[Modem厂商库集成指导](#section590mcpsimp))通过以下命令推到/system/lib/目录下。 +1. 用[hdc\_std工具](/pages/01090202#section05992022154916)连接调试设备,把编译生成的libril\_vendor.z.so库文件(参见[Modem厂商库集成指导](#section590mcpsimp))通过以下命令推到/system/lib/目录下。 ``` hdc_std file send libril_vendor.z.so /system/lib/ @@ -275,7 +275,7 @@ Modem业务请求及响应接口。 ### 调测验证 -1. 用[hdc\_std工具](/pages/00080101#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。 +1. 用[hdc\_std工具](/pages/01090202#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。 ``` hdc_std file send libril_vendor.z.so /system/lib/ @@ -413,7 +413,7 @@ Modem事件上报接口。 ### 调测验证 -1. 用[hdc\_std工具](/pages/00080101#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。 +1. 用[hdc\_std工具](/pages/01090202#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。 ``` hdc_std file send libril_vendor.z.so /system/lib/ diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" index 0a87b2936a82f1326f98f593e970e52e6edbbe74..9146b4ab6474de2f06df82ed3f3cd30c6e1b0dda 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/00040c00 +permalink: /pages/01050d01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" index 75e9457764a747d035e7cd681fc55ed8882d1cc7..b0dd4cd0f4049dd1e941730bb2a2f1b98a7538d7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/02.\345\272\224\347\224\250\351\252\214\347\255\276\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 应用验签开发指导 -permalink: /pages/00040c01 +permalink: /pages/01050d02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 应用验签开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" index 2905b3ae80be1d2374296e64198ff63d561908af..52baed5879b8c3fe472ea3c5750d86662d39e91c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/03.\345\272\224\347\224\250\346\235\203\351\231\220\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 应用权限管理开发指导 -permalink: /pages/00040c02 +permalink: /pages/01050d03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 应用权限管理开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" index 5634a153fc07f8f1fd3827dd59c51d49d538d8e8..1d2208975eb3c4112ee18b92fe21c94541ff6c55 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/13.\345\256\211\345\205\250/04.IPC\351\200\232\344\277\241\351\211\264\346\235\203\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: IPC通信鉴权开发指导 -permalink: /pages/00040c03 +permalink: /pages/01050d04 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # IPC通信鉴权开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" index d3ad2fc2daf26885094e1377373cfb9b25e4d801..8b17c12a1fb94b94e7d12cf330496b04adce16e0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/01.\345\220\257\345\212\250\346\201\242\345\244\215\345\255\220\347\263\273\347\273\237\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 启动恢复子系统概述 -permalink: /pages/00040d00 +permalink: /pages/01050e01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 启动恢复子系统概述 @@ -36,7 +36,7 @@ date: 2021-12-30 18:31:32 - init启动引导组件 - init启动引导组件对应的进程为init进程,是内核完成初始化后启动的第一个用户态进程。init进程启动之后,读取init.cfg配置文件,根据解析结果,执行相应命令(见[第2章表2](/pages/00040d01#table122681439144112)描述)并依次启动各关键系统服务进程,在启动系统服务进程的同时设置其对应权限。 + init启动引导组件对应的进程为init进程,是内核完成初始化后启动的第一个用户态进程。init进程启动之后,读取init.cfg配置文件,根据解析结果,执行相应命令(见[第2章表2](/pages/01050e02#table122681439144112)描述)并依次启动各关键系统服务进程,在启动系统服务进程的同时设置其对应权限。 - ueventd启动引导组件 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" index f684198962476147ed3360cf64fdef8e2375e9b6..a762a4571bbc539e81f9f41634844f9f8bb3dc24 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/02.init\345\220\257\345\212\250\345\274\225\345\257\274\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: init启动引导组件 -permalink: /pages/00040d01 +permalink: /pages/01050e02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # init启动引导组件 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" index b74550cc0939d8123e2fa500704683de35125c48..e1ed6c4b354d5f84685c2324db1c0a71bd03e0d8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/03.appspawn\345\272\224\347\224\250\345\255\265\345\214\226\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: appspawn应用孵化组件 -permalink: /pages/00040d02 +permalink: /pages/01050e03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # appspawn应用孵化组件 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" index bc211987028f0c666c4ec06a4f1b77a8b72ff32e..6b1b34c9bc10e11917fe7ae4ea9638bbd6471984 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/04.bootstrap\346\234\215\345\212\241\345\220\257\345\212\250\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: bootstrap服务启动组件 -permalink: /pages/00040d03 +permalink: /pages/01050e04 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # bootstrap服务启动组件 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" index 25af37fd90658f128efa0592075133aca71d56bf..8320f25ae34b4fd1a5dae56bde73bf459980936e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/05.syspara\347\263\273\347\273\237\345\261\236\346\200\247\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: syspara系统属性组件 -permalink: /pages/00040d04 +permalink: /pages/01050e05 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # syspara系统属性组件 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" index 3e08dcb45a7b9580835843141f2a43a8bfe07189..4621e8bf08b6e277ffa7d06e778b3710f250caa8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/06.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/00040d05 +permalink: /pages/01050e06 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 常见问题 @@ -42,7 +42,7 @@ date: 2021-12-30 18:31:32 **可能原因** -被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](/pages/00040d01#table14737791471)描述)。 +被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](/pages/01050e02#table14737791471)描述)。 - 当该属性为0时,表示若当前服务进程退出,init不需要重启单板。 - 当该属性为1时,表示若当前服务进程退出,init需要重启单板。 diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" index 50885429cb82cf18773f1d2934ac96a7df0d1235..882c0ff0500a2192a95945f42b2ff9609d01bd39 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/14.\345\220\257\345\212\250\346\201\242\345\244\215/07.\345\217\202\350\200\203.md" @@ -1,6 +1,6 @@ --- title: 参考 -permalink: /pages/00040d06 +permalink: /pages/01050e07 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 参考 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..9461e706f785b91234be4a1666bd46ac0ff6f8df --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,24 @@ +--- +title: HiSysEvent开发指导 +permalink: /pages/01050f04 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiSysEvent开发指导 + +- **[HiSysEvent打点配置指导](/pages/extra/4e31c6/)** + +- **[HiSysEvent打点指导](/pages/0105100601)** + +- **[HiSysEvent订阅指导](/pages/0105100602)** + +- **[HiSysEvent查询指导](/pages/0105100603)** + +- **[HiSysEvent工具使用指导](/pages/0105100604)** \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/01.DFX\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/01.DFX\346\246\202\350\277\260.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/01.DFX\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/01.DFX\346\246\202\350\277\260.md" index 0e325b4756b0a159f40dc57ddab4c4d5d31b117b..180f9af4d1b54522df978db4c22c2cfd38b0cd1d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/01.DFX\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/01.DFX\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: DFX概述 -permalink: /pages/00040e00 +permalink: /pages/01051001 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- -# DFX概述 +# DFX概述 - [基本概念](#section5635178134811) @@ -21,7 +21,9 @@ date: 2021-12-30 18:31:32 - HiLog流水日志,轻量系统类设备(参考内存≥128KB)、小型系统类设备(参考内存≥1MB)、标准系统类设备(参考内存≥128MB)适用。 -- HiSysEvent系统事件埋点,标准系统类设备(参考内存≥128MB)。 +- HiTrace分布式跟踪,标准系统类设备(参考内存≥128MB)适用。 +- HiCollie卡死故障检测,标准系统类设备(参考内存≥128MB)适用。 +- HiSysEvent系统事件埋点,标准系统类设备(参考内存≥128MB)适用。 ## 基本概念 diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ae286a913ed5e782b867dfed9677fe32e598681 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,121 @@ +--- +title: HiLog开发指导 +permalink: /pages/01051002 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiLog开发指导 + +- [概述](#概述) +- [接口说明](#接口说明) +- [开发实例](#开发实例) + - [C使用示例](#c使用示例) + - [C++使用示例](#c-使用示例) + +## 概述 + +HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用打印日志,记录用户操作、系统运行状态等。 + +本章节内容对标准系统类设备(参考内存≥128MB)适用。 + + +## 接口说明 + +**表1** C++、C的函数接口 + +| **C++** | | **C** | +| -------- | -------- | -------- | +| **类** | **方法** | **方法/宏** | +| HiLog | int Debug(const HiLogLabel &label, const char \*fmt, ...) | HILOG_DEBUG(type, ...) | +| | int Info(const HiLogLabel &label, const char \*fmt, ...) | HILOG_INFO(type, ...) | +| | int Warn(const HiLogLabel &label, const char \*fmt, ...) | HILOG_WARN(type, ...) | +| | int Error(const HiLogLabel &label, const char \*fmt, ...) | HILOG_ERROR(type, ...) | +| | int Fatal(const HiLogLabel &label, const char \*fmt, ...) | HILOG_FATAL(type, ...) | +| | NA | int HiLogPrint(LogType type, LogLevel level, unsigned int domain, const char \*tag, const char \*fmt, ...) | +| | boolean IsLoggable(unsigned int domain, const char \*tag, LogLevel level) | bool HiLogIsLoggable(unsigned int domain, const char \*tag, LogLevel level) | +| HiLogLabel | struct HiLogLabel | LOG_DOMAIN
LOG_TAG | + +**表3** C++接口说明函数参数和功能 + +| **类** | **方法** | **描述** | +| -------- | -------- | -------- | +| HiLog | int Debug(const HiLogLabel &label, const char \*fmt, ...) | 功能:输出 debug 级别日志。
输入参数:
- label:用于标识输出日志的类型、业务领域、TAG。
- format:常量格式字符串,包含参数类型、隐私标识。未加隐私标识的缺省为隐私参数。
- fmt:格式化变参描述字符串。
输出参数:无
返回值:大于等于0,成功;小于0,失败。 | +| | int Info(const HiLogLabel &label, const char \*fmt, ...) | 功能:输出 info 级别日志。
参数说明同 Debug 接口。 | +| | int Warn(const HiLogLabel &label, const char \*fmt, ...) | 功能:输出 warn 级别日志。
参数说明同 Debug 接口。 | +| | int Error(const HiLogLabel &label, const char \*fmt, ...) | 功能:输出 error 级别日志。
参数说明同 Debug 接口。 | +| | int Fatal(const HiLogLabel &label, const char \*fmt, ...) | 功能:输出 fatal 级别日志。
参数说明同 Debug 接口。 | +| | boolean IsLoggable(unsigned int domain, const char \*tag, LogLevel level) | 功能:检查指定业务领域、TAG、级别的日志是否可以打印。
输入参数:
- domain:指定日志业务领域。
- tag: 指定日志TAG。
- level: 指定日志level。
输出参数:无
返回值:如果指定domain、tag、level日志可以打印则返回true;否则返回false。 | +| HiLogLabel | struct HiLogLabel | 功能:初始化日志标签参数。
成员参数:
- domain:指定日志业务领域。
- tag: 指定日志TAG。
- level: 指定日志level。 | + + +## 开发实例 + + +### C使用示例 + +1. 在.c源文件中,包含hilog头文件: + ``` + #include "hilog/log.h" + ``` + + 定义domain、tag: + + ``` + #undef LOG_DOMAIN + #undef LOG_TAG + #define LOG_DOMAIN 0 // 标识业务领域,范围0x0~0xFFFFF + #define LOG_TAG "MY_TAG" + ``` + + 打印日志: + + ``` + HILOG_INFO(LOG_CORE, "Failed to visit %{private}s, reason:%{public}d.", url, errno); + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + ``` + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + ``` + + +### C++使用示例 + +1. 在.h类定义头文件中,包含hilog头文件: + ``` + #include "hilog/log.h" + ``` + + 如果类头文件中需要日志打印,在头文件中类定义起始处 定义 LABEL: + + ``` + class MyClass { + static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0, "MY_TAG"}; + ...... + } + ``` + + 如果类头文件中没有日志打印,在类实现文件中 定义 LABEL: + + ``` + using namespace OHOS::HiviewDFX; + static constexpr HiLogLabel LABEL = {LOG_CORE, 0, "MY_TAG"}; + ``` + + 打印日志: + + ``` + HiLog::Info(LABEL, "Failed to visit %{private}s, reason:%{public}d.", url, errno); + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + ``` + external_deps = [ "hiviewdfx:libhilog" ] + ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" index d69bde23e4c7575add5cdf83ffba84d97b61bdbb..9f10e54ec4951c48be8379b55dd0e88f65fc0f12 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/03.HiLog\\_Lite\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: HiLog\\_Lite开发指导 -permalink: /pages/00040e02 +permalink: /pages/01051003 navbar: true sidebar: true prev: true @@ -9,9 +9,9 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- -# HiLog\_Lite开发指导 +# HiLog\_Lite开发指导 - [概述](#section775017517390) - [接口说明](#section114412157402) diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/04.HiTrace\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/04.HiTrace\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..14a02a0ff53017db0695c4ba41eaa23ff6f02ca7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/04.HiTrace\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,551 @@ +--- +title: HiTrace开发指导 +permalink: /pages/01051004 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiTrace开发指导 + +- [概述](#section3986195420436) +- [应用场景](#section134561822574) + - [业务使用示例](#section63861653124417) + +- [接口说明](#section1517945334617) + - [接口形式对比](#section932504474) + - [接口功能参数](#section2514638125) + +- [通信调用处理](#section11257133933) +- [开发实例](#section14310412491) + - [C++接口实例](#section114916381509) + - [C接口实例](#section108292107514) + + +## 概述 + +HiTrace主要是对于跨设备/跨进程/跨线程的业务流程,通过相同的traceid在整个业务流程中传递,将流程处理过程中的调用关系、各种输出信息关联和展现出来,帮助使用者分析、定位问题和系统调优。 + +## 应用场景 + +HiTrace在产品中应用场景如下,包括: + +- 端侧业务流程信息(日志、事件等)关联、上报 +- 云侧对上报信息的关联展示和分析,辅助问题定位 +- IDE对业务流程详细信息、耗时分布进行调试,辅助系统调优 + + **图 1** HiTrace应用场景 + ![](/images/device-dev/subsystems/figure/HiTrace应用场景.png "HiTrace应用场景") + + +### 业务使用示例 + +**图 2** 业务调用流程图(跨设备、跨进程同步调用) +![](/images/device-dev/subsystems/figure/业务调用流程图(跨设备-跨进程同步调用).png "业务调用流程图(跨设备-跨进程同步调用)") + +1. 调试时展示业务流程中的调用关系,进行关键路径分析、功能依赖分析,确定各调用点耗时、调用频率,提前发现性能瓶颈点。 + + **图 3** 业务调用流程序列图 + ![](/images/device-dev/subsystems/figure/业务调用流程序列图.png "业务调用流程序列图") + + **图 4** 业务调用流程性能耗时分布 + ![](/images/device-dev/subsystems/figure/业务调用流程性能耗时分布.png "业务调用流程性能耗时分布") + +2. 在日志和事件等信息中自动附加traceid信息,便于开发人员综合分析和快速实现问题定界定位。 + +## 接口说明 + +HiTrace提供C++、C接口。上层业务主要使用HiTrace跟踪启动、结束接口。 + +HiTrace实现在C层,主要原理是在一次业务调用流程中,利用通信传递traceid,在业务处理前将traceid设置到当前线程的TLS\(Thread Local Storage\)中,业务处理结束清除当前线程的TLS;这样的话,在业务处理中可以从当前线程的上下文TLS取到traceid,自动附加到日志、事件信息中。 + +### 接口形式对比 + +**表 1** C++、C的函数接口 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  

C++

+

C

+

+

函数

+

函数

+

HiTrace

+

HiTraceId Begin(const std::string& name, int flags)

+

HiTraceIdStruct HiTraceBegin(const char* name, int flags)

+
  

void End(const HiTraceId& id)

+

void HiTraceEnd(const HiTraceIdStruct* pId)

+
  

HiTraceId GetId();

+

HiTraceIdStruct HiTraceGetId()

+
  

void SetId(const HiTraceId& id)

+

void HiTraceSetId(const HiTraceIdStruct* pId)

+
  

void ClearId()

+

void HiTraceClearId()

+
  

HiTraceId CreateSpan()

+

HiTraceIdStruct HiTraceCreateSpan()

+
  

void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

+

void HiTraceTracepoint(HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...)

+
  

void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

+

void HiTraceTracepointEx(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...)

+

HiTraceId

+

HiTraceId();

+

void HiTraceInitId(HiTraceIdStruct* pId)

+
  

HiTraceId(const uint8_t* pIdArray, int len)

+

HiTraceIdStruct HiTraceBytesToId(const uint8_t* pIdArray, int len)

+
  

bool IsValid()

+

int HiTraceIsValid(const HiTraceIdStruct* pId)

+
  

bool IsFlagEnabled(HiTraceFlag flag)

+

int HiTraceIsFlagEnabled(const HiTraceIdStruct* pId, HiTraceFlag flag)

+
  

void EnableFlag(HiTraceFlag flag)

+

void HiTraceEnableFlag(HiTraceIdStruct* pId, HiTraceFlag flag)

+
  

int GetFlags()

+

int HiTraceGetFlags(const HiTraceIdStruct* pId)

+
  

void SetFlags(int flags)

+

void HiTraceSetFlags(HiTraceIdStruct* pId, int flags)

+
  

uint64_t GetChainId()

+

uint64_t HiTraceGetChainId(const HiTraceIdStruct* pId)

+
  

void SetChainId(uint64_t chainId)

+

void HiTraceSetChainId(HiTraceIdStruct* pId, uint64_t chainId)

+
  

uint64_t GetSpanId()

+

uint64_t HiTraceGetSpanId(const HiTraceIdStruct* pId)

+
  

void SetSpanId(uint64_t spanId)

+

void HiTraceSetSpanId(HiTraceIdStruct* pId, uint64_t spanId)

+
  

uint64_t GetParentSpanId()

+

uint64_t HiTraceGetParentSpanId(const HiTraceIdStruct* pId)

+
  

void SetParentSpanId(uint64_t parentSpanId)

+

void HiTraceSetParentSpanId(HiTraceIdStruct* pId, uint64_t parentSpanId)

+
  

int ToBytes(uint8_t* pIdArray, int len)

+

int HiTraceIdToBytes(const HiTraceIdStruct* pId, uint8_t* pIdArray, int len)

+
+ +### 接口功能参数 + +**表 2** C++接口说明函数参数和功能 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

方法

+

描述

+

HiTrace

+

HiTraceId Begin(const std::string& name, int flags)

+

功能:启动HiTrace跟踪、生成HiTraceId对象并设置到当前线程TLS中。

+

输入参数:

+
  • name:业务流程名称。
  • flags:跟踪指示位,可以组合使用,具体含义为:
    • HITRACE_FLAG_INCLUDE_ASYNC:同时跟踪同步调用和异步调用,缺省只跟踪同步调用。
    • HITRACE_FLAG_DONOT_CREATE_SPAN:不创建子分支,缺省创建子分支。
    • HITRACE_FLAG_TP_INFO:输出tracepoint信息,缺省不输出。
    • HITRACE_FLAG_NO_BE_INFO:不输出起始、结束信息,缺省输出。
    • HITRACE_FLAG_DONOT_ENABLE_LOG:不与日志关联输出,缺省关联。
    • HITRACE_FLAG_FAULT_TRIGGER:故障触发的跟踪,缺省为正常启动的。
    • HITRACE_FLAG_D2D_TP_INFO:输出设备间tracepoint信息,缺省不输出。
    • HITRCE_FLAG_DEFAULT: 缺省标志。
    +
  • 输出参数:无
  • 返回值:启动跟踪超过返回有效HiTraceId对象,否则返回无效对象。
+

注意:嵌套启动跟踪时,内层启动调用返回无效对象。

+
  

void End(const HiTraceId& id)

+

功能:根据Begin返回的HiTraceId停止HiTrace跟踪;清除当前线程TLS中HiTraceId内容。

+

输入参数:

+
  • id:HiTraceId对象。
+

输出参数:无。

+

返回值:无。

+
  

HiTraceId GetId();

+

功能:从当前线程TLS中获取HiTraceId对象。

+

输入参数:无。

+

输出参数:无。

+

返回值:当前线程上下文的HiTraceId对象。

+
  

void SetId(const HiTraceId& id)

+

功能:设置HiTraceId对象内容到当前线程TLS中。

+

输入参数:

+
  • id:HiTraceId对象。
+

输出参数:无。

+

返回值:无。

+
  

void ClearId()

+

功能:清除当前线程TLS中的HiTraceId对象。

+

输入参数:无。

+

输出参数:无。

+

返回值:无。

+
  

HiTraceId CreateSpan()

+

接口功能:获取当前HiTraceId对象中的分支ID。

+

输入参数:无。

+

输出参数:无。

+

返回值:当前分支ID。

+
  

void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

+

功能:根据埋点信息类型输出HiTrace埋点信息,包括时间戳、子分支HiTraceId对象信息。

+

输入参数:

+
  • type:埋点信息类型,具体为
    • HITRACE_TP_CS:Client Send,同步/异步通信客户端发送信息。
    • HITRACE_TP_SR:Server Receive, 同步/异步通信服务端接收信息。
    • HITRACE_TP_SS:Server Send,同步通信服务端发送响应信息。
    • HITRACE_TP_CR:Client Receive,同步通信客户端接收响应信息。
    • HITRACE_TP_GENERAL:普通输出信息。
    +
  • id:当前子分支id。
  • fmt:格式化变参描述字符串。
  • args:变参。
+

输出参数:无。

+

返回值:无。

+
  

void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

+

功能:根据通信模式、埋点信息类型输出HiTrace埋点信息,包括时间戳、子分支HiTraceId对象信息。

+

输入参数:

+
  • mode:通信模式,具体为
    • HITRACE_CM_DEFAULT:未指定通信模式。
    • HITRACE_CM_THREAD:线程间通信。
    • HITRACE_CM_PROCESS:进程间通信。
    • HITRACE_CM_DEVICE:设备间通信。
    +
  • type:埋点信息类型,具体为
    • HITRACE_TP_CS:Client Send,同步/异步通信客户端发送信息。
    • HITRACE_TP_SR:Server Receive, 同步/异步通信服务端接收信息。
    • HITRACE_TP_SS:Server Send,同步通信服务端发送响应信息。
    • HITRACE_TP_CR:Client Receive,同步通信客户端接收响应信息。
    • HITRACE_TP_GENERAL:普通输出信息。
    +
  • id:当前子分支id。
  • fmt:格式化变参描述字符串。
  • args:变参。
+

输出参数:无。

+

返回值:无。

+

HiTraceId

+

HiTraceId();

+

功能:缺省构造函数,生成无效HiTraceId对象。

+

输入参数:无。

+

输出参数:无。

+

返回值:无。

+
  

HiTraceId(const uint8_t* pIdArray, int len)

+

功能:构造函数,根据字节数组创建跟踪HiTraceId对象。

+
输入参数:
  • pIdArray:字节数组指针。
  • len:字节数组长度。
+
+

输出参数:无。

+

返回值:无。

+
  

bool IsValid()

+

功能:HiTraceId对象是否有效。

+

输入参数:无。

+

输出参数:无。

+

返回值:true 有效;false 无效。

+
  

bool IsFlagEnabled(HiTraceFlag flag)

+

功能:HiTraceId对象的某标志是否置位。

+

输入参数:

+
  • flag:跟踪指示位,具体含义见Begin函数中的定义。
+

输出参数:无。

+

返回值:true 该标志置位;false 该标志未置位。

+
  

void EnableFlag(HiTraceFlag flag)短短

+

功能:设置某跟踪标志位到HiTraceId对象中。

+

输入参数:

+
  • flag:跟踪指示位,具体含义见Begin函数中的定义。
+

输出参数:无。

+

返回值:无。

+
  

int GetFlags()

+

功能:获取HiTraceId对象中设置的标志位。

+

输入参数:无。

+

输出参数:无。

+

返回值:跟踪指示位组合,具体含义见Begin函数中的定义。

+
  

void SetFlags(int flags)

+

功能:设置跟踪标志位到HiTraceId对象中。

+

输入参数:

+
  • flags:跟踪指示位组合,具体含义见Begin函数中的定义。
+

输出参数:无。

+

返回值:无。

+
  

uint64_t GetChainId()

+

功能:获取跟踪链ID。

+

输入参数:无。

+

输出参数:无。

+

返回值:跟踪链ID。

+
  

void SetChainId(uint64_t chainId)

+

功能:设置跟踪链ID到HiTraceId对象中。

+

输入参数:

+
  • chainId:跟踪链ID。
+

输出参数:无。

+

返回值:无。

+
  

uint64_t GetSpanId()

+

接口功能:获取当前HiTraceId对象中的分支ID。

+

输入参数:无。

+

输出参数:无。

+

返回值:当前分支ID。

+
  

void SetSpanId(uint64_t spanId)

+

功能:设置分支ID到HiTraceId对象中。

+

输入参数:

+
  • spanId:分支ID。
+

输出参数:无。

+

返回值:无。

+
  

uint64_t GetParentSpanId()

+

功能:获取当前HiTraceId对象中的父分支ID。

+

输入参数:无。

+

输出参数:无。

+

返回值:父分支ID。

+
  

void SetParentSpanId(uint64_t parentSpanId)

+

功能:设置父分支ID到HiTraceId对象中。

+

输入参数:

+
  • parentSpanId:父分支ID。
+

输出参数:无。

+

返回值:无。

+
  

int ToBytes(uint8_t* pIdArray, int len)

+

功能:将HiTraceId对象转换为字节数组,便于缓存或者通信传递。

+

输入参数:

+
  • pIdArray:字节数组指针,数组长度至少为HITRACE_ID_LEN。
  • len: 字节数组长度
+

输出参数:

+
  • pIdArray:字节数组指针,对象有效时存储转换后的对象数据。
+

返回值:0 转换失败; >0 有效对象转换数组长度。

+
+ +## 通信调用处理 + +业务使用时跨设备/跨进程/跨线程的调用是通过通信机制实现的,HiTrace需要通信机制传递traceid。 + +OpenHarmony系统内置部分通信机制(如ZIDL)已经支持传递traceid。 + +下面描述了同步通信调用传递traceid的处理过程,异步通信调用处理类似。 + +对于不支持的扩展通信机制可以参照该方式实现。 + +**图 5** 同步通信处理 +![](/images/device-dev/subsystems/figure/同步通信处理.png "同步通信处理") + +处理流程: + +1. client侧业务模块调用begin\(\)接口启动调用链跟踪。 +2. client侧业务模块发起同步调用transact,到client侧通信组件。 +3. client侧通信组件: + 1. 从当前线程TLS中获取traceid。 + 2. 生成子调用分支(child traceid)。 + 3. 将child traceid写入同步调用通信数据(transaction data)中。 + 4. 进行CS埋点(Client Send)。 + 5. 将通信数据发送到server侧通信组件。 + +4. server侧通信组件收到通信数据: + 1. 从数据消息包中取出traceid。 + 2. 将traceid设置到当前线程TLS中。 + 3. 进行SR埋点(Server Receive)。 + 4. 然后进行同步调用回调(onTransact)到server侧业务模块。 + +5. server侧业务模块进行服务处理,处理完毕发送处理结果(transact reply)到通信组件。 +6. server侧通信组件: + 1. 进行SS埋点(Server Send)。 + 2. 将响应数据发送到client侧通信组件。 + 3. 清除当前线程TLS中的traceid信息。 + +7. client侧通信组件收到响应数据: + 1. 进行CR埋点(Client Receive)。 + 2. 发送同步调用响应(transact reply)到client侧业务模块。 + +8. client侧业务模块进行同步调用响应处理。 +9. client侧业务模块在流程结束时调用end\(\)接口停止调用链跟踪。 + +## 开发实例 + +### C++接口实例 + +1. 源代码开发 + + 在类定义头文件或者类实现源文件中,包含hitrace头文件: + + ``` + #include "hitrace/trace.h" + ``` + + 在业务类实现源文件中使用(启动/结束跟踪): + + ``` + using namespace OHOS::HiviewDFX; + HiTraceId traceId = HiTrace::Begin("MyServiceFlow", HITRACE_FLAG_DEFAULT); + ...... + HiTrace::End(traceId); + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + + ``` + external_deps = [ "hiviewdfx:libhitrace" ] + ``` + + +### C接口实例 + +1. 源代码开发 + + 在源文件中,包含hitrace头文件: + + ``` + #include "hitrace/trace.h" + ``` + + 在业务类实现源文件中使用(启动/结束跟踪): + + ``` + HiTraceIdStruct traceId = HiTraceBegin("MyServiceFlow", HITRACE_FLAG_DEFAULT); + ...... + HiTraceEnd(traceId); + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + + ``` + external_deps = [ "hiviewdfx:libhitrace" ] + ``` + + diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/05.HiCollie\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/05.HiCollie\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..1c1da62cc8031c871a70ff3da79f3833151b8aaf --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/05.HiCollie\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,206 @@ +--- +title: HiCollie开发指导 +permalink: /pages/01051005 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiCollie开发指导 + +- [概述](#section3432134085116) +- [接口说明](#section139261151145116) +- [效果](#section1589120102458) +- [开发实例](#section13905646534) + - [C++接口开发实例](#section9797199145316) + - [线程卡死监控](#section1734221332) + - [超时监控](#section2186947140) + + +## 概述 + +HiCollie提供了软件看门狗功能。针对系统服务死锁、应用主线程阻塞,用户业务流程超时等故障,HiCollie提供了一套统一的用于故障检测和故障日志生成的框架,提供软件超时故障日志,辅助定位软件超时问题。 + +## 接口说明 + +**表 1** C++接口功能描述表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

所属类

+

接口定义

+

描述

+

XCollieChecker类接口

+

virtual void CheckBlock()

+

接口功能:卡死检测回调函数。

+

输入参数:无。

+

输出参数:无。

+

返回值:无。

+

XCollieChecker类接口

+

virtual void CheckThreadBlock()

+

接口功能:线程卡死检测回调函数。

+

输入参数:无。

+

输出参数:无。

+

返回值:无。

+

XCollie类接口

+

void RegisterXCollieChecker(const sptr<XCollieChecker> &checker, unsigned int type)

+

接口功能:线程卡死检测回调函数注册。

+

输入参数:

+
  • checker:XCollieChecker实例指针。
  • type:卡死检测类型,取值设置为XCOLLIE_THREAD。
+

输出参数:无。

+

返回值:无。

+

XCollie类接口

+

int SetTimer(const std::string &name, unsigned int timeout, std::function<void (void *)> func, void *arg, unsigned int flag)

+

接口功能:添加定时器。

+

输入参数:

+
  • name:定时器名称。
  • timeout:超时时间,单位为秒。
  • func:超时回调函数。
  • arg:超时回调函数参数指针。
  • flag:定时器操作类型。

    XCOLLIE_FLAG_DEFAULT // 其他三个选项功能之和

    +

    XCOLLIE_FLAG_NOOP // 仅调用超时回调函数

    +

    XCOLLIE_FLAG_LOG // 生成超时故障日志

    +

    XCOLLIE_FLAG_RECOVERY // 进程退出

    +
+

输出参数:无。

+

返回值:成功返回定时器标识,失败返回-1。

+

XCollie类接口

+

bool UpdateTimer(int id, unsigned int timeout)

+

接口功能:更新定时器。

+

输入参数:

+
  • id:定时器标识。
  • timeout:超时时间,单位为秒。
+

输出参数:无。

+

返回值:成功返回true,失败返回false。

+

XCollie类接口

+

void CancelTimer(int id)

+

接口功能:取消定时器。

+

输入参数:定时器标识。

+

输出参数:无。

+

返回值:无。

+
+ +## 效果 + +日志打印: + +``` +timeout: TimeoutTimer start at 1611040305 to check 1s ago + +----------StacktraceCatcher CurrentTime:2021-01-19 15:11:45 Unexecuted(-1)(LogType:Stacktrace Pid:27689 Process:XCollieTimeoutModuleTest)---------- + + +----- pid 27689 at 2021-01-19 15:11:45 ----- +Cmd line: ./XCollieTimeoutModuleTest +ABI: 'arm64' + +"XCollieTimeoutM" sysTid=27689 + #01 pc 00000000000174cc /data/test/XCollieTimeoutModuleTest +``` + +## 开发实例 + +### C++接口开发实例 + +### 线程卡死监控 + +线程卡死监控功能需要开发者实现两个卡死检测回调函数,XCollieChecker类的CheckBlock和CheckThreadBlock接口函数。实现了该回调函数之后,开发者还需要通过XCollie类的RegisterXCollieChecker函数,将该回调函数的类实例成功注册。卡死监控线程会定时执行全部已成功注册的回调函数,检查线程逻辑完成标志位,判定已经成功注册的线程逻辑是否被卡死。 + +1. 源代码开发 + + 包含头文件: + + ``` + #include "xcollie.h" + ``` + + 在业务代码中使用: + + ``` + void MyXCollieChecker::CheckLock() + { + /* time consuming job */ + } + + void MyXCollieChecker::CheckThreadBlock() + { + /* time consuming job */ + } + + sptr checker = new MyXCollieChecker("MyXCollieChecker"); + XCollie::GetInstance().RegisterXCollieChecker(checker, + (XCOLLIE_LOCK | XCOLLIE_THREAD)); + ...... + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + + ``` + external_deps = [ "hiviewdfx:libxcollie" ] + ``` + + +### 超时监控 + +单个进程通过SetTimer接口函数添加定时器最多可以设置128个,超过上限则添加定时器操作会失败。 + +1. 源代码开发 + + 包含头文件: + + ``` + #include "xcollie.h" + ``` + + 在业务代码中使用(添加/更新/取消): + + ``` + std::function callback = [](void *args) + { + /* dump helpful information */ + }; + + int id = XCollie::GetInstance().SetTimer("MyXCollieTimer", 10, callback ,nullptr, XCOLLIE_FLAG_LOG); + /* time consuming job */ + XCollie::GetInstance().UpdateTimer(id, 5); + /* time consuming job */ + XCollie::GetInstance().CancelTimer(id); + ...... + ``` + +2. 编译设置,在BUILD.gn里增加子系统SDK依赖: + + ``` + external_deps = [ "hiviewdfx:libxcollie" ] + ``` + + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/01.HiSysEvent\346\211\223\347\202\271\346\214\207\345\257\274.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/01.HiSysEvent\346\211\223\347\202\271\346\214\207\345\257\274.md" index df11243289db8d95b235aab5296c0c85dbd35ac3..233926e3b91ad82396ca9818767131aee0feca8a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/04.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/01.HiSysEvent\346\211\223\347\202\271\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- -title: HiSysEvent开发指导 -permalink: /pages/00040e03 +title: HiSysEvent打点指导 +permalink: /pages/0105100601 navbar: true sidebar: true prev: true @@ -9,21 +9,34 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- -# HiSysEvent开发指导 +# HiSysEvent打点指导 - [概述](#section77571101789) -- [接口说明](#section13480315886) -- [开发实例](#section112771171317) + - [功能简介](#section123133332175224) + - [约束与限制](#section123181432175224) +- [开发指导](#section314416685113) + - [接口说明](#section13480315886) + - [开发实例](#section112771171317) ## 概述 -HiSysEvent提供OpenHarmony埋点接口,通过在关键路径埋点记录系统在运行过程中的重要信息,辅助开发者定位问题,此外还支持开发者将数据上传到云进行大数据质量度量。 +### 功能简介 -## 接口说明 +HiSysEvent提供OpenHarmony打点接口,通过在关键路径打点记录系统在运行过程中的重要信息,辅助开发者定位问题,此外还支持开发者将数据上传到云进行大数据质量度量。 -C++埋点接口如下: +### 约束与限制 + +**HiSysEvent事件打点条件约束:** + +- 在进行HiSysEvent事件打点之前,需要先完成HiSysEvent打点配置,具体配置方法请参考[《HiSysEvent打点配置指导》](/pages/extra/4e31c6/)。 + +## 开发指导 + +### 接口说明 + +C++打点接口如下: HiSysEvent类,具体的API详见接口文档 。 @@ -40,7 +53,7 @@ HiSysEvent类,具体的API详见接口文档 。

接口功能:记录系统事件。

输入参数:

-
  • domain:事件的相关领域,需要使用预置领域请参考Domain,可自定义领域。自定义领域长度在16个字符以内,有效的字符是0-9、A-Z,以字母开头。
  • eventName:事件名,长度在32个字符以内,有效的字符是0-9、a-z、A-Z、_,以字母开头,不能以_结尾。
  • type:事件类型,参考EventType。
  • keyValues:事件参数键值对,支持基本的数据类型、std::string,以及std::vector<基本类型>、std:vector<std::string>。参数名长度在48个字符以内,有效的字符是0-9、a-z、A-Z、_,以字母开头,不能以_结尾。参数名的个数在32个以内。
+
  • domain:事件的相关领域,需要使用预置领域请参考Domain,可自定义领域。自定义领域长度在16个字符以内,有效的字符是0-9、A-Z,以字母开头。
  • eventName:事件名,长度在32个字符以内,有效的字符是0-9、A-Z、_,以字母开头,不能以_结尾。
  • type:事件类型,参考EventType。
  • keyValues:事件参数键值对,支持基本的数据类型、std::string,以及std::vector<基本类型>、std:vector<std::string>。参数名长度在48个字符以内,有效的字符是0-9、A-Z、_,以字母开头,不能以_结尾。参数名的个数在32个以内。

返回值:成功返回0,错误返回小于0的值。

@@ -271,7 +284,7 @@ HiSysEvent类,具体的API详见接口文档 。 -## 开发实例 +### 开发实例 C++接口实例 @@ -283,7 +296,7 @@ C++接口实例 #include "hisysevent.h" ``` - 假设在业务关注应用启动时间start\_app,在业务类实现相关源文件中使用(调用接口埋点): + 假设在业务关注应用启动时间start\_app,在业务类实现相关源文件中使用(调用接口打点): ``` HiSysEvent::Write(HiSysEvent::Domain::AAFWK, "start_app", HiSysEvent::EventType::FAULT, "app_name", "com.demo"); @@ -294,5 +307,3 @@ C++接口实例 ``` external_deps = [ "hisysevent_native:libhisysevent" ] ``` - - diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/02.HiSysEvent\350\256\242\351\230\205\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/02.HiSysEvent\350\256\242\351\230\205\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..816bbc3ad766721ec502784668880c5c4893603b --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/02.HiSysEvent\350\256\242\351\230\205\346\214\207\345\257\274.md" @@ -0,0 +1,210 @@ +--- +title: HiSysEvent订阅指导 +permalink: /pages/0105100602 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiSysEvent订阅指导 + +- [概述](#section315316685112) + - [功能简介](#section123181433335224) + - [约束与限制](#section123181433375224) +- [开发指导](#section315316685113) + - [接口说明](#section0342191810519) + - [开发实例](#section123181432175110) + +## 概述 + +### 功能简介 + +HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接口实时获取关注的事件,例如电池模块侦听功耗相关的事件,用于分析耗电情况。 + +### 约束与限制 + +**HiSysEvent事件订阅条件约束:** + +- 在订阅HiSysEvent事件之前,需要先完成HiSysEvent打点配置,具体配置方法请参考[《HiSysEvent打点配置指导》](/pages/extra/4e31c6/)。 + +## 开发指导 + +### 接口说明 + +**表 1** HiSysEvent订阅接口 + + + + + + + + + + + + + +

接口名称

+

描述

+

int HiSysEventManager::AddEventListener(std::shared_ptr<HiSysEventSubscribeCallBackBase> listener, std::vector<ListenerRule>& rules)

+

接口功能:
  注册订阅HiSysEvent系统事件侦听对象,可设置规则订阅某些事件。

+

输入参数:

+
  • listener:订阅回调对象。
  • rules:事件订阅规则。
+

返回值:

+
  • 0:订阅成功,重复订阅。
  • 1:订阅成功,初次订阅。
  • 其他返回值:订阅失败。
+

void HiSysEventManager::RemoveListener(std::shared_ptr<HiSysEventSubscribeCallBackBase> listener)

+

接口功能:
  移除订阅hisysevent系统事件侦听对象。

+

输入参数:

+
  • listener:订阅回调对象。
+

返回值:
  无。

+
+ +**表 2** ListenerRule订阅规则对象 + + + + + + + + + + + + + + + + +

接口名称

+

描述

+

ListenerRule(const std::string& tag, RuleType ruleType = RuleType::WHOLE_WORD)

+

接口功能:
  订阅规则构造函数,创建事件标签订阅规则对象。

+

输入参数:

+
    +
  • tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
  • +
  • ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。
+

ListenerRule(const std::string& domain, const std::string& eventName, RuleType ruleType = RuleType::WHOLE_WORD)

+

接口功能:
  订阅规则构造函数,创建事件领域与事件名称订阅规则对象。

+

输入参数:

+
    +
  • domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
  • +
  • eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
  • +
  • ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。
+

ListenerRule(const std::string& domain, const std::string& eventName, const std::string& tag, RuleType ruleType = RuleType::WHOLE_WORD)

+

接口功能:
  订阅规则构造函数,创建事件领域、事件名称,事件标签订阅规则对象。

+

输入参数:

+
    +
  • tag:订阅规则的HisysEvent事件标签,字符串类型,最大长度16个字符(含),有效字符包含大小写字母及数字。
  • +
  • domain:订阅规则的HisysEvent事件领域,字符串类型,最大长度16个字符(含),有效字符包含大写字母、数字及下划线。
  • +
  • eventName:订阅规则的HisysEvent事件名称,字符串类型,最大长度32个字符(含),有效字符包含大写字母、数字及下划线。
  • +
  • ruleType:订阅规则的规则类型,RuleType枚举类型(参考表3)。
+
+ +**表 3** RuleType类型 + +| 枚举值 | 描述 | +| ------------ | ------------- | +| WHOLE_WORD | 全词匹配类型 | +| PREFIX | 前缀匹配类型 | +| REGULAR | 正则匹配类型 | + +**表 4** HiSysEventSubscribeCallBackBase订阅对象 + + + + + + + + + + + +

接口名称

+

描述

+

void HiSysEventSubscribeCallBackBase::OnHandle(const std::string& domain, const std::string& eventName, const int eventType, const std::string& eventDetail)

+

接口功能:
  订阅事件的回调接口。

+

输入参数:

+
  • domain:事件所属领域。
  • eventName:事件的名称。
  • eventType:事件类型。
  • eventDetail:包含事件相关信息的字符串,以json的形式体现。
+

返回值:
  无。

+
+ +### 开发实例 + +订阅HiSysEvent事件C++接口实例 + +1. 源代码开发 + + 自定义订阅回调实现类头文件DemoListener.h: + + ``` + #ifndef DEMO_LISTENER_H + #define DEMO_LISTENER_H + + #include "hisysevent_subscribe_callback_native.h" + + #include + + class DemoListener : public OHOS::HiviewDFX::HiSysEventSubscribeCallBackNative { + public: + explicit DemoListener() : HiSysEventSubscribeCallBackNative() {} + void OnHandle(const std::string& domain, const std::string& eventName, const int eventType, + const std::string& eventDetail); + virtual ~DemoListener() {} + void OnServiceDied(); + }; + + #endif DEMO_LISTENER_H + ``` + + 增加DemoListener.cpp文件,在DemoListener类中根据实际需求自定义订阅回调接口的实现逻辑: + + ``` + #include "demo_listener.h" + + #include + + void DemoListener::OnHandle(const std::string& domain, const std::string& eventName, + const int eventType, const std::string& eventDetail) + { + std::cout << eventDetail << std::endl; + } + + void DemoListener::OnServiceDied() + { + std::cout << std::string("service disconnect, exit") << std::endl; + exit(0); + } + ``` + + 通过HiSysEventManager类提供的AddEventListener接口注册回调对象,完成对HiSysEvent的订阅: + + ``` + auto demoListener = std::make_shared(); + // 事件标签规则订阅,规则类型为默认的全词匹配类型 + ListenerRule tagRule("dfx"); + // 事件标签规则订阅,规则类型为正则匹配类型 + ListenerRule regRule("dfx.*", RuleType::REGULAR); + // 事件领域及事件名称规则订阅,规则类型为前缀匹配类型 + ListenerRule domainNameRule("HIVIEWDFX", "APP_USAGE", RuleType::PREFIX); + std::vector sysRules; + sysRules.push_back(tagRule); + sysRules.push_back(regRule); + sysRules.push_back(domainNameRule); + HiSysEventManager::AddEventListener(demoListener, sysRules); + ``` + +2. 编译配置 + + 在BUILD.gn编译文件中,需要添加依赖hisysevent\_native组件的libhisyseventmanager库: + + ``` + external_deps = [ "hisysevent_native:libhisyseventmanager", ] + ``` diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/03.HiSysEvent\346\237\245\350\257\242\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/03.HiSysEvent\346\237\245\350\257\242\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..7ad01664f510e902a21680ebb598dca3bf825cb5 --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/03.HiSysEvent\346\237\245\350\257\242\346\214\207\345\257\274.md" @@ -0,0 +1,191 @@ +--- +title: HiSysEvent查询指导 +permalink: /pages/0105100603 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiSysEvent查询指导 + +- [概述](#section279684125212) +- [开发指导](#section315316761113) + - [接口说明](#section03869128521) + - [开发实例](#section14286111855212) + +## 概述 + +HiSysEvent提供了查询接口,支持开发者设置条件查询HiSysEvent事件,例如功耗部件可以通过该接口获取所需的系统事件进行业务分析。 + +## 开发指导 + +### 接口说明 + +**表 1** HiSysEvent查询接口 + + + + + + + + + + +

接口名

+

描述

+

bool HiSysEventManager::QueryHiSysEvent(struct QueryArg& queryArg, std::vector<struct QueryRule>& queryRules, std::shared_ptr<HiSysEventQueryCallBackBase> queryCallBack)

+

接口功能:支持设置查询时间段,事件领域,事件名称等,查询满足条件的HiSysEvent事件。

+

输入参数:

+
  • queryArg:查询参数。
  • queryRules:事件过滤规则。
  • queryCallBack:查询接口回调对象。
+

返回值:

+
  • true:查询成功。
  • false:查询失败。
+
+ +**表 2** QueryArg查询参数对象 + + + + + + + + + + + + + + + + +

属性名称

+

描述

+

long long beginTime

+

事件开始时间。

+

long long endTime

+

事件结束事件。

+

int maxEvents

+

返回最大的查询条数。

+
+ +**表 3** QueryRule查询规则对象 + + + + + + + + + + + + + + + + +

属性名称

+

描述

+

uint32_t ruleType

+

规则类型,目前默认是0。

+

std::string domain;

+
  • domain:事件所属领域,如果传入的是空字符串,则默认事件领域字段匹配成功。
+

std::vector<std::string> eventList

+
  • eventList:事件名称的列表,如果传入的是空字符串,则默认事件名称字段匹配成功。
+
+ +**表 4** HiSysEventQueryCallBackBase查询回调对象 + + + + + + + + + + + + + +

接口名称

+

描述

+

void HiSysEventQueryCallBackBase::OnQuery(const ::std::vector<std::string>& sysEvent, const ::std::vector<int64_t>& seq)

+

接口功能:订阅事件查询中的回调。

+

输入参数:

+
  • sysEvent:返回事件集合。
  • seq:事件序列集合。
+

返回值:无。

+

void HiSysEventQueryCallBackBase::OnComplete(int32_t reason, int32_t total)

+

接口功能:订阅事件查询完成的回调。

+

输入参数:

+
  • reason:查询结束返回原因,目前默认是0。
  • total:本次查询总共返回的事件总数量。
+

返回值:无。

+
+ +### 开发实例 + +C++接口实例。 + +1. 源代码开发: + + - 引入对应的头文件: + + hisysevent\_manager.h + + - 实现对应的查询回调接口: + + void HiSysEventQueryCallBackBase::OnQuery\(const ::std::vector& sysEvent, const ::std::vector& seq\) + + void HiSysEventQueryCallBackBase::OnComplete\(int32\_t reason, int32\_t total\) + + - 在相应的业务逻辑里面调用查询接口: + + HiSysEventManager::QueryHiSysEvent\(struct QueryArg& queryArg, std::vector& queryRules, std::shared\_ptr queryCallBack\) + + + ``` + // 以下是查询所有系统事件的应用例子 + #include "hisysevent_manager.h" + #include + + namespace OHOS { + namespace HiviewDFX { + // 实现查询回调的接口 + void HiSysEventToolQuery::OnQuery(const ::std::vector& sysEvent, + const ::std::vector& seq) + { + for_each(sysEvent.cbegin(), sysEvent.cend(), [](const std::string &tmp) { + std::cout << tmp << std::endl; + }); + } + + void HiSysEventToolQuery::OnComplete(int32_t reason, int32_t total) + { + return; + } + } // namespace HiviewDFX + } // namespace OHOS + + // 调用查询接口获取HiSysEvent事件 + auto queryCallBack = std::make_shared(); + struct QueryArg args(clientCmdArg.beginTime, clientCmdArg.endTime, clientCmdArg.maxEvents); + std::vector mRules; + HiSysEventManager::QueryHiSysEvent(args, mRules, queryCallBack); + ``` + +2. 编译设置: + + 在BUILD.gn编译文件中,需要添加依赖hisysevent\_native部件的libhisyseventmanager库。 + + ``` + external_deps = [ "hisysevent_native:libhisyseventmanager", ] + ``` + + diff --git "a/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/04.HiSysEvent\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/04.HiSysEvent\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..0d433bf02901c2d515e3a8404688dab520b9521b --- /dev/null +++ "b/website/docs/01.OpenHarmony/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/16.DFX/06.HiSysEvent\345\274\200\345\217\221\346\214\207\345\257\274/04.HiSysEvent\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -0,0 +1,115 @@ +--- +title: HiSysEvent工具使用指导 +permalink: /pages/0105100604 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:47 +--- +# HiSysEvent工具使用指导 + +- [概述](#section1886702718521) +- [实时订阅HiSysEvent事件相关命令](#section1210623418527) +- [查询历史HiSysEvent事件相关命令](#section1210623418539) + +## 概述 + +目前在系统的/system/bin目录下预置了hisysevent工具,开发者可以通过此工具实时订阅HiSysEvent事件及查询历史HiSysEvent事件。 + +## 实时订阅HiSysEvent事件相关命令 + +- 实时订阅HiSysEvent事件的基础命令: + + ``` + hisysevent -r + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -r  | 以缺省设置实时订阅HiSysEvent事件,在此种订阅方式下有任何实时HiSysEvent事件产生,都会在控制台上打印此HiSysEvent事件 | + +- 打开调试模式: + + ``` + hisysevent -r -d + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -d | 在调试模式下实时订阅HiSysEvent事件 | + +- 通过事件标签方式实时订阅HiSysEvent事件: + + ``` + hisysevnet -r -t [-c [WHOLE_WORD|PREFIX|REGULAR]] + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -t  | 设置实时订阅的HiSysEvent事件标签,用来过滤订阅的HiSysEvent事件 | + | -c  | 设置实时订阅的HiSysEvent事件标签匹配规则,有“WHOLE_WORD”、“PREFIX”、“REGULAR”三种匹配规则| + +- 通过事件领域及事件名称的方式实时订阅HiSysEvent事件: + + ``` + hisysevent -r -o -n [-c [WHOLE_WORD|PREFIX|REGULAR]] + ``` + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -o | 设置实时订阅的HiSysEvent事件领域,用来过滤订阅的HiSysEvent事件 | + | -n | 设置实时订阅的HiSysEvent事件名称,用来过滤订阅的HiSysEvent事件| + | -c | 设置实时订阅的HiSysEvent事件领域及事件名称的匹配规则,有“WHOLE_WORD”、“PREFIX”、“REGULAR”三种匹配规则| + + >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** + >当同时通过-t、-o及-n指定了相关订阅规则参数设置,则判断设置的事件标签是否为空,若不为空,则使用事件标签规则进行订阅,否则使用事件领域及事件名称订阅规则进行订阅。 + +## 查询历史HiSysEvent事件相关命令 + +- 查询历史HiSysEvent事件的基础命令: + + ``` + hisysevent -l + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -l | 以缺省设置查询历史HiSysEvent事件,此次查询会返回最近不多于1000条的HiSysEvent事件 | + +- 通过设置开始/结束时间,过滤查询历史HiSysEvent事件的结果的命令: + + ``` + hisysevent -l -s -e + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -s | 设置查询历史HiSysEvent事件的开始时间,此次查询只会返回不早于该时间点的HiSysEvent事件 | + | -e | 设置查询历史HiSysEvent事件的结束时间,此次查询只会返回不晚于该时间点的HiSysEvent事件 | + +- 通过设置最大数量值,限制查询历史HiSysEvent事件的数量: + + ``` + hisysevent -l -m + ``` + + 选项说明: + + | 选项名称 | 功能说明 | + | -------- | --------- | + | -m | 设置查询历史HiSysEvent事件的数量,有效值范围[0,1000],此次查询返回的HiSysEvent事件数目不会多于此值。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" index ffc8d724cce94f85d374562d35fe4034ef3ca530..b27567e899f7709ffead4a826c2b6fecd4ebe4c9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/01.HPMBundle\345\274\200\345\217\221\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: HPMBundle开发规范 -permalink: /pages/00050000 +permalink: /pages/01060101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 开发规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" index 7903b7631d12fb96d63a00ea03fd96a7289885f7..70190d12f54a7d24bcca9dbe5f97a2c9e42c8d23 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/01.HPMBundle\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: HPMBundle概述 -permalink: /pages/0005000100 +permalink: /pages/0106010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" index bd45591e2f3c47ea7c686fee1cfd72dd80bda745..97f7b10311e712efb2fc6b504e6b73c00c0fee6a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/02.\345\256\211\350\243\205hpm\345\221\275\344\273\244\350\241\214\345\267\245\345\205\267.md" @@ -1,6 +1,6 @@ --- title: 安装hpm命令行工具 -permalink: /pages/0005000101 +permalink: /pages/0106010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:47 --- # 安装hpm命令行工具 @@ -78,9 +78,9 @@ shellPath = C:\WINDOWS\System32\cmd.exe # OSPlatform = Auto|linux|darwin|win32 ``` -hpm-cli的命令介绍可以参考:[hpm操作命令](/pages/0005000100) +hpm-cli的命令介绍可以参考:[hpm操作命令](/pages/0106010201) ## 下载OpenHarmony代码 -参考[《源码获取》](/pages/000102)。 +参考[《源码获取》](/pages/extra/00a0c5/)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" index df9222495822a74c8a0d0222832e4c8a55cf81e6..3b79713f3580f148bb57d4bfa512e93ff4cf1b3d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/02.\345\274\200\345\217\221\346\214\207\345\215\227/03.\345\274\200\345\217\221Bundle.md" @@ -1,6 +1,6 @@ --- title: 开发Bundle -permalink: /pages/0005000102 +permalink: /pages/0106010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 开发Bundle diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" index 143ecf646349eec0e0c1b8e3851910e064bb4e98..265d75845e491db93b1b74733bbec5fad53a83e4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/01.HPM\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: HPM介绍 -permalink: /pages/0005000200 +permalink: /pages/0106010301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # HPM介绍 diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" index d1fbdbe48c2339340c8a5877b9a0bd9473deeafb..97552ac475c94140848f231dfce489ae49762e30 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/02.\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -1,6 +1,6 @@ --- title: 编译环境准备 -permalink: /pages/0005000201 +permalink: /pages/0106010302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 编译环境准备 @@ -77,7 +77,7 @@ http_proxy = http://your-proxy-server:port # 配置HTTP代理 https_proxy = http://your-proxy-server:port # 配置HTTPS代理 ``` -hpm-cli的命令介绍可以参考:[hpm操作命令](/pages/00050000) +hpm-cli的命令介绍可以参考:[hpm操作命令](/pages/01060101) ## 安装python环境 diff --git "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" index a50cc02cd4288cef7b735f2030e3d59c526090e4..7772eeacc8fe27d010ea81d12ebca50323283bb1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/06.\344\270\223\351\242\230/01.HPMbundle/03.\345\274\200\345\217\221\347\244\272\344\276\213/03.\346\223\215\344\275\234\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 操作实例 -permalink: /pages/0005000202 +permalink: /pages/0106010303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 操作实例 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" index 696dfbf0fea3a6d1c4e9cb6ffa1571e62b9a592b..f83577d3e3e0f3878301c2f4db4ff081c093c46c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/01.LED\345\244\226\350\256\276\346\216\247\345\210\266.md" @@ -1,6 +1,6 @@ --- title: LED外设控制 -permalink: /pages/0006000000 +permalink: /pages/0107010101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # LED外设控制 @@ -23,7 +23,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力, ## 开发 -1. 请先完成[《Hi3861快速入门》](/pages/0001000300#section19352114194115)。 +1. 请先完成[《Hi3861快速入门》](/pages/01020101)。 LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。 @@ -114,7 +114,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力, ## 验证 -编译过程请参考《[Hi3861快速入门-源码编译](/pages/extra/ecf53e/#section191121332125319)》,烧录过程请参考《[Hi3861快速入门-镜像烧录](/pages/extra/ecf53e/#section3288165814218)》。 +编译过程请参考《[Hi3861快速入门-源码编译](/pages/010201030103)》,烧录过程请参考《[Hi3861快速入门-镜像烧录](/pages/010201030104)》。 完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" index ebe7032a53f99e13c94d20917a66e3a66a550c2c..3e4ae23ac0f7bf960924ea8f703040594480aa18 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/01.WLAN\350\277\236\346\216\245\347\261\273\344\272\247\345\223\201/02.\351\233\206\346\210\220\344\270\211\346\226\271SDK.md" @@ -1,6 +1,6 @@ --- title: 集成三方SDK -permalink: /pages/0006000001 +permalink: /pages/0107010102 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 集成三方SDK diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" similarity index 82% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" index 7e542d031c51b94846755f06c9515c0d4438683b..9c9dec9a472f4c11e0b767c3e62463ac2eb6498f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/000600010000 +permalink: /pages/010701020101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 概述 @@ -17,7 +17,7 @@ date: 2021-12-30 18:31:33 开发者可通过执行示例应用,对开发板的外设控制有了更深入了解后,可使用开发板完成摄像头等设备。 -若开发者想先查看示例效果,请进入[应用实例](/pages/000600010002)。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。 +若开发者想先查看示例效果,请进入[应用实例](/pages/010701020103)。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。 -相机开发基本概念可参考:[相机开发概述](/pages/0004050000)。 +相机开发基本概念可参考:[相机开发概述](/pages/0105060101)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" index 0bc5690f8a2fdbcd383baa0906c3026c474a646c..8c3b9070bf056c0e9fea3f3ddf34441e2f79560d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 拍照开发指导 -permalink: /pages/00060001000100 +permalink: /pages/01070102010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 拍照开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" index 78e5062b57abbfb3f9d8cff4dcaa596115f1dcf8..8f2da1ecb7eb51d63bedcc70c2bfed94a0ac453b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 录像开发指导 -permalink: /pages/00060001000101 +permalink: /pages/01070102010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 录像开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" similarity index 88% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" index db27629469cee31a8d2410f70d95c2e58020e105..8fea00106f706a9e710c018dcbd552ffbac71ede 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/02.\346\227\240\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 应用实例 -permalink: /pages/000600010002 +permalink: /pages/010701020103 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 应用实例 -- 开发板介绍、编译烧录、运行镜像等操作请参考[Hi3518快速入门](/pages/0001000302#section14815247616),编译结果包含示例,结果文件为out/ipcamera\_hi3518ev300/dev\_tools/bin/camera\_sample,可将文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。 +- 开发板介绍、编译烧录、运行镜像等操作请参考[Hi3518快速入门](/pages/01020101),编译结果包含示例,结果文件为out/ipcamera\_hi3518ev300/dev\_tools/bin/camera\_sample,可将文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。 修改applications/sample/camera/media/BUILD.gn中的output\_dir。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" index 479b5a2868c83d10017cba32483d14246ab5a4a1..310e4bab17516c5402664c8b703d63f5257e1fad 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/000600020000 +permalink: /pages/010701030101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 概述 @@ -17,7 +17,7 @@ date: 2021-12-30 18:31:33 通过本文档,开发者能够对OpenHarmony的摄像控制有更深入的了解,可参照本例尝试完成“智能猫眼”、“智能后视镜”、“智能带屏音箱”等设备的开发。 -若开发者想先查看示例效果,请进入[应用实例](/pages/000600020002)。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。 +若开发者想先查看示例效果,请进入[应用实例](/pages/010701030103)。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。 -相机应用开发的基本概念请参考:[相机开发概述](/pages/0004050000)。 +相机应用开发的基本概念请参考:[相机开发概述](/pages/0105060101)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" index 9085d03a3dcc94eee96f01a5ac13789b8742d36d..d7a3aee895ab57972d0636cd19fa56cd7b2ddf63 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/01.\346\213\215\347\205\247\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 拍照开发指导 -permalink: /pages/00060002000100 +permalink: /pages/01070103010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 拍照开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" index e4464e99face17f95500ef41082b6bea2a8afb13..17928dea931b5d5541243b6b08b599a95ba8c7c0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/02.\345\275\225\345\203\217\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 录像开发指导 -permalink: /pages/00060002000101 +permalink: /pages/01070103010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 录像开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" index dc5b35e844e9fbd132148beab7ed083c77092fab..cae824396db3e754442242a0aa69d3a4e882323b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/02.\347\244\272\344\276\213\345\274\200\345\217\221/03.\351\242\204\350\247\210\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 预览开发指导 -permalink: /pages/00060002000102 +permalink: /pages/01070103010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 预览开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" index 30b6579c7e19f4b8351a09c3d2254d735a56abe3..be6516abed07546b58bd973adb9717835efd1fec 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/01.\345\261\217\345\271\225\345\222\214\346\221\204\345\203\217\345\244\264\346\216\247\345\210\266/03.\345\272\224\347\224\250\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 应用实例 -permalink: /pages/000600020002 +permalink: /pages/010701030103 navbar: true sidebar: true prev: true @@ -9,18 +9,18 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 应用实例 本示例将运行源码中的camera示例代码,通过本示例可以实现使用开发板进行拍照、录像及预览等功能。 - 本示例源码路径为“applications/sample/camera/media/camera\_sample.cpp”。 -- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[Hi3516快速入门](/pages/0001000301#section26131214194212)。 +- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[Hi3516快速入门](/pages/01020101)。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** >开发板启动后默认会加载launcher应用,应用的图形界面默认显示在媒体图层上方,会影响camera\_sample的演示结果,因此需要在编译或是打包时去掉launcher应用。 - >**修改方法:**将“build/lite/components/applications.json”中camera\_sample\_app组件的targets中"//applications/sample/camera/launcher:launcher\_hap"整行注释或删除。 + >**修改方法**:将“build/lite/components/applications.json”中camera\_sample\_app组件的targets中"//applications/sample/camera/launcher:launcher\_hap"整行注释或删除。 - 本示例编译结果路径为“out/hi3516dv300/ipcamera\_hi3516dv300\_liteos/dev\_tools/bin”,为让文件能在单板中执行,可将示例文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" index 7043ad1cf0528d5b9d1f7324c71be4ecb7fe6dc1..0a4cb91d6eae22affe05f9c7f9bc4c865e3199a9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/000600020100 +permalink: /pages/010701030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" index a78da43601e50b67290192f3a53bdaf192abeae5..e156861975b8a70f8583372df17d741fc90cdc6d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/02.\345\274\200\345\217\221\345\207\206\345\244\207.md" @@ -1,6 +1,6 @@ --- title: 开发准备 -permalink: /pages/000600020101 +permalink: /pages/010701030202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 开发准备 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" index 12f695ae74f558b4da1ccd4e5af27b17e83d3525..a021146fc93a40f5ff326e72b5ce0db13ac2f59e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/03.\346\267\273\345\212\240\351\241\265\351\235\242.md" @@ -1,6 +1,6 @@ --- title: 添加页面 -permalink: /pages/000600020102 +permalink: /pages/010701030203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 添加页面 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" index 48ed7eed87056f149b3a251f4da3689956235876..d1799d53165265c0284c3a5a6653adaf6d95be32 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/04.\345\274\200\345\217\221\351\246\226\351\241\265.md" @@ -1,6 +1,6 @@ --- title: 开发首页 -permalink: /pages/000600020103 +permalink: /pages/010701030204 navbar: true sidebar: true prev: true @@ -9,13 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 开发首页 应用首页主要展示城市的空气质量概况。首页总共有两屏(可以根据需求设置多屏),每屏显示一个城市的空气质量信息:主要包括AQI指数、城市名称、污染物指数、更新时间和信息来源等数据。 -从第一章节中的[显示效果图](/pages/000600020100)分析可知,首页由三部分组成: +从第一章节中的[显示效果图](/pages/010701030201)分析可知,首页由三部分组成: - 标题栏:位于页面正上方,位置固定,包括应用退出按钮和页面标题。 - 信息栏:主要展示城市的空气信息指标等内容;该页面根据用户需求可设置多屏,且能循环滑动。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" index b9581c559d4383f536ef360de649a1cd72b0e5d1..d98750304677fcddbef81d52ad7760c6e56b97e0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\274\200\345\217\221\350\257\246\346\203\205\351\241\265.md" @@ -1,6 +1,6 @@ --- title: 开发详情页 -permalink: /pages/000600020104 +permalink: /pages/010701030205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 开发详情页 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" index 87bcb4e393800aea9535af991b6aa5de4c2e1948..459c919e4c6c8047e010a14073d2a98bbf4b4145 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/06.\350\260\203\350\257\225\346\211\223\345\214\205.md" @@ -1,6 +1,6 @@ --- title: 调试打包 -permalink: /pages/000600020105 +permalink: /pages/010701030206 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 调试打包 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" index 904987b175e82c857f29e0cad7c5672bec2ffbe1..e81b1d13e7adf6a4d72aa348215281ee6a5b258c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/07.\347\234\237\346\234\272\350\277\220\350\241\214.md" @@ -1,6 +1,6 @@ --- title: 真机运行 -permalink: /pages/000600020106 +permalink: /pages/010701030207 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:47 --- # 真机运行 -应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[Hi3516快速入门](/pages/0001000301#section26131214194212)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。 +应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[Hi3516快速入门](/pages/01020101)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。 1. 将IDE编译的未签名应用安装包和安装工具(镜像文件生成目录中的dev\_tools)放在sdcard中,将sdcard插入开发板卡槽。 2. 应用安装默认要校验签名,需要执行以下命令,关闭签名校验。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" index ebe9771c67cb7b694fc93ca7b3b04ba2dcec7560..69c05b32920d41f839b993ef6de63a493ac418d6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\270\246\345\261\217\346\221\204\345\203\217\345\244\264\347\261\273\344\272\247\345\223\201/02.\350\247\206\350\247\211\345\272\224\347\224\250\345\274\200\345\217\221/08.\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 常见问题 -permalink: /pages/000600020107 +permalink: /pages/010701030208 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:48 --- # 常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" index f9a1055c72975f31c37ae509d55b83618ff15284..74ab915d26c4347efa3c13f15fa9875e40ea7e16 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/01.\346\227\266\351\222\237\345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 时钟应用开发指导 -permalink: /pages/00060100 +permalink: /pages/01070201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:48 --- # 时钟应用开发指导 @@ -34,7 +34,7 @@ date: 2021-12-30 18:31:33 ## 开发准备 -首先需要下载和配置DevEco Studio,具体操作请参考[DevEco Studio 使用指南](/pages/extra/0c0b90/)。 +首先需要下载和配置DevEco Studio,具体操作请参考[DevEco Studio 使用指南](/pages/extra/9981e8/)。 ## 开发步骤 @@ -268,11 +268,11 @@ date: 2021-12-30 18:31:33 ## 签名打包 -代码编写完成后,在真机设备上运行应用,需要先对应用进行签名,然后再进行打包,具体操作请参考[签名打包指导](/pages/00070504)。 +代码编写完成后,在真机设备上运行应用,需要先对应用进行签名,然后再进行打包,具体操作请参考[签名打包指导](/pages/01080905)。 ## 真机运行 -应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门](/pages/00010100)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。 +应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门](/pages/01020201)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。 1. 从开发者工具代码仓路径中获取hdc客户端。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" index 4a5604d52e478aff1c98bd08ebb6c591e8f267e8..455b13f2a130273cafccd15d89273c7275c80228 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/02.\345\271\263\345\217\260\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 平台驱动开发示例 -permalink: /pages/00060101 +permalink: /pages/01070202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:48 --- # 平台驱动开发示例 @@ -39,7 +39,7 @@ HDF驱动框架为常用外围设备提供了标准的驱动框架,驱动开 ## 环境准备 -环境准备具体操作请参考[标准系统基础环境搭建](/pages/00010100)。 +环境准备具体操作请参考[标准系统基础环境搭建](/pages/01020201)。 >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** >本示例针对OpenHarmony轻量系统、小型系统、标准系统都适用,本文以标准系统为例。其他系统的开发者可参考对应系统的指导文档进行环境搭建。 @@ -166,7 +166,7 @@ HDF_INIT(g_sampleI2cDriverEntry); 2. 添加配置参数(可选)。 - 有时驱动可能会需要私有配置信息,以确保寄存器的配置可以满足不同产品的需求。如需要私有配置信息,则可以添加一个驱动的配置文件,用来存放一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject 中的property里面,通过Bind和Init(参考[驱动开发](/pages/0004010001))传递给驱动。驱动开发者可新建配置文件,并在板级驱动hdf.hcs中引用新建的配置文件,本例中直接在原有的配置文件i2c\_config.hcs内添加配置参数。 + 有时驱动可能会需要私有配置信息,以确保寄存器的配置可以满足不同产品的需求。如需要私有配置信息,则可以添加一个驱动的配置文件,用来存放一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject 中的property里面,通过Bind和Init(参考[驱动开发](/pages/0105020102))传递给驱动。驱动开发者可新建配置文件,并在板级驱动hdf.hcs中引用新建的配置文件,本例中直接在原有的配置文件i2c\_config.hcs内添加配置参数。 本例中编辑i2c\_config.hcs,添加配置参数: @@ -453,6 +453,6 @@ HDF_INIT(g_sampleI2cDriverEntry); 2. 编译及烧录。 - 具体操作请参考[标准系统快速入门编译及烧录章节](/pages/extra/36eb5c/)。 + 具体操作请参考[标准系统快速入门编译及烧录章节](/pages/extra/cdd62a/)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" index f4451fdee550e0cfe457a8a2e02ebdf720085146..3c5553cb3f3e0d7b0c40ad7217314e5de9374cee 100644 --- "a/website/docs/01.\346\226\207\346\241\243/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/07.\350\256\276\345\244\207\345\274\200\345\217\221\347\244\272\344\276\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\350\256\276\345\244\207/03.\345\244\226\350\256\276\351\251\261\345\212\250\345\274\200\345\217\221\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 外设驱动开发示例 -permalink: /pages/00060102 +permalink: /pages/01070203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:48 --- # 外设驱动开发示例 @@ -53,11 +53,11 @@ Input驱动模型核心部分由设备管理层、公共驱动层、器件驱动 此外,Input模型预先实现了数据通道以及设备配置信息解析等函数。 -关于Input模型的详细介绍请参考《[Touchscreen开发概述](/pages/0004010301#section175431838101617)》。 +关于Input模型的详细介绍请参考《[Touchscreen开发概述](/pages/0105020402#section175431838101617)》。 ## 环境搭建 -环境准备具体操作请参考[标准系统基础环境搭建](/pages/00010100)。 +环境准备具体操作请参考[标准系统基础环境搭建](/pages/01020201)。 >![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** >本示例针对OpenHarmony轻量系统、小型系统、标准系统都适用,本文以标准系统为例。其他系统的开发者可参考对应系统的指导文档进行环境搭建。 @@ -74,7 +74,7 @@ Input驱动模型核心部分由设备管理层、公共驱动层、器件驱动 device\_info.hcs中的信息主要提供给HDF框架使用,包含了Input模型各层驱动注册到HDF框架所必需的信息,开发者无特殊场景需求无需改动。各驱动层私有配置信息通过“deviceMatchAttr”字段与input\_config.hcs中的“match\_attr”相关内容进行匹配。 -配置文件中与input模块相关的内容如下所示,相关字段的详细含义可以参考《[驱动配置](/pages/0004010001)》: +配置文件中与input模块相关的内容如下所示,相关字段的详细含义可以参考《[驱动配置](/pages/0105020102)》: ``` input :: host { @@ -348,25 +348,25 @@ Input模型由三层驱动组成,开发者适配一款全新触摸屏驱动只 其中touch\_gt911.o为本示例中追加的内容。 -2. 具体编译及烧录操作请参考[标准系统快速入门编译及烧录章节](/pages/00010101)。 +2. 具体编译及烧录操作请参考[标准系统快速入门编译及烧录章节](/pages/01020201)。 ## 调试验证 如下所示为开机启动日志部分截取 ``` -[I/HDF_INPUT_DRV] HdfInputManagerInit: enter // 管理驱动层初始化 -[I/HDF_INPUT_DRV] HdfInputManagerInit: exit succ // 初始化成功 -[I/osal_cdev] add cdev hdf_input_host success -[I/HDF_LOG_TAG] HdfTouchDriverProbe: enter // 公共驱动层初始化 -[I/HDF_LOG_TAG] HdfTouchDriverProbe: main_touch exit succ // 初始化成功 -[I/osal_cdev] add cdev hdf_input_event1 success -[I/HDF_INPUT_DRV] HdfGoodixChipInit: enter // 器件驱动层初始化 -[I/HDF_INPUT_DRV] ChipDetect: IC FW version is 0x1060 -[I/HDF_INPUT_DRV] Product_ID: 911_1060, x_sol = 960, y_sol = 480 -[I/HDF_LOG_TAG] ChipDriverInit: chipDetect succ, ret = 0 -[I/HDF_LOG_TAG] InputDeviceInstance: inputDev->devName = main_touch -[I/HDF_INPUT_DRV] HdfGoodixChipInit: exit succ, chipName = gt911 // 初始化成功 +[I/HDF_INPUT_DRV] HdfInputManagerInit: enter // 管理驱动层初始化 +[I/HDF_INPUT_DRV] HdfInputManagerInit: exit succ // 初始化成功 +[I/osal_cdev] add cdev hdf_input_host success +[I/HDF_LOG_TAG] HdfTouchDriverProbe: enter // 公共驱动层初始化 +[I/HDF_LOG_TAG] HdfTouchDriverProbe: main_touch exit succ // 初始化成功 +[I/osal_cdev] add cdev hdf_input_event1 success +[I/HDF_INPUT_DRV] HdfGoodixChipInit: enter // 器件驱动层初始化 +[I/HDF_INPUT_DRV] ChipDetect: IC FW version is 0x1060 +[I/HDF_INPUT_DRV] Product_ID: 911_1060, x_sol = 960, y_sol = 480 +[I/HDF_LOG_TAG] ChipDriverInit: chipDetect succ, ret = 0 +[I/HDF_LOG_TAG] InputDeviceInstance: inputDev->devName = main_touch +[I/HDF_INPUT_DRV] HdfGoodixChipInit: exit succ, chipName = gt911 // 初始化成功 ``` ## Input模型工作流程解析 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" similarity index 75% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" index 3ede18408f0bfaa658a8a791c2cad97818eb7527..14e4983bf97e4aab13b18248dc6ad9ff7c6a51e7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/01.\345\274\200\345\217\221\345\207\206\345\244\207.md" @@ -1,6 +1,6 @@ --- title: 开发准备 -permalink: /pages/00070000 +permalink: /pages/01080101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:33 +date: 2022-02-12 09:01:48 --- # 开发准备 @@ -17,9 +17,9 @@ date: 2021-12-30 18:31:33 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转功能的应用(如下图[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行效果所示),熟悉OpenHarmony应用开发流程。 -为确保运行效果,本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 +为确保运行效果,本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 -![zh-cn_image_0000001172442490](/images/application-dev/quick-start/figures/zh-cn_image_0000001172442490.png) +![zh-cn_image_0000001089359413](/images/application-dev/quick-start/figures/zh-cn_image_0000001089359413.png) **表1** 方舟开发框架的对比 @@ -35,12 +35,14 @@ date: 2021-12-30 18:31:33 ## 开发准备 -1. 开始前请参考[配置OpenHarmony SDK](/pages/00070502),完成**DevEco Studio**的安装和开发环境配置。 +1. 开始前请参考[配置OpenHarmony SDK](/pages/01080903),完成**DevEco Studio**的安装和开发环境配置。 -2. 开发环境配置完成后,请参考[创建OpenHarmony工程](/pages/0007050300)创建工程。 +2. 开发环境配置完成后,请参考[创建OpenHarmony工程](/pages/0108090401)创建工程。 - 使用JS语言开发,模板选择Empty Ability,Language选择JS。 + - 使用eTS语言开发,模板选择Empty Ability,Language选择eTS。 3. 工程创建完成后,使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行该工程。 -完成上述操作后,请参考[使用JS语言开发](/pages/00070001)、[使用eTS语言开发](/pages/00070002)继续下一步的学习。 +完成上述操作后,请参考[使用JS语言开发](/pages/01080102)、[使用eTS语言开发](/pages/01080103)继续下一步的学习。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" similarity index 73% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" index 1c49a4627bad3c37fe3b456e28c7bc258f11a797..3432489034c8027d2b0d2e19be9457005979edb3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/02.\344\275\277\347\224\250JS\350\257\255\350\250\200\345\274\200\345\217\221.md" @@ -1,6 +1,6 @@ --- title: 使用JS语言开发 -permalink: /pages/00070001 +permalink: /pages/01080102 navbar: true sidebar: true prev: true @@ -9,17 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- -# 使用JS语言开发 +# 使用JS语言开发(传统代码方式) -为确保运行效果,本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 +为确保运行效果,本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 ## 编写第一个页面 1. 第一个页面内有一个文本和一个按钮,通过text和button组件来实现。 - 在“Project“窗口,选择entry > src > main > js > default > pages > index,打开index.hml文件,添加一个文本和一个按钮,示例代码如下: - + 在"Project"窗口,选择entry > src > main > js > default > pages > index,打开index.hml文件,添加一个文本和一个按钮,示例代码如下: ```
@@ -31,9 +30,9 @@ date: 2021-12-30 18:31:34
``` - + 2. 打开index.css文件,设置文本和按钮的样式,示例代码如下: - ``` + ``` /* index.css */ .container { flex-direction: column; /* 设置容器内的项目纵向排列 */ @@ -55,19 +54,19 @@ date: 2021-12-30 18:31:34 text-color: white; margin-top: 20px; } - ``` + ``` 3. 使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示: - ![zh-cn_image_0000001217683803](/images/application-dev/quick-start/figures/zh-cn_image_0000001217683803.png) + ![zh-cn_image_0000001167690688](/images/application-dev/quick-start/figures/zh-cn_image_0000001167690688.png) ## 创建另一个页面 -1. 在“Project“窗口,打开entry > src > main > js > default,右键点击pages文件夹,选择New > JS Page,命名为details,单击回车键。 +1. 在"Project"窗口,打开entry > src > main > js > default,右键点击pages文件夹,选择NewJS Page,命名为details,单击回车键。 创建完成后,可以看到pages文件夹下的文件目录结构如下: - ![zh-cn_image_0000001217523751](/images/application-dev/quick-start/figures/zh-cn_image_0000001217523751.png) + ![zh-cn_image_0000001167850660](/images/application-dev/quick-start/figures/zh-cn_image_0000001167850660.png) 2. 打开details.hml文件,添加一个文本,示例代码如下: ``` @@ -102,7 +101,7 @@ date: 2021-12-30 18:31:34 ``` // index.js import router from '@system.router'; - + export default { launch() { router.push ({ @@ -113,7 +112,7 @@ date: 2021-12-30 18:31:34 ``` 2. 再次使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示: - -![zh-cn_image_0000001217402315](/images/application-dev/quick-start/figures/zh-cn_image_0000001217402315.png) -恭喜你,至此已成功完成OpenHarmony快速入门-使用JS语言开发。 \ No newline at end of file + ![zh-cn_image_0000001213130527](/images/application-dev/quick-start/figures/zh-cn_image_0000001213130527.png) + +恭喜你,至此已成功完成OpenHarmony快速入门-使用JS语言开发。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" similarity index 72% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" index c1a904ab411876d5e87394d49739be5b75695945..5cba3150ce3fd89ab842b2e7dc9c84ef4a7c3689 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/01.\345\272\224\347\224\250\345\274\200\345\217\221\345\277\253\351\200\237\345\205\245\351\227\250/03.\344\275\277\347\224\250eTS\350\257\255\350\250\200\345\274\200\345\217\221.md" @@ -1,6 +1,6 @@ --- title: 使用eTS语言开发 -permalink: /pages/00070002 +permalink: /pages/01080103 navbar: true sidebar: true prev: true @@ -9,28 +9,30 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 使用eTS语言开发 > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** -> 请使用DevEco Studio V3.0.0.601 Beta1及更高版本。本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 -> +> 请使用DevEco Studio V3.0.0.601 Beta1及更高版本。本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。 ## 创建eTS工程 1. 打开DevEco Studio,创建一个新工程,选择模板,如Empty Ability: - ![zh-cn_image_0000001172602436](/images/application-dev/quick-start/figures/zh-cn_image_0000001172602436.png) + + ![zh-cn_image_0000001238733799](/images/application-dev/quick-start/figures/zh-cn_image_0000001238733799.png) 2. 进入配置工程界面,Project Type选择Application,Language选择eTS,其他参数根据实际需要设置即可。 - ![zh-cn_image_0000001172283938](/images/application-dev/quick-start/figures/zh-cn_image_0000001172283938.png) + + ![zh-cn_image_0000001238853759](/images/application-dev/quick-start/figures/zh-cn_image_0000001238853759.png) ## 编写第一个页面 -1. 工程创建完成后,在“Project“窗口,点击entry > src > main > ets > default > pages,打开index.ets文件。 - ![zh-cn_image_0000001217602267](/images/application-dev/quick-start/figures/zh-cn_image_0000001217602267.png) +1. 工程创建完成后,在"Project"窗口,点击entry > src > main > ets > default > pages,打开index.ets文件。 + + ![zh-cn_image_0000001213883165](/images/application-dev/quick-start/figures/zh-cn_image_0000001213883165.png) 2. 第一个页面由Flex容器组件、Text组件和Button组件构成。在index.ets中编写并设置页面组件的属性和样式,示例代码如下所示: ``` @@ -59,15 +61,15 @@ date: 2021-12-30 18:31:34 ``` 3. 使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示: - -![zh-cn_image_0000001172123966](/images/application-dev/quick-start/figures/zh-cn_image_0000001172123966.png) + + ![zh-cn_image_0000001168898456](/images/application-dev/quick-start/figures/zh-cn_image_0000001168898456.png) ## 创建第二个页面 -1. 在“Project“窗口,打开entry > src > main > etsdefault,右键点击pages文件夹,选择New > eTS Page,命名为details,单击回车键。创建完成后,可以看到pages文件夹下的文件目录结构如下: - - ![zh-cn_image_0000001172442492](/images/application-dev/quick-start/figures/zh-cn_image_0000001172442492.png) +1. 在"Project"窗口,打开entry > src > main > ets > default,右键点击pages文件夹,选择NeweTS Page,命名为details,单击回车键。创建完成后,可以看到pages文件夹下的文件目录结构如下: + + ![zh-cn_image_0000001214043107](/images/application-dev/quick-start/figures/zh-cn_image_0000001214043107.png) 2. 第二个页面由Flex容器组件、Text组件构成。在details.ets中编写并设置页面组件的属性和样式,示例代码如下所示: ``` @@ -123,7 +125,7 @@ date: 2021-12-30 18:31:34 ``` 2. 再次使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示: - -![zh-cn_image_0000001217683805](/images/application-dev/quick-start/figures/zh-cn_image_0000001217683805.png) + + ![zh-cn_image_0000001169221404](/images/application-dev/quick-start/figures/zh-cn_image_0000001169221404.png) 恭喜你,至此已成功完成OpenHarmony快速入门-使用eTS语言开发。 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..8628ccceedd2fde193e77a42987e7e187dfbfdb1 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\346\246\202\350\277\260.md" @@ -0,0 +1,70 @@ +--- +title: 方舟开发框架概述 +permalink: /pages/01080201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# 方舟开发框架概述 + +## 框架介绍 + +方舟开发框架,是OpenHarmony的一套UI开发框架,提供开发者进行应用UI开发时所必须的能力。 + + +## 基本概念 + +- **组件**:组件是界面搭建与显示的最小单位。开发者通过多种组件的组合,构建出满足自身应用诉求的完整界面。 + +- **页面**:page页面是方舟开发框架最小的调度分割单位。开发者可以将应用设计为多个功能页面,每个页面进行单独的文件管理,并通过路由API实现页面的调度管理,以实现应用内功能的解耦。 + + +## 主要能力 + +- **多种组件**:方舟开发框架不仅提供了多种基础组件,如文本显示、图片显示、按键交互等,也提供了支持视频播放能力的媒体组件。并且针对不同类型设备进行了组件设计,提供了组件在不同平台上的样式适配能力,此种组件称为“多态组件”。 + +- **布局计算**:UI界面设计离不开布局的参与。方舟开发框架提供了多种布局方式,不仅保留了经典的弹性布局能力,也提供了列表、宫格、栅格布局和适应多分辨率场景开发的原子布局能力。 + +- **动画能力**:方舟开发框架对于UI界面的美化,除了组件内置动画效果外,也提供了属性动画、转场动画和自定义动画能力。 + +- **UI交互**:方舟开发框架提供了多种交互能力,满足应用在不同平台通过不同输入设备均可正常进行UI交互响应,默认适配了触摸手势、遥控器、鼠标等输入操作,同时也提供事件通知能力。 + +- **绘制**:方舟开发框架提供了多种绘制能力,以满足开发者绘制自定义形状的需求,支持图形绘制、颜色填充、文本绘制、图片绘制等。 + +- **平台API通道**:方舟开发框架提供了API扩展机制,平台能力通过此种机制进行封装,提供风格统一的JS接口。 + + +## 选择方案 + +方舟开发框架针对不同目的和技术背景的开发者提供了两种开发范式,分别是基于JS扩展的类Web开发范式(简称“类Web开发范式”)和基于TS扩展的声明式开发范式(简称“声明式开发范式”)。下面我们对这两种开发范式进行对比与描述。 + + +### 类Web开发范式 + +类Web开发范式,采用经典的HML、CSS、JavaScript三段式开发方式。使用HML标签文件进行布局搭建,使用CSS文件进行样式描述,使用JavaScript文件进行逻辑处理。UI组件与数据之间通过单向数据绑定的方式建立关联,当数据发生变化时,UI界面自动触发更新。此种开发方式,更接近Web前端开发者的使用习惯,快速将已有的Web应用改造成方舟开发框架应用。主要适用于界面较为简单的中小型应用开发。 + + +### 声明式开发范式 + +声明式开发范式,采用TS语言并进行声明式UI语法扩展,从组件、动效和状态管理三个维度提供了UI绘制能力。UI开发更接近自然语义的编程方式,让开发者直观地描述UI界面,不必关心框架如何实现UI绘制和渲染,实现极简高效开发。同时,选用有类型标注的TS语言,引入编译期的类型校验,更适用大型的应用开发。 + + +### 两种开发范式对比 + +| **开发范式名称** | **语言生态** | **UI更新方式** | **适用场景** | **适用人群** | +| -------- | -------- | -------- | -------- | -------- | +| 类Web开发范式 | JS语言 | 数据驱动更新 | 界面较为简单的类小程序应用和卡片 | Web前端开发人员 | +| 声明式开发范式 | 扩展的TS语言(eTS) | 数据驱动更新 | 复杂度较大、团队合作度较高的程序 | 移动系统应用开发人员、系统应用开发人员 | + + +### 框架结构 + +![zh-cn_image_0000001183709904](/images/application-dev/ui/figures/zh-cn_image_0000001183709904.png) + +从上图可以看出,类Web开发范式与声明式开发范式的UI后端引擎和语言运行时是共用的,其中,UI后端引擎实现了方舟开发框架的六种基本能力。声明式开发范式无需JS Framework进行页面DOM管理,渲染更新链路更为精简,占用内存更少,因此更推荐开发者选用声明式开发范式来搭建应用UI界面。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" index 8e562526f9da3a76692497a96e8b3ddfd4df063f..2bc8c088b6dd37b6078aed704bc8769529e9a8d4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/0007010000 +permalink: /pages/0108020201 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 概述 -方舟开发框架是OpenHarmony UI开发框架,提供基础类、容器类、画布类等UI组件和标准CSS动画能力,支持类Web范式编程。 +基于JS扩展的类Web开发范式的方舟开发框架是OpenHarmony UI开发框架,提供基础类、容器类、画布类等UI组件和标准CSS动画能力,支持类Web范式编程。 ## 基础能力 @@ -24,8 +24,6 @@ date: 2021-12-30 18:31:34 ## 整体架构 -方舟开发框架提供两种开发范式:基于JS扩展的类Web开发范式、基于TS扩展的声明式开发范式。 - 使用基于JS扩展的类Web开发范式的方舟开发框架,包括应用层(Application)、前端框架层(Framework)、引擎层(Engine)和平台适配层(Porting Layer)。 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..f4803c1baa843f926c0318e60878031ed5cb9a71 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" @@ -0,0 +1,98 @@ +--- +title: 文件组织 +permalink: /pages/010802020201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# 文件组织 + +## 目录结构 + +JS FA应用的JS模块(entry/src/main/js/module)的典型开发目录结构如下: + +**图1** 目录结构 + +![zh-cn_image_0000001127284926](/images/application-dev/ui/figures/zh-cn_image_0000001127284926.png) + +**图2** 多实例资源共享目录结构 +![zh-cn_image_0000001173164777](/images/application-dev/ui/figures/zh-cn_image_0000001173164777.png) + +目录结构中文件分类如下: + +- .hml结尾的HML模板文件,这个文件用来描述当前页面的文件布局结构。 + +- .css结尾的CSS样式文件,这个文件用于描述页面样式。 + +- .js结尾的JS文件,这个文件用于处理页面和用户的交互。 + +各个文件夹的作用: + +- app.js文件用于全局JavaScript逻辑和应用生命周期管理,详见[app.js](/pages/010802020203)说明。 + +- pages目录用于存放所有组件页面。 + +- common目录用于存放公共资源文件,比如:媒体资源,自定义组件和JS文件。 + +- resources目录用于存放资源配置文件,比如:多分辨率加载等配置文件,详见[资源限定与访问](/pages/010802020206)章节。 + +- share目录用于配置多个实例共享的资源内容,比如:share中的图片和JSON文件可被default1和default2实例共享。 + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> - i18n和resources是开发保留文件夹,不可重命名。 +> +> +> - 如果share目录中的资源和实例(default)中的资源文件同名且目录一致时,实例中资源的优先级高于share中资源的优先级。 +> +> +> - share目录当前不支持i18n。 +> +> - 在使用DevEco Studio进行应用开发时,目录结构中的可选文件夹需要开发者根据实际情况自行创建。 + + +## 文件访问规则 + +应用资源可通过绝对路径或相对路径的方式进行访问,本开发框架中绝对路径以"/"开头,相对路径以"./"或"../"。具体访问规则如下: + +- 引用代码文件,推荐使用相对路径,比如:../common/utils.js。 + +- 引用资源文件,推荐使用绝对路径。比如:/common/xxx.png。 + +- 公共代码文件和资源文件推荐放在common下,通过以上两条规则进行访问。 + +- CSS样式文件中通过url()函数创建<url>数据类型,如:url(/common/xxx.png)。 + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 当代码文件A需要引用代码文件B时: +> +> - 如果代码文件A和文件B位于同一目录,则代码文件B引用资源文件时可使用相对路径,也可使用绝对路径。 +> +> - 如果代码文件A和文件B位于不同目录,则代码文件B引用资源文件时必须使用绝对路径。因为Webpack打包时,代码文件B的目录会发生变化。 +> +> +> - 在js文件中通过数据绑定的方式指定资源文件路径时,必须使用绝对路径。 + + +## 媒体文件格式 + +**表1** 支持的图片格式 + +| 格式 | 支持的文件类型 | +| -------- | -------- | +| BMP | .bmp | +| GIF | .gif | +| JPEG | .jpg | +| PNG | .png | +| WebP | .webp | + +**表2** 支持的视频格式 + +| 格式 | 支持的文件类型 | +| -------- | -------- | +| H.264 AVC
Baseline Profile (BP) | .3gp
.mp4 | diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..99e2572ce64cf1fca9fa16f8cc0e3b8fc5a89398 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" @@ -0,0 +1,117 @@ +--- +title: js标签配置 +permalink: /pages/010802020202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# js标签配置 + +js标签中包含了实例名称、页面路由和窗口样式信息。 + + +| 标签 | 类型 | 默认值 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | -------- | +| name | string | default | 是 | 标识JS实例的名字。 | +| pages | Array | - | 是 | 路由信息,详见“**[pages](#pages)**”。 | +| window | Object | - | 否 | 窗口信息,详见“**[window](#window)**”。 | + + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> name、pages和window等标签配置需在配置文件(config.json)中的“js”标签中完成设置。 + + +## pages + +定义每个页面的路由信息,每个页面由页面路径和页面名组成,页面的文件名就是页面名。比如: + +``` +{ + ... + "pages": [ + "pages/index/index", + "pages/detail/detail" + ] + ... +} +``` + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> +> - pages列表中第一个页面是应用的首页,即entry入口。 +> +> +> - 页面文件名不能使用组件名称,比如:text.hml、button.hml等。 + +## window + +window用于定义与显示窗口相关的配置。对于屏幕适配问题,有2种配置方法: + +- 指定designWidth(屏幕逻辑宽度),所有与大小相关的样式(例如width、font-size)均以designWidth和实际屏幕宽度的比例进行缩放,例如在designWidth为720时,如果设置width为100px时,在实际宽度为1440物理像素的屏幕上,width实际渲染像素为200物理像素。 + +- 设置autoDesignWidth为true,此时designWidth字段将会被忽略,渲染组件和布局时按屏幕密度进行缩放。屏幕逻辑宽度由设备宽度和屏幕密度自动计算得出,在不同设备上可能不同,请使用相对布局来适配多种设备。例如:在466\*466分辨率,320dpi的设备上,屏幕密度为2(以160dpi为基准),1px等于渲染出的2物理像素。 + + > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** + > 1. 组件样式中<length>类型的默认值,按屏幕密度进行计算和绘制,如:在屏幕密度为2(以160dpi为基准)的设备上,默认<length>为1px时,设备上实际渲染出2物理像素。 + > + > 2. autoDesignWidth、designWidth的设置不影响默认值计算方式和绘制结果。 + +| 属性 | 类型 | 必填 | 缺省值 | 描述 | +| -------- | -------- | -------- | -------- | -------- | +| designWidth | number | 否 | 720
| 页面显示设计时的参考值,实际显示效果基于设备宽度与参考值之间的比例进行缩放。 | +| autoDesignWidth | boolean | 否 | false | 页面设计基准宽度是否自动计算,当设为true时,designWidth将会被忽略,设计基准宽度由设备宽度与屏幕密度计算得出。 | + +示例如下: +``` +{ + ... + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + ... +} +``` + + +## 示例 + +``` +{ + "app": { + "bundleName": "com.example.player", + "version": { + "code": 1, + "name": "1.0" + }, + "vendor": "example" + } + "module": { + ... + "js": [ + { + "name": "default", + "pages": [ + "pages/index/index", + "pages/detail/detail" + ], + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "abilities": [ + { + ... + } + ] + } +} +``` diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" new file mode 100644 index 0000000000000000000000000000000000000000..21e4a5e269869ca086f1ece337941ad735908b49 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" @@ -0,0 +1,57 @@ +--- +title: app.js +permalink: /pages/010802020203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +--- +# app.js + +## 应用生命周期 + +每个应用可以在app.js自定义应用级[生命周期](/pages/010802020205)的实现逻辑,以下示例仅在生命周期函数中打印对应日志: +``` +// app.js +export default { + onCreate() { + console.info('Application onCreate'); + }, + + onDestroy() { + console.info('Application onDestroy'); + }, +} +``` + +## 应用对象6+ + +| 属性 | 类型 | 描述 | +| -------- | -------- | -------- | +| getApp | Function | 提供getApp()全局方法,可以在自定义js文件中获取app.js中暴露的对象。 | + +示例如下: + +``` +// app.js +export default { + data: { + test: "by getAPP" + }, + onCreate() { + console.info('AceApplication onCreate'); + }, + onDestroy() { + console.info('AceApplication onDestroy'); + }, +}; +``` + +``` +// test.js 自定义逻辑代码 +export var appData = getApp().data; +``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" similarity index 45% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" index 782f6f913ef7804b7e4250acebf8dfffe01c00e2..4e71f8fdee693a89067d4d138840409f21a69fa0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/01.HML\350\257\255\346\263\225\345\217\202\350\200\203.md" @@ -1,6 +1,6 @@ --- title: HML语法参考 -permalink: /pages/000b0100000300 +permalink: /pages/01080202020401 navbar: true sidebar: true prev: true @@ -9,13 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:48 --- -# HML语法参考 +# HML语法参考 HML(OpenHarmony Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、列表渲染、条件渲染和逻辑控制等高级能力。 -## 页面结构 + +## 页面结构 ``` @@ -27,7 +28,8 @@ HML(OpenHarmony Markup Language)是一套类HTML的标记语言,通过组 ``` -## 数据绑定 + +## 数据绑定 ``` @@ -48,165 +50,166 @@ export default { } ``` ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 针对数组内的数据修改,请使用splice方法生效数据绑定变更。 ->- hml文件中的js表达式不支持ES6语法。 +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> - 针对数组内的数据修改,请使用splice方法生效数据绑定变更。 +> +> - hml文件中的js表达式不支持ES6语法。 -## 普通事件绑定 -事件通过'on'或者'@'绑定在组件上,当组件触发事件时会执行JS文件中对应的事件处理函数。 +## 普通事件绑定 + +事件通过'on'或者'\@'绑定在组件上,当组件触发事件时会执行JS文件中对应的事件处理函数。 事件支持的写法有: -- "funcName":funcName为事件回调函数名(在JS文件中定义相应的函数实现)。 -- "funcName\(a,b\)":函数参数例如a,b可以是常量,或者是在JS文件中的data中定义的变量(前面不用写this.)。 - -- 示例 - - ``` - -
- {{count}} -
- - - - - - -
-
- ``` - - ``` - /* xxx.js */ - export default { - data: { - count: 0 - }, - increase() { - this.count++; - }, - decrease() { - this.count--; - }, - multiply(multiplier) { - this.count = multiplier * this.count; - } - }; - ``` - - ``` - /* xxx.css */ - .container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - left: 0px; - top: 0px; - width: 454px; - height: 454px; - } - .title { - font-size: 30px; - text-align: center; - width: 200px; - height: 100px; - } - .box { - width: 454px; - height: 200px; - justify-content: center; - align-items: center; - flex-wrap: wrap; - } - .btn { - width: 200px; - border-radius: 0; - margin-top: 10px; - margin-left: 10px; +- "funcName":funcName为事件回调函数名(在JS文件中定义相应的函数实现)。 + +- "funcName(a,b)":函数参数例如a,b可以是常量,或者是在JS文件中的data中定义的变量(前面不用写this.)。 + +- 示例 + ``` + +
+ {{count}} +
+ + + + + + +
+
+ ``` + + ``` + // xxx.js + export default { + data: { + count: 0 + }, + increase() { + this.count++; + }, + decrease() { + this.count--; + }, + multiply(multiplier) { + this.count = multiplier * this.count; } - ``` + }; + ``` + + ``` + /* xxx.css */ + .container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + left: 0px; + top: 0px; + width: 454px; + height: 454px; + } + .title { + font-size: 30px; + text-align: center; + width: 200px; + height: 100px; + } + .box { + width: 454px; + height: 200px; + justify-content: center; + align-items: center; + flex-wrap: wrap; + } + .btn { + width: 200px; + border-radius: 0; + margin-top: 10px; + margin-left: 10px; + } + ``` -## 冒泡事件绑定5+ +## 冒泡事件绑定5+ 冒泡事件绑定包括: -- 绑定冒泡事件:on:\{event\}.bubble。on:\{event\}等价于on:\{event\}.bubble。 -- 绑定并阻止冒泡事件向上冒泡:grab:\{event\}.bubble。grab:\{event\}等价于grab:\{event\}.bubble。 - - >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** - >详细冒泡事件说明参见[通用事件](/pages/000b0100010002)章节。 - - -- **示例** - - ``` -
- -
-
- -
-
- -
-
- -
-
-
- ``` - - ``` - // xxx.js - export default { - clickfunc: function(e) { - console.log(e); - }, - touchstartfuc: function(e) { - console.log(e); - }, - } - ``` +- 绑定冒泡事件:on:{event}.bubble。on:{event}等价于on:{event}.bubble。 + +- 绑定并阻止冒泡事件向上冒泡:grab:{event}.bubble。grab:{event}等价于grab:{event}.bubble。 + > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** + > 详细冒泡事件说明参见[通用事件](/pages/010c0201010103)章节。 + +- 示例 + ``` + +
+ ; +
+
+ +
+
+ +
+
+ +
+
+
+ ``` + ``` + // xxx.js + export default { + clickfunc: function(e) { + console.log(e); + }, + touchstartfuc: function(e) { + console.log(e); + }, + } + ``` ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 采用旧写法\(onclick\)的事件绑定在最小API版本6以下时采用不冒泡处理,在最小API版本为6及6以上时采用冒泡处理。 +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 采用旧写法(onclick)的事件绑定在最小API版本6以下时采用不冒泡处理,在最小API版本为6及6以上时采用冒泡处理。 -## 捕获事件绑定5+ +## 捕获事件绑定5+ Touch触摸类事件支持捕获,捕获阶段位于冒泡阶段之前,捕获事件先到达父组件然后达到子组件。 捕获事件绑定包括: -- 绑定捕获事件:on:\{event\}.capture。 -- 绑定并阻止事件向下传递:grab:\{event\}.capture。 - -- 示例 - - ``` -
- -
- -
-
- ``` - - ``` - // xxx.js - export default { - touchstartfuc: function(e) { - console.log(e); - }, - } - ``` +- 绑定捕获事件:on:{event}.capture。 +- 绑定并阻止事件向下传递:grab:{event}.capture。 + +- 示例 + ``` + +
+ +
+ +
+
+``` + + ``` + // xxx.js + export default { + touchstartfuc: function(e) { + console.log(e); + }, + } + ``` -## 列表渲染 + +## 列表渲染 ``` @@ -248,16 +251,21 @@ export default { tid属性主要用来加速for循环的重渲染,旨在列表中的数据有变更时,提高重新渲染的效率。tid属性是用来指定数组中每个元素的唯一标识,如果未指定,数组中每个元素的索引为该元素的唯一id。例如上述tid="id"表示数组中的每个元素的id属性为该元素的唯一标识。for循环支持的写法如下: -- for="array":其中array为数组对象,array的元素变量默认为$item。 -- for="v in array":其中v为自定义的元素变量,元素索引默认为$idx。 -- for="\(i, v\) in array":其中元素索引为i,元素变量为v,遍历数组对象array。 +- for="array":其中array为数组对象,array的元素变量默认为$item。 + +- for="v in array":其中v为自定义的元素变量,元素索引默认为$idx。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 数组中的每个元素必须存在tid指定的数据属性,否则运行时可能会导致异常。 ->- 数组中被tid指定的属性要保证唯一性,如果不是则会造成性能损耗。比如,示例中只有id和name可以作为tid字段,因为它们属于唯一字段。 ->- tid不支持表达式。 +- for="(i, v) in array":其中元素索引为i,元素变量为v,遍历数组对象array。 -## 条件渲染 +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> - 数组中的每个元素必须存在tid指定的数据属性,否则运行时可能会导致异常。 +> +> - 数组中被tid指定的属性要保证唯一性,如果不是则会造成性能损耗。比如,示例中只有id和name可以作为tid字段,因为它们属于唯一字段。 +> +> - tid不支持表达式。 + + +## 条件渲染 条件渲染分为2种:if/elif/else和show。两种写法的区别在于:第一种写法里if为false时,组件不会在vdom中构建,也不会渲染,而第二种写法里show为false时虽然也不渲染,但会在vdom中构建;另外,当使用if/elif/else写法时,节点必须是兄弟节点,否则编译无法通过。实例如下: @@ -273,7 +281,7 @@ tid属性主要用来加速for循环的重渲染,旨在列表中的数据有 ``` ``` -// xxx.css +/* xxx.css */ .container{ flex-direction: column; align-items: center; @@ -312,7 +320,7 @@ export default { ``` ``` -// xxx.css +/* xxx.css */ .container{ flex-direction: column; align-items: center; @@ -336,12 +344,12 @@ export default { } ``` ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->禁止在同一个元素上同时设置for和if属性。 +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 禁止在同一个元素上同时设置for和if属性。 -## 逻辑控制块 +## 逻辑控制块 -控制块使得循环渲染和条件渲染变得更加灵活;block在构建时不会被当作真实的节点编译。注意block标签只支持for和if属性。 +<block>控制块使得循环渲染和条件渲染变得更加灵活;block在构建时不会被当作真实的节点编译。注意block标签只支持for和if属性。 ``` @@ -371,9 +379,9 @@ export default { } ``` -## 模板引用 +## 模板引用 -HML可以通过element引用模板文件,详细介绍可参考[自定义组件](/pages/000b01000200)章节。 +HML可以通过element引用模板文件,详细介绍可参考[自定义组件](/pages/010c02010201)章节。 ``` @@ -390,4 +398,3 @@ HML可以通过element引用模板文件,详细介绍可参考[自定义组件 ``` - diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..ee01f09227a8fc8a0f16078694e0ec5d26c369af --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" @@ -0,0 +1,221 @@ +--- +title: CSS语法参考 +permalink: /pages/01080202020402 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# CSS语法参考 + +CSS是描述HML页面结构的样式语言。所有组件均存在系统默认样式,也可在页面CSS样式文件中对组件、页面自定义不同的样式。 + +## 尺寸单位 + +1. 逻辑像素px(文档中以<length>表示): + 1. 默认屏幕具有的逻辑宽度为720px(配置见[配置文件](/pages/010802020202)中的window小节),实际显示时会将页面布局缩放至屏幕实际宽度,如100px在实际宽度为1440物理像素的屏幕上,实际渲染为200物理像素(从720px向1440物理像素,所有尺寸放大2倍)。 + 2. 额外配置autoDesignWidth为true时(配置见[配置文件](/pages/010802020202)中的window小节),逻辑像素px将按照屏幕密度进行缩放,如100px在屏幕密度为3的设备上,实际渲染为300物理像素。应用需要适配多种设备时,建议采用此方法。 + +2. 百分比(文档中以<percentage>表示):表示该组件占父组件尺寸的百分比,如组件的width设置为50%,代表其宽度为父组件的50%。 + + +## 样式导入 + +为了模块化管理和代码复用,CSS样式文件支持 \@import 语句,导入css文件。 + + +## 声明样式 + +每个页面目录下存在一个与布局hml文件同名的css文件,用来描述该hml页面中组件的样式,决定组件应该如何显示。 + +1. 内部样式,支持使用style、class属性来控制组件的样式。例如: + ``` + +
+ Hello World +
+ ``` + + ``` + /* index.css */ + .container { + justify-content: center; + } + ``` + +2. 文件导入,合并外部样式文件。例如,在common目录中定义样式文件style.css,并在index.css文件首行中进行导入: + ``` + /* style.css */ + .title { + font-size: 50px; + } + ``` + + ``` + /* index.css */ + @import '../../common/style.css'; + .container { + justify-content: center; + } + ``` + + +## 选择器 + +css选择器用于选择需要添加样式的元素,支持的选择器如下表所示: + +| 选择器 | 样例 | 样例描述 | +| -------- | -------- | -------- | +| .class | .container | 用于选择class="container"的组件。 | +| \#id | \#titleId | 用于选择id="titleId"的组件。 | +| tag | text | 用于选择text组件。 | +| , | .title, .content | 用于选择class="title"和class="content"的组件。 | +| \#id .class tag | \#containerId .content text | 非严格父子关系的后代选择器,选择具有id="containerId"作为祖先元素,class="content"作为次级祖先元素的所有text组件。如需使用严格的父子关系,可以使用“>”代替空格,如:\#containerId>.content。 | + +示例: + +``` + +
+ 标题 +
+ 内容 +
+
+``` + +``` +/* 页面样式xxx.css */ +/\* 对所有div组件设置样式 \*/ +div { + flex-direction: column; +} +/* 对class="title"的组件设置样式 */ +.title { + font-size: 30px; +} +/* 对id="contentId"的组件设置样式 */ +#contentId { + font-size: 20px; +} +/* 对所有class="title"以及class="content"的组件都设置padding为5px */ +.title, .content { + padding: 5px; +} +/\* 对class="container"的组件下的所有text设置样式 \*/ +.container text { + color: \#007dff; +} +/\* 对class="container"的组件下的直接后代text设置样式 \*/ +.container > text { + color: \#fa2a2d; +} +``` + +以上样式运行效果如下: + +![zh-cn_image_0000001127125270](/images/application-dev/ui/figures/zh-cn_image_0000001127125270.png) + +其中“.container text”将“标题”和“内容”设置为蓝色,而“.container > text”直接后代选择器将“标题”设置为红色。2者优先级相同,但直接后代选择器声明顺序靠后,将前者样式覆盖(优先级计算见[选择器优先级](#选择器优先级))。 + +## 选择器优先级 + +选择器的优先级计算规则与w3c规则保持一致(只支持:内联样式,id,class,tag,后代和直接后代),其中内联样式为在元素style属性中声明的样式。 + +当多条选择器声明匹配到同一元素时,各类选择器优先级由高到低顺序为:内联样式 > id > class > tag。 + + +## 伪类 + +css伪类是选择器中的关键字,用于指定要选择元素的特殊状态。例如,:disabled状态可以用来设置元素的disabled属性变为true时的样式。 + +除了单个伪类之外,还支持伪类的组合,例如,:focus:checked状态可以用来设置元素的focus属性和checked属性同时为true时的样式。支持的单个伪类如下表所示,按照优先级降序排列: + +| 名称 | 支持组件 | 描述 | +| -------- | -------- | -------- | +| :disabled | 支持disabled属性的组件 | 表示disabled属性变为true时的元素(不支持动画样式的设置)。 | +| :active | 支持click事件的组件
| 表示被用户激活的元素,如:被用户按下的按钮、被激活的tab-bar页签(不支持动画样式的设置)。 | +| :waiting | button | 表示waiting属性为true的元素(不支持动画样式的设置)。 | +| :checked | input[type="checkbox"、type="radio"]、 switch | 表示checked属性为true的元素(不支持动画样式的设置)。 | + +伪类示例如下,设置按钮的:active伪类可以控制被用户按下时的样式: + +``` + +
+ +
+``` + +``` +/* index.css */ +.button:active { + background-color: #888888;/*按钮被激活时,背景颜色变为#888888 */ +} +``` + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 针对弹窗类组件及其子元素不支持伪类效果,包括popup、dialog、menu、option、picker + + +## 样式预编译 + +预编译提供了利用特有语法生成css的程序,可以提供变量、运算等功能,令开发者更便捷地定义组件样式,目前支持less、sass和scss的预编译。使用样式预编译时,需要将原css文件后缀改为less、sass或scss,如index.css改为index.less、index.sass或index.scss。 + +- 当前文件使用样式预编译,例如将原index.css改为index.less: + ``` + /* index.less */ + /* 定义变量 */ + @colorBackground: #000000; + .container { + background-color: @colorBackground; /* 使用当前less文件中定义的变量 */ + } + ``` + +- 引用预编译文件,例如common中存在style.scss文件,将原index.css改为index.scss,并引入style.scss: + ``` + /* style.scss */ + /* 定义变量 */ + $colorBackground: #000000; + ``` + + 在index.scss中引用: + + ``` + /* index.scss */ + /* 引入外部scss文件 */ + @import '../../common/style.scss'; + .container { + background-color: $colorBackground; /* 使用style.scss中定义的变量 */ + } + ``` + + > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** + > 引用的预编译文件建议放在common目录进行管理。 + +## CSS样式继承6+ + +css样式继承提供了子节点继承父节点样式的能力,继承下来的样式在多选择器样式匹配的场景下,优先级排最低,当前支持以下样式的继承: + +- font-family + +- font-weight + +- font-size + +- font-style + +- text-align + +- line-height + +- letter-spacing + +- color + +- visibility diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..bf6783ecc11ddb078ede5a074c8eee6bb97e30f4 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" @@ -0,0 +1,307 @@ +--- +title: JS语法参考 +permalink: /pages/01080202020403 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# JS语法参考 + +JS文件用来定义HML页面的业务逻辑,支持ECMA规范的JavaScript语言。基于JavaScript语言的动态化能力,可以使应用更加富有表现力,具备更加灵活的设计能力。下面讲述JS文件的编译和运行的支持情况。 + + +## 语法 + +支持ES6语法。 + +- 模块声明 + 使用import方法引入功能模块: + + ``` + import router from '@system.router'; + ``` + +- 代码引用 + 使用import方法导入js代码: + + ``` + import utils from '../../common/utils.js'; + ``` + + +## 对象 + +- 应用对象 + | 属性 | 类型 | 描述 | + | -------- | -------- | -------- | + | $def | Object | 使用this.$app.$def获取在app.js中暴露的对象。
> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:**
> 应用对象不支持数据绑定,需主动触发UI更新。 | + + 示例代码 + + ``` + // app.js + export default { + onCreate() { + console.info('Application onCreate'); + }, + onDestroy() { + console.info('Application onDestroy'); + }, + globalData: { + appData: 'appData', + appVersion: '2.0', + }, + globalMethod() { + console.info('This is a global method!'); + this.globalData.appVersion = '3.0'; + } + }; + ``` + + ``` + // index.js页面逻辑代码 + export default { + data: { + appData: 'localData', + appVersion:'1.0', + }, + onInit() { + this.appData = this.$app.$def.globalData.appData; + this.appVersion = this.$app.$def.globalData.appVersion; + }, + invokeGlobalMethod() { + this.$app.$def.globalMethod(); + }, + getAppVersion() { + this.appVersion = this.$app.$def.globalData.appVersion; + } + } + ``` + +- 页面对象 + | 属性 | 类型 | 描述 | + | -------- | -------- | -------- | + | data | Object/Function | 页面的数据模型,类型是对象或者函数,如果类型是函数,返回值必须是对象。属性名不能以$或_开头,不要使用保留字for, if, show, tid。
data与private和public不能重合使用。 | + | $refs | Object | 持有注册过ref 属性的DOM元素或子组件实例的对象。示例见[获取DOM元素](#获取dom元素)。 | + | private | Object | 页面的数据模型,private下的数据属性只能由当前页面修改。 | + | public | Object | 页面的数据模型,public下的数据属性的行为与data保持一致。 | + | props | Array/Object | props用于组件之间的通信,可以通过<tag xxxx='value'>方式传递给组件;props名称必须用小写,不能以$或_开头,不要使用保留字for, if, show, tid。目前props的数据类型不支持Function。示例见[自定义组件](/pages/010c02010203)。 | + | computed | Object | 用于在读取或设置进行预先处理,计算属性的结果会被缓存。计算属性名不能以$或_开头,不要使用保留字。示例见[自定义组件](/pages/010c02010203)。 | + +## 方法 + +- 数据方法 + | 方法 | 参数 | 描述 | + | -------- | -------- | -------- | + | $set | key: string, value: any | 添加新的数据属性或者修改已有数据属性。
用法:
this.$set('key',value):添加数据属性。 | + | $delete | key: string | 删除数据属性。
用法:
this.$delete('key'):删除数据属性。 | + + 示例代码 + + ``` + // index.js + export default { + data: { + keyMap: { + OS: 'OpenHarmony', + Version: '2.0', + }, + }, + getAppVersion() { + this.$set('keyMap.Version', '3.0'); + console.info("keyMap.Version = " + this.keyMap.Version); // keyMap.Version = 3.0 + + this.$delete('keyMap'); + console.info("keyMap.Version = " + this.keyMap); // log print: keyMap.Version = undefined + } + } + ``` + +- 公共方法 + | 方法 | 参数 | 描述 | + | -------- | -------- | -------- | + | $element | id: string | 获得指定id的组件对象,如果无指定id,则返回根组件对象。示例见[获取DOM元素](#获取dom元素)。
用法:
<div id='xxx'></div>
- this.$element('xxx'):获得id为xxx的组件对象。
- this.$element():获得根组件对象。 | + | $rootElement | 无 | 获取根组件对象。
用法:this.$rootElement().scrollTo({ duration: 500, position: 300 }), 页面在500ms内滚动300px。 | + | $root | 无 | 获得顶级ViewModel实例。[获取ViewModel](#获取viewmodel)示例。 | + | $parent | 无 | 获得父级ViewModel实例。[获取ViewModel](#获取viewmodel)示例。 | + | $child | id: string | 获得指定id的子级自定义组件的ViewModel实例。[获取ViewModel](#获取viewmodel)示例。
用法:
this.$child('xxx') :获取id为xxx的子级自定义组件的ViewModel实例。 | + +- 事件方法 + | 方法 | 参数 | 描述 | + | -------- | -------- | -------- | + | $watch | data: string, callback: string \| Function | 观察data中的属性变化,如果属性值改变,触发绑定的事件。示例见[自定义组件](/pages/010c02010203)。
用法:
this.$watch('key', callback) | + +- 页面方法 + | 方法 | 参数 | 描述 | + | -------- | -------- | -------- | + | scrollTo6+ | scrollPageParam: ScrollPageParam | 将页面滚动到目标位置,可以通过ID选择器指定或者滚动距离指定。 | + + **表1** ScrollPageParam6+ + + | 名称 | 类型 | 默认值 | 描述 | + | -------- | -------- | -------- | -------- | + | position | number | - | 指定滚动位置。 | + | id | string | - | 指定需要滚动到的元素id。 | + | duration | number | 300 | 指定滚动时长,单位为毫秒。 | + | timingFunction | string | ease | 指定滚动动画曲线,可选值参考
[动画样式animation-timing-function](/pages/010c0201010105)。 | + | complete | () => void | - | 指定滚动完成后需要执行的回调函数。 | + + 示例: + + ``` + this.$rootElement().scrollTo({position: 0}) + this.$rootElement().scrollTo({id: 'id', duration: 200, timingFunction: 'ease-in', complete: ()=>void}) + ``` + + +## 获取DOM元素 + +1. 通过$refs获取DOM元素 + ``` + +
+ +
+ ``` + + ``` + // index.js + export default { + data: { + images: [ + { src: '/common/frame1.png' }, + { src: '/common/frame2.png' }, + { src: '/common/frame3.png' }, + ], + }, + handleClick() { + const animator = this.$refs.animator; // 获取ref属性为animator的DOM元素 + const state = animator.getState(); + if (state === 'paused') { + animator.resume(); + } else if (state === 'stopped') { + animator.start(); + } else { + animator.pause(); + } + }, + }; + ``` + +2. 通过$element获取DOM元素 + ``` + +
+ +
+ ``` + + ``` + // index.js + export default { + data: { + images: [ + { src: '/common/frame1.png' }, + { src: '/common/frame2.png' }, + { src: '/common/frame3.png' }, + ], + }, + handleClick() { + const animator = this.$element('animator'); // 获取id属性为animator的DOM元素 + const state = animator.getState(); + if (state === 'paused') { + animator.resume(); + } else if (state === 'stopped') { + animator.start(); + } else { + animator.pause(); + } + }, + }; + ``` + +## 获取ViewModel + +根节点所在页面: + +``` + + +
+
+ {{text}} + +
+
+``` + +``` +// root.js +export default { + data: { + text: 'I am root!', + }, +} +``` + +自定义parent组件: + +``` + + +
+ parent component click + hello parent component! + +
+``` + +``` +// parent.js +export default { + data: { + show: false, + text: 'I am parent component!', + }, + parentClicked () { + this.show = !this.show; + console.info('parent component get parent text'); + console.info(`${this.$parent().text}`); + console.info("parent component get child function"); + console.info(`${this.$child('selfDefineChild').childClicked()}`); + }, +} +``` + +自定义child组件: + +``` + +
+ child component clicked + hello child component +
+``` + +``` +// child.js +export default { + data: { + show: false, + text: 'I am child component!', + }, + childClicked () { + this.show = !this.show; + console.info('child component get parent text'); + console.info('${this.$parent().text}'); + console.info('child component get root text'); + console.info('${this.$root().text}'); + }, +} +``` diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..ca3fa487ad72c25ea2b3cda55737e660b2e96b29 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" @@ -0,0 +1,59 @@ +--- +title: 生命周期 +permalink: /pages/010802020205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# 生命周期 + +## 应用生命周期 + +在app.js中可以定义如下应用生命周期函数: + +| 属性 | 类型 | 描述 | 触发时机 | +| -------- | -------- | -------- | -------- | +| onCreate | () => void | 应用创建 | 当应用创建时调用。 | +| onShow6+ | () => void | 应用处于前台 | 当应用处于前台时触发。 | +| onHide6+ | () => void | 应用处于后台 | 当应用处于后台时触发。 | +| onDestroy | () => void | 应用销毁 | 当应用退出时触发。 | + + +## 页面生命周期 + +在页面JS文件中可以定义如下页面生命周期函数: + +| 属性 | 类型 | 描述 | 触发时机 | +| -------- | -------- | -------- | -------- | +| onInit | () => void | 页面初始化 | 页面数据初始化完成时触发,只触发一次。 | +| onReady | () => void | 页面创建完成 | 页面创建完成时触发,只触发一次。 | +| onShow | () => void | 页面显示 | 页面显示时触发。 | +| onHide | () => void | 页面消失 | 页面消失时触发。 | +| onDestroy | () => void | 页面销毁 | 页面销毁时触发。 | +| onBackPress | () => boolean | 返回按钮动作 | 当用户点击返回按钮时触发。
- 返回true表示页面自己处理返回逻辑。
- 返回false表示使用默认的返回逻辑。
- 不返回值会作为false处理。 | +| onActive()5+ | () => void | 页面激活 | 页面激活时触发。 | +| onInactive()5+ | () => void | 页面暂停 | 页面暂停时触发。 | +| onNewRequest()5+ | () => void | FA重新请求 | FA已经启动时收到新的请求后触发。 | + +页面A的生命周期接口的调用顺序 +- 打开页面A:onInit() -> onReady() -> onShow() + +- 在页面A打开页面B:onHide() + +- 从页面B返回页面A:onShow() + +- 退出页面A:onBackPress() -> onHide() -> onDestroy() + +- 页面隐藏到后台运行:onInactive() -> onHide() + +- 页面从后台运行恢复到前台:onShow() -> onActive() + +![zh-cn_image_0000001147417424](/images/application-dev/ui/figures/zh-cn_image_0000001147417424.png) + + diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..1fb639713b80dbd11c2c067414dfcc5fad743fe0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" @@ -0,0 +1,105 @@ +--- +title: 资源限定与访问 +permalink: /pages/010802020206 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# 资源限定与访问 + + +## 资源限定词 + +资源限定词可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括屏幕密度等维度,限定词之间通过中划线(-)连接。开发者在**resources**目录下创建限定词文件时,需要掌握限定词文件的命名要求以及与限定词文件与设备状态的匹配规则。 + + +## 资源限定词的命名要求 + +- 限定词的组合顺序:屏幕密度。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称,顺序不可颠倒。 + +- 限定词的连接方式:限定词之间均采用中划线(-)连接。例如:res-dark-ldpi.json 。 + +- 限定词的取值范围:每类限定词的取值必须符合下表的条件,否则,将无法匹配目录中的资源文件,限定词大小写敏感。 + +- 限定词前缀:**resources**资源文件的资源限定词有前缀res,例如res-ldpi.json。 + +- 默认资源限定文件:**resources**资源文件的默认资源限定文件为res-defaults.json。 + +- 资源限定文件中不支持使用枚举格式的颜色来设置资源。 + + +**表1** 资源限定词 + +| 类型 | 含义与取值说明 | +| -------- | -------- | +| 屏幕密度 | 表示设备的屏幕密度(单位为dpi),取值如下:
- ldpi:表示低密度屏幕(~120dpi)(0.75基准密度)
- mdpi:表示中密度屏幕(~160dpi)(基准密度)
- hdpi:表示高密度屏幕(~240dpi)(1.5基准密度)
- xhdpi:表示加高密度屏幕(~320dpi)(2.0基准密度)
- xxhdpi:表示超超高密度屏幕(~480dpi)(3.0基准密度)
- xxxhdpi:表示超超超高密度屏幕(~640dpi)(4.0基准密度) | + + +## 限定词与设备状态的匹配规则 + +- 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:MCC和MNC> 横竖屏 > 深色模式 > 设备类型 > 屏幕密度。在资源限定词目录均未匹配的情况下,则匹配默认资源限定文件。 + +- 如果限定词目录中包含资源限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如:资源限定文件res-hdpi.json与当前设备密度xhdpi无法匹配。 + + +## 引用JS模块内resources资源 + +在应用开发的hml和js文件中使用$r的语法,可以对JS模块内的resources目录下的json资源进行格式化,获取相应的资源内容。 + +| 属性 | 类型 | 描述 | +| -------- | -------- | -------- | +| $r | (key: string) => string | 获取资源限定下具体的资源内容。例如:this.$r('strings.hello')。
参数说明:
- key:定义在资源限定文件中的键值,如strings.hello。
| + +**res-defaults.json示例:**
+ +``` +{ + strings: { + hello: 'hello world' + } +} +``` + +## 示例 + +resources/res-dark.json: + +``` +{ + "image": { + "clockFace": "common/dark_face.png" + }, + "colors": { + "background": "#000000" + } +} +``` + +resources/res-defaults.json: + +``` +{ + "image": { + "clockFace": "common/face.png" + }, + "colors": { + "background": "#ffffff" + } +} +``` + +``` + +
+ +
+``` + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 资源限定文件中不支持颜色枚举格式。 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..17d2288caa56179670bb592771ee04d66bea41fe --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" @@ -0,0 +1,198 @@ +--- +title: 多语言支持 +permalink: /pages/010802020207 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:48 +--- +# 多语言支持 + +基于开发框架的应用会覆盖多个国家和地区,开发框架支持多语言能力后,可以让应用开发者无需开发多个不同语言的版本,就可以同时支持多种语言的切换,为项目维护带来便利。 + + +开发者仅需要通过[定义资源文件](#定义资源文件)和[引用资源](#引用资源)两个步骤,就可以使用开发框架的多语言能力;如果需要在应用中获取当前系统语言,请参考[获取语言](#获取语言)。 + + +## 定义资源文件 + +资源文件用于存放应用在多种语言场景下的资源内容,开发框架使用JSON文件保存资源定义。在[文件组织](/pages/010802020201)中指定的i18n文件夹内放置语言资源文件,其中语言资源文件的命名是由语言、文字、国家或地区的限定词通过中划线连接组成,其中文字和国家或地区可以省略,如zh-Hant-HK(中国香港地区使用的繁体中文)、zh-CN(中国使用的简体中文)、zh(中文)。命名规则如下: + +``` +language[-script-region].json +``` + +限定词的取值需符合下表要求。 + +**表1** 限定词取值要求 + +| 限定词类型 | 含义与取值说明 | +| -------- | -------- | +| 语言 | 表示设备使用的语言类型,由2~3个小写字母组成。例如:zh表示中文,en表示英语,mai表示迈蒂利语。
详细取值范围,请查阅**ISO 639**(ISO制定的语言编码标准)。 | +| 文字 | 表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。
详细取值范围,请查阅**ISO 15924**(ISO制定的文字编码标准)。 | +| 国家或地区 | 表示用户所在的国家或地区,由2~3个大写字母或者3个数字组成。例如:CN表示中国,GB表示英国。
详细取值范围,请查阅**ISO 3166-1**(ISO制定的国家和地区编码标准)。 | + +当开发框架无法在应用中找到系统语言的资源文件时,默认使用en-US.json中的资源内容。 + +资源文件内容格式如下: + +en-US.json +``` +{ + "strings": { + "hello": "Hello world!", + "object": "Object parameter substitution-{name}", + "array": "Array type parameter substitution-{0}", + "symbol": "@#$%^&*()_+-={}[]\\|:;\"'<>,./?" + }, + + "files": { + "image": "image/en_picture.PNG" + } +} +``` + + +由于不同语言针对单复数有不同的匹配规则,在资源文件中使用“zero”“one”“two”“few”“many”“other”定义不同单复数场景下的词条内容。例如中文不区分单复数,仅存在“other”场景;英文存在“one”、“other”场景;阿拉伯语存在上述6种场景。 + + +以en-US.json和ar-AE.json为例,资源文件内容格式如下: + + +en-US.json + +``` +{ + "strings": { + "people": { + "one": "one person", + "other": "{count} people" + } + } +} +``` + + +ar-AE.json + +``` +{ + "strings": { + "people": { + "zero": "لا أحد", + "one": "وحده", + "two": "اثنان", + "few": "ستة اشخاص", + "many": "خمسون شخص", + "other": "مائة شخص" + } + } +} +``` + + +## 引用资源 + +在应用开发的页面中使用多语言的语法,包含简单格式化和单复数格式化两种,都可以在hml或js中使用。 + +- 简单格式化方法 + 在应用中使用$t方法引用资源,$t既可以在hml中使用,也可以在js中使用。系统将根据当前语言环境和指定的资源路径(通过$t的path参数设置),显示对应语言的资源文件中的内容。 + + **表2** 简单格式化 + + | 属性 | 类型 | 参数 | 必填 | 描述 | + | -------- | -------- | -------- | -------- | -------- | + | $t | Function | 请见**表 $t参数说明** | 是 | 根据系统语言完成简单的替换:this.$t('strings.hello') | + + **表3** $t参数说明 + + | 参数 | 类型 | 必填 | 描述 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 资源路径 | + | params | Array\|Object | 否 | 运行时用来替换占位符的实际内容,占位符分为两种:
- 具名占位符,例如{name}。实际内容必须用Object类型指定,例如:$t('strings.object', **{ name: 'Hello world' }**)。
- 数字占位符,例如{0}。实际内容必须用Array类型指定,例如:$t('strings.array', **['Hello world']**)。 | + +- 简单格式化示例代码 + ``` + +
+ + {{ $t('strings.hello') }} + + {{ $t('strings.object', { name: 'Hello world' }) }} + + {{ $t('strings.array', ['Hello world']) }} + + {{ hello }} + + {{ replaceObject }} + + {{ replaceArray }} + + + + + +
+ ``` + + ``` + // xxx.js + // 下面为在js文件中的使用方法。 + export default { + data: { + hello: '', + replaceObject: '', + replaceArray: '', + replaceSrc: '', + }, + onInit() { + this.hello = this.$t('strings.hello'); + this.replaceObject = this.$t('strings.object', { name: 'Hello world' }); + this.replaceArray = this.$t('strings.array', ['Hello world']); + this.replaceSrc = this.$t('files.image'); + }, + } + ``` + +- 单复数格式化方法 + **表4** 单复数格式化 + + | 属性 | 类型 | 参数 | 必填 | 描述 | + | -------- | -------- | -------- | -------- | -------- | + | $tc | Function | 请见**表 $tc参数说明** | 是 | 根据系统语言完成单复数替换:this.$tc('strings.people')
> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:**
> 定义资源的内容通过json格式的key为“zero”、“one”、“two”、“few”、“many”和“other”区分。 | + + **表5** $tc参数说明 + + | 参数 | 类型 | 必填 | 描述 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 资源路径 | + | count | number | 是 | 要表达的值 | + +- 单复数格式化示例代码 + ``` + +
+ + {{ $tc('strings.people', 0) }} + + {{ $tc('strings.people', 1) }} + + {{ $tc('strings.people', 2) }} + + {{ $tc('strings.people', 6) }} + + {{ $tc('strings.people', 50) }} + + {{ $tc('strings.people', 100) }} +
+ ``` + + +## 获取语言 + +获取语言功能请参考[应用配置](/pages/010c010b05)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" similarity index 74% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" index b477301a17312c8c7ba1d63f9762e114272ffe9b..eff3aa461dbf0650509ae42810dbe2bd7ec68cc1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/01.\347\273\204\344\273\266\344\273\213\347\273\215.md" @@ -1,6 +1,6 @@ --- title: 组件介绍 -permalink: /pages/000701000100 +permalink: /pages/010802020301 navbar: true sidebar: true prev: true @@ -9,25 +9,25 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 组件介绍 -组件(Component)是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。关于组件的详细参考文档请参见[组件](/pages/000b0100010000)。 +组件(Component)是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。关于组件的详细参考文档请参见[组件](/pages/010c0201010101)。 -开发者还可以通过组件间合理的搭配定义满足业务需求的新组件,减少开发量,自定义组件的开发方法请参见[自定义组件](/pages/0007010004)。 +开发者还可以通过组件间合理的搭配定义满足业务需求的新组件,减少开发量,自定义组件的开发方法请参见[自定义组件](/pages/0108020206)。 ## 组件分类 根据组件的功能,可以分为以下六大类: -| 组件类型 | 主要组件 | +| 组件类型 | 主要组件 | | -------- | -------- | -| 容器组件 | badge、dialog、div、form、list、list-item、list-item-group、panel、popup、refresh、stack、stepper、stepper-item、swiper、tabs、tab-bar、tab-content | -| 基础组件 | button、chart、divider、image、image-animator、input、label、marquee、menu、option、picker、picker-view、piece、progress、qrcode、rating、richtext、search、select、slider、span、switch、text、textarea、toolbar、toolbar-item、toggle | -| 媒体组件 | video | -| 画布组件 | canvas | -| 栅格组件 | grid-container、grid-row、grid-col | +| 容器组件 | badge、dialog、div、form、list、list-item、list-item-group、panel、popup、refresh、stack、stepper、stepper-item、swiper、tabs、tab-bar、tab-content | +| 基础组件 | button、chart、divider、image、image-animator、input、label、marquee、menu、option、picker、picker-view、piece、progress、qrcode、rating、richtext、search、select、slider、span、switch、text、textarea、toolbar、toolbar-item、toggle | +| 媒体组件 | video | +| 画布组件 | canvas | +| 栅格组件 | grid-container、grid-row、grid-col | | svg组件 | svg、rect、circle、ellipse、path、line、polyline、polygon、text、tspan、textPath、animate、animateMotion、animateTransform | diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" index 2cb523e781591a62e35ca1ec7a5bb120a279c83a..66a9ae609a023583f50309b3d40d9e12cfa6ce22 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/01.\345\270\203\345\261\200\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 布局说明 -permalink: /pages/00070100010100 +permalink: /pages/01080202030201 navbar: true sidebar: true prev: true @@ -9,10 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 布局说明 + + 设备的基准宽度为720px(px为逻辑像素,非物理像素),实际显示效果会根据实际屏幕宽度进行缩放。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" index e1415381c05196a3d7f6f010e1dfd44ee7bbc5df..f1e2844b8fd38e80121462cd2f6057e0e675f0da 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/02.\346\267\273\345\212\240\346\240\207\351\242\230\350\241\214\345\222\214\346\226\207\346\234\254\345\214\272\345\237\237.md" @@ -1,6 +1,6 @@ --- title: 添加标题行和文本区域 -permalink: /pages/00070100010101 +permalink: /pages/01080202030202 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 添加标题行和文本区域 -实现标题和文本区域最常用的是基础组件text。text组件用于展示文本,可以设置不同的属性和样式,文本内容需要写在标签内容区,完整属性和样式信息请参考[text](/pages/000b0100010216)。在页面中插入标题和文本区域的示例如下: +实现标题和文本区域最常用的是基础组件text。text组件用于展示文本,可以设置不同的属性和样式,文本内容需要写在标签内容区,完整属性和样式信息请参考[text](/pages/010c0201010317)。在页面中插入标题和文本区域的示例如下: ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" similarity index 77% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" index e7efce556595b6531845254ab85eeab77fdd87cf..484d1fe5279234162e3330a9e60a8ced6c3f1a7e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/03.\346\267\273\345\212\240\345\233\276\347\211\207\345\214\272\345\237\237.md" @@ -1,6 +1,6 @@ --- title: 添加图片区域 -permalink: /pages/00070100010102 +permalink: /pages/01080202030203 navbar: true sidebar: true prev: true @@ -9,14 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 添加图片区域 -添加图片区域通常用[image](/pages/000b0100010203)组件来实现,使用的方法和text组件类似。 +添加图片区域通常用[image](/pages/010c0201010304)组件来实现,使用的方法和text组件类似。 -图片资源建议放在jsdefaultcommon目录下,common目录需自行创建,详细的目录结构见[目录结构](/pages/000b01000000#目录结构)。代码示例如下: + +图片资源建议放在jsdefaultcommon目录下,common目录需自行创建,详细的目录结构见[目录结构](/pages/010802020201#目录结构)。代码示例如下: ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" index 5319a49bbfa57f5cc4de6f994a57cbb5de237495..985447d813ec7bc1284b215a659a3cf4fd9cf7df 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/04.\346\267\273\345\212\240\347\225\231\350\250\200\345\214\272\345\237\237.md" @@ -1,6 +1,6 @@ --- title: 添加留言区域 -permalink: /pages/00070100010103 +permalink: /pages/01080202030204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 添加留言区域 @@ -46,7 +46,7 @@ date: 2021-12-30 18:31:34 color: #1a1a1a; font-weight: bold; margin-top: 40px; -margin-bottom: 10px; + margin-bottom: 10px; } .comment { width: 550px; diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" index 754fcd5b67426269889fcc80e51afb8b07e4d312..6eca88831e44a932eaaaa8799cc522ca827f494f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/02.\346\236\204\345\273\272\345\270\203\345\261\200/05.\346\267\273\345\212\240\345\256\271\345\231\250.md" @@ -1,6 +1,6 @@ --- title: 添加容器 -permalink: /pages/00070100010104 +permalink: /pages/01080202030205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 添加容器 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" index 33cf2cba7024089f6006ace31eba9973adbf7eeb..bf1375c4da7d4ba5206ad158844347c62d4ac51a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/03.\346\267\273\345\212\240\344\272\244\344\272\222.md" @@ -1,6 +1,6 @@ --- title: 添加交互 -permalink: /pages/000701000102 +permalink: /pages/010802020303 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 添加交互 @@ -90,4 +90,4 @@ export default { ``` -除此之外,还提供了很多表单组件,例如开关、标签、滑动选择器等,以便于开发者在页面布局时灵活使用和提高交互性,详见[容器组件](/pages/000b0100010100)。 +除此之外,还提供了很多表单组件,例如开关、标签、滑动选择器等,以便于开发者在页面布局时灵活使用和提高交互性,详见[容器组件](/pages/extra/ce8bc9/)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" index 238118e93cf7eb61c5f2c4c8de8827a32282e7c7..2d7d198542eceb0178fd395383ac9afcff184ef5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/04.\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 动画 -permalink: /pages/000701000103 +permalink: /pages/010802020304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 动画 @@ -26,7 +26,7 @@ date: 2021-12-30 18:31:34 - **rotate**:将指定组件沿横轴或纵轴或中心点旋转指定的角度。 -具体的使用示例如下,更多信息请参考[组件方法](/pages/000b0100010003)。 +具体的使用示例如下,更多信息请参考[组件方法](/pages/010c0201010104)。 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" index e255558a5d72f3c65416f7308a4c524bb5c628cb..79884947e0befaf744bbeebbb252c6008310c04d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/05.\344\272\213\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 事件 -permalink: /pages/000701000104 +permalink: /pages/010802020305 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 事件 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" index de8a444dc7d66d09de5b07a8f77692fb2312a231..6afd770b5c90cf957e4b7f9e0ecbe7adb054de96 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\346\236\204\345\273\272\347\224\250\346\210\267\347\225\214\351\235\242/06.\351\241\265\351\235\242\350\267\257\347\224\261.md" @@ -1,6 +1,6 @@ --- title: 页面路由 -permalink: /pages/000701000105 +permalink: /pages/010802020306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # 页面路由 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" index b38c24b33d327ce24554490cd483b059f420cabd..d9bba101cb638c32f5876f7a603fbd0eac6a72b4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/01.Text.md" @@ -1,6 +1,6 @@ --- title: Text -permalink: /pages/000701000200 +permalink: /pages/010802020401 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Text -Text是文本组件,用于呈现一段文本信息。具体用法请参考[Text API](/pages/000b0100010216)。 +Text是文本组件,用于呈现一段文本信息。具体用法请参考[Text API](/pages/010c0201010317)。 ## 创建Text组件 @@ -30,6 +30,8 @@ Text是文本组件,用于呈现一段文本信息。具体用法请参考[Tex ``` /* xxx.css */ .container { + width: 100%; + height: 100%; flex-direction: column; align-items: center; justify-content: center; @@ -45,7 +47,7 @@ Text是文本组件,用于呈现一段文本信息。具体用法请参考[Tex - 添加文本样式 -设置color、font-size、allow-scale、word-spacing、text-valign属性分别为文本添加颜色、大小、和缩放、文本之间的间距和文本在垂直方向的对齐方式。 +设置color、font-size、allow-scale、word-spacing、text-valign属性分别为文本添加颜色、大小、缩放、文本之间的间距和文本在垂直方向的对齐方式。 ``` @@ -54,15 +56,27 @@ Text是文本组件,用于呈现一段文本信息。具体用法请参考[Tex This is a passage - This is a passage + + This is a passage + ``` -![zh-cn_image_0000001163489068](/images/application-dev/ui/figures/zh-cn_image_0000001163489068.png) +``` +/* xxx.css */ +.container { + width: 100%; + height: 100%; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: #F1F3F5; +} +``` -![zh-cn_image_0000001173950938](/images/application-dev/ui/figures/zh-cn_image_0000001173950938.png) +![zh-cn_image_0000001220778205](/images/application-dev/ui/figures/zh-cn_image_0000001220778205.png) - 添加划线 @@ -87,20 +101,19 @@ Text是文本组件,用于呈现一段文本信息。具体用法请参考[Tex ``` /* xxx.css */ .container { + width: 100%; + height: 100%; flex-direction: column; align-items: center; justify-content: center; } text{ -font-size: 50px; + font-size: 50px; } ``` -![zh-cn_image_0000001208975737](/images/application-dev/ui/figures/zh-cn_image_0000001208975737.png) - - -![zh-cn_image_0000001219237131](/images/application-dev/ui/figures/zh-cn_image_0000001219237131.png) +![zh-cn_image_0000001220856725](/images/application-dev/ui/figures/zh-cn_image_0000001220856725.png) - 隐藏文本内容 @@ -122,6 +135,8 @@ font-size: 50px; ``` /* xxx.css */ .container { + width: 100%; + height: 100%; flex-direction: column; align-items: center; background-color: #F1F3F5; @@ -200,7 +215,7 @@ font-size: 50px; ![zh-cn_image_0000001209033195](/images/application-dev/ui/figures/zh-cn_image_0000001209033195.png) -- Text组件支持[Span](/pages/000b0100010214)子组件 +- Text组件支持[Span](/pages/010c0201010315)子组件 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" index 6e0d4e7fb657c861f74f588da2d1fd069fab97f1..6f7bf40af3d7182a5bdb815b539c55185c76cf46 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/02.Input.md" @@ -1,6 +1,6 @@ --- title: Input -permalink: /pages/000701000201 +permalink: /pages/010802020402 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Input -Input是交互式组件,用于接收用户数据。其类型可设置为日期、多选框和按钮等。具体用法请参考[Input API](/pages/000b0100010205)。 +Input是交互式组件,用于接收用户数据。其类型可设置为日期、多选框和按钮等。具体用法请参考[Input API](/pages/010c0201010306)。 ## 创建Input组件 @@ -169,7 +169,7 @@ export default { } ``` -![zh-cn_image_0000001208787965](/images/application-dev/ui/figures/zh-cn_image_0000001208787965.gif) +![zh-cn_image_0000001189088264](/images/application-dev/ui/figures/zh-cn_image_0000001189088264.gif) ## 设置输入提示 @@ -232,7 +232,7 @@ import prompt from '@system.prompt' } ``` -![zh-cn_image_0000001208691071](/images/application-dev/ui/figures/zh-cn_image_0000001208691071.gif) +![zh-cn_image_0000001189248178](/images/application-dev/ui/figures/zh-cn_image_0000001189248178.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** > - 该方法在Input类型为text、email、date、time、number和password时生效。 @@ -319,4 +319,4 @@ export default { ``` -![zh-cn_image_0000001162586456](/images/application-dev/ui/figures/zh-cn_image_0000001162586456.gif) +![zh-cn_image_0000001188771358](/images/application-dev/ui/figures/zh-cn_image_0000001188771358.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" index acbed3926e436c014015e1d34c6eb7225c56a12f..3f07c0059404fc354c6c9b6f8675f043888d0bad 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/03.Button.md" @@ -1,6 +1,6 @@ --- title: Button -permalink: /pages/000701000202 +permalink: /pages/010802020403 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Button -Button是按钮组件,其类型包括胶囊按钮、圆形按钮、文本按钮、弧形按钮、下载按钮。具体用法请参考[Button API](/pages/000b0100010200)。 +Button是按钮组件,其类型包括胶囊按钮、圆形按钮、文本按钮、弧形按钮、下载按钮。具体用法请参考[Button API](/pages/010c0201010301)。 ## 创建Button组件 @@ -291,4 +291,4 @@ export default { ``` -![zh-cn_image_0000001163212628](/images/application-dev/ui/figures/zh-cn_image_0000001163212628.gif) +![zh-cn_image_0000001234129289](/images/application-dev/ui/figures/zh-cn_image_0000001234129289.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" index d0acc9152ee95c755ce0560ff30ee4c38c1bddaa..df97464ec3a137a44fb4a629bdfe2ab3dc45b00a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/04.List.md" @@ -1,6 +1,6 @@ --- title: List -permalink: /pages/000701000203 +permalink: /pages/010802020404 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # List -List是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考[List API](/pages/000b0100010104)。 +List是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考[List API](/pages/010c0201010205)。 ## 创建List组件 @@ -21,7 +21,14 @@ List是用来显示列表的组件,包含一系列相同宽度的列表项, 在pages/index目录下的hml文件中创建一个List组件。 ``` -
+ +
+ + + + + +
``` ``` @@ -51,7 +58,17 @@ List是用来显示列表的组件,包含一系列相同宽度的列表项, 设置scrollbar属性为on即可在屏幕右侧生成滚动条,实现长列表或者屏幕滚动等效果。 ``` -
+ +
+ + + + + + + + +
``` ``` @@ -80,13 +97,25 @@ List是用来显示列表的组件,包含一系列相同宽度的列表项, 设置indexer属性为自定义索引时,索引栏会显示在列表右边界处,indexer属性设置为true,默认为字母索引表。 ``` -
+ +
+ + + +
``` ``` -/* index.css */.container{ flex-direction: column; +/* index.css */ +.container{ + flex-direction: column; background-color: #F1F3F5; - } .listCss{ height: 100%; flex-direction: column; columns: 1} + } +.listCss{ + height: 100%; + flex-direction: column; + columns: 1 +} ``` ![zh-cn_image_0000001166432552](/images/application-dev/ui/figures/zh-cn_image_0000001166432552.png) @@ -180,16 +209,11 @@ export default { ## 场景示例 - 在本场景中,开发者可以根据字母索引表查找对应联系人。 ``` -``` - - -```
Contacts @@ -289,4 +313,4 @@ export default { ``` -![zh-cn_image_0000001208693047](/images/application-dev/ui/figures/zh-cn_image_0000001208693047.gif) +![zh-cn_image_0000001234287779](/images/application-dev/ui/figures/zh-cn_image_0000001234287779.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" similarity index 89% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" index d6685aa8b704714b45b0e256759cd8edbf867321..2ead8f4875226067856bf4fa794db300f7ec8485 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/05.Picker.md" @@ -1,6 +1,6 @@ --- title: Picker -permalink: /pages/000701000204 +permalink: /pages/010802020405 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Picker -Picker是滑动选择器组件,类型支持普通选择器、日期选择器、时间选择器、时间日期选择器和多列文本选择器。具体用法请参考[Picker API](/pages/000b010001020a)。 +Picker是滑动选择器组件,类型支持普通选择器、日期选择器、时间选择器、时间日期选择器和多列文本选择器。具体用法请参考[Picker API](/pages/010c020101030b)。 ## 创建Picker组件 @@ -61,7 +61,7 @@ Picker是滑动选择器组件,类型支持普通选择器、日期选择器 background-color: #F1F3F5; } .pickertext{ - margin-bottom: 30px; + margin-bottom: 30px; } ``` @@ -76,7 +76,7 @@ export default { } ``` -![zh-cn_image_0000001163515416](/images/application-dev/ui/figures/zh-cn_image_0000001163515416.gif) +![zh-cn_image_0000001189098638](/images/application-dev/ui/figures/zh-cn_image_0000001189098638.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** > - 普通选择器设置取值范围时,需要使用数据绑定的方式。 @@ -111,7 +111,7 @@ Picker的hours属性定义时间的展现格式,可选类型有12小时制和2 } ``` -![zh-cn_image_0000001163212630](/images/application-dev/ui/figures/zh-cn_image_0000001163212630.gif) +![zh-cn_image_0000001234327855](/images/application-dev/ui/figures/zh-cn_image_0000001234327855.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** > - hours属性为12:按照12小时制显示,用上午和下午进行区分; @@ -167,7 +167,7 @@ export default { } ``` -![zh-cn_image_0000001163372620](/images/application-dev/ui/figures/zh-cn_image_0000001163372620.gif) +![zh-cn_image_0000001234009343](/images/application-dev/ui/figures/zh-cn_image_0000001234009343.gif) ## 场景示例 @@ -201,7 +201,7 @@ export default {
- +
``` @@ -285,11 +285,9 @@ export default { this.build = e.newValue }, dateonchange(e) { + e.month=e.month+1; this.datevalue = e.year + "-" + e.month + "-" + e.day; - pmt.showToast({ message:"date:"+e.year+"-"+e.month+"-"+e.day }) }, - datetimeonchange(e) { - this.datetimevalue=e.year+"-"+e.month+"-"+e.day+" "+e.hour+":"+e.minute; - pmt.showToast({ message:"Time:"+e.month+"-"+e.day+" "+e.hour+":"+e.minute }) + pmt.showToast({ message:"date:"+e.year+"-"+e.month+"-"+e.day }) }, showtoast() { pmt.showToast({ @@ -302,4 +300,4 @@ export default { ``` -![zh-cn_image_0000001208703849](/images/application-dev/ui/figures/zh-cn_image_0000001208703849.gif) +![zh-cn_image_0000001234342189](/images/application-dev/ui/figures/zh-cn_image_0000001234342189.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" index f6b19ee4894ac95e53c40f3ba46f06debc7e92df..6147e567eb948fc34f2b6aa0d91ce41b74634ef2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/06.Dialog.md" @@ -1,6 +1,6 @@ --- title: Dialog -permalink: /pages/000701000205 +permalink: /pages/010802020406 navbar: true sidebar: true prev: true @@ -9,20 +9,20 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Dialog -Dialog组件用于创建自定义弹窗,通常用来展示用户当前需要或用户必须关注的信息或操作。具体用法请参考[Dialog API](/pages/000b0100010101)。 +Dialog组件用于创建自定义弹窗,通常用来展示用户当前需要或用户必须关注的信息或操作。具体用法请参考[Dialog API](/pages/010c0201010202)。 ## 创建Dialog组件 -在pages/index目录下的hml文件中创建一个Dialog组件,并添加Button组件来触发Dialog,当dragable为true时Dialog组件可进行拖拽。。Dialog组件仅支持width、height、margin、margin-[left|top|right|bottom]、margin-[start|end]样式。。 +在pages/index目录下的hml文件中创建一个Dialog组件,并添加Button组件来触发Dialog。Dialog组件仅支持width、height、margin、margin-[left|top|right|bottom]、margin-[start|end]样式。 ```
-
+
this is a dialog
@@ -71,18 +71,18 @@ export default { } ``` -![zh-cn_image_0000001211246571](/images/application-dev/ui/figures/zh-cn_image_0000001211246571.gif)![zh-cn_image_0000001211246571](/images/application-dev/ui/figures/zh-cn_image_0000001211246571.gif) +![zh-cn_image_0000001211246571](/images/application-dev/ui/figures/zh-cn_image_0000001211246571.gif) ## 设置弹窗响应 -开发者点击页面上非Dialog的区域时,将触发cancel事件而关闭弹窗,。同时也可以通过对Dialog添加show和close方法来显示和关闭弹窗,当弹窗显示时触发show事件,关闭则触发close事件。。 +开发者点击页面上非Dialog的区域时,将触发cancel事件而关闭弹窗。同时也可以通过对Dialog添加show和close方法来显示和关闭弹窗。 ```
- +
dialog @@ -133,12 +133,16 @@ export default { this.$element('dialogId').show() }, confirmClick(e) { - this.$element('dialogId').close() prompt.showToast({ message: 'Confirmed.' })}, }, show(){ prompt.showToast({duration:2000,message:'dialogShow'}) }, close(){ prompt.showToast({duration:2000,message:'dialogClose'}) }, cancel(){ prompt.showToast({duration:2000,message:'dialogCancel'}) }, + this.$element('dialogId').close() + prompt.showToast({ + message: 'Confirmed.' + }) + }, } ``` -![zh-cn_image_0000001163229150](/images/application-dev/ui/figures/zh-cn_image_0000001163229150.gif)![zh-cn_image_0000001163229150](/images/application-dev/ui/figures/zh-cn_image_0000001163229150.gif) +![zh-cn_image_0000001163229150](/images/application-dev/ui/figures/zh-cn_image_0000001163229150.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** @@ -152,7 +156,7 @@ export default { ## 场景示例 -在本场景中,开发者可以通过Dialog组件实现一个日程表。弹窗在打开状态下,利用[Textarea组件](/pages/000b0100010217)输入当前日程,点击确认按钮后获取当前时间并保存输入文本。最后以列表形式将各日程进行展示。 +在本场景中,开发者可以通过Dialog组件实现一个日程表。弹窗在打开状态下,利用[Textarea组件](/pages/010c0201010318)输入当前日程,点击确认按钮后获取当前时间并保存输入文本。最后以列表形式将各日程进行展示。 ``` @@ -314,4 +318,4 @@ export default { ``` -![zh-cn_image_0000001163531184](/images/application-dev/ui/figures/zh-cn_image_0000001163531184.gif) +![zh-cn_image_0000001234329527](/images/application-dev/ui/figures/zh-cn_image_0000001234329527.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" index 12b430f5f0f9f9647d60589b021160a91de8050a..a8389895acc4b9021940042ba1bbc60817bbea1f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/07.Form.md" @@ -1,6 +1,6 @@ --- title: Form -permalink: /pages/000701000206 +permalink: /pages/010802020407 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Form -Form是一个表单容器,支持容器内[Input](/pages/000b0100010205)组件内容的提交和重置。具体用法请参考[Form API](/pages/000b0100010103)。 +Form是一个表单容器,支持容器内[Input](/pages/010c0201010306)组件内容的提交和重置。具体用法请参考[Form API](/pages/010c0201010204)。 > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** @@ -46,7 +46,7 @@ Form是一个表单容器,支持容器内[Input](/pages/000b0100010205)组件 ## 实现表单缩放 -为Form组件添加click-effect属性,实现点击表单后的缩放效果,click-effect枚举值请参考[通用属性](/pages/000b0100010000)。 +为Form组件添加click-effect属性,实现点击表单后的缩放效果,click-effect枚举值请参考[通用属性](/pages/010c0201010101)。 ```
@@ -123,14 +123,14 @@ export default{ ``` -![zh-cn_image_0000001163691126](/images/application-dev/ui/figures/zh-cn_image_0000001163691126.gif) +![zh-cn_image_0000001234329539](/images/application-dev/ui/figures/zh-cn_image_0000001234329539.gif) ## 场景示例 在本场景中,开发者可以选择相应选项并提交或重置数据。 -创建[Input](/pages/000b0100010205)组件,分别设置type属性为checkbox(多选框)和radio(单选框),再使用Form组件的onsubmit和onreset事件实现表单数据的提交与重置。 +创建[Input](/pages/010c0201010306)组件,分别设置type属性为checkbox(多选框)和radio(单选框),再使用Form组件的onsubmit和onreset事件实现表单数据的提交与重置。 ``` @@ -201,4 +201,4 @@ export default { } ``` -![zh-cn_image_0000001163372646](/images/application-dev/ui/figures/zh-cn_image_0000001163372646.gif) +![zh-cn_image_0000001234289465](/images/application-dev/ui/figures/zh-cn_image_0000001234289465.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" similarity index 79% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" index cd3cc1c851c61d357529b1be8e8cbb6386a3a963..ead3b9677b2a3de29383d8899d5d2a001c3bcecd 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/08.Stepper.md" @@ -1,6 +1,6 @@ --- title: Stepper -permalink: /pages/000701000207 +permalink: /pages/010802020408 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Stepper -当一个任务需要多个步骤时,可以使用stepper组件展示当前进展。具体用法请参考[Stepper API](/pages/000b010001010b)。 +当一个任务需要多个步骤时,可以使用stepper组件展示当前进展。具体用法请参考[Stepper API](/pages/010c020101020c)。 > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** @@ -25,7 +25,16 @@ date: 2021-12-30 18:31:34 在pages/index目录下的hml文件中创建一个Stepper组件。 ``` -
Step 1 Step 2
+ +
+ + Step 1 + + + Step 2 + + +
``` ``` @@ -43,7 +52,7 @@ text{ } ``` -![zh-cn_image_0000001210951235](/images/application-dev/ui/figures/zh-cn_image_0000001210951235.gif) +![zh-cn_image_0000001234289455](/images/application-dev/ui/figures/zh-cn_image_0000001234289455.gif) ## 设置index属性 @@ -51,7 +60,20 @@ text{ 页面默认显示索引值为index的步骤。 ``` -
stepper-item1 stepper-item2 stepper-item3
+ +
+ + + stepper-item1 + + + stepper-item2 + + + stepper-item3 + + +
``` ``` @@ -67,12 +89,28 @@ text{ } ``` -![zh-cn_image_0000001208892613](/images/application-dev/ui/figures/zh-cn_image_0000001208892613.gif) +![zh-cn_image_0000001234011019](/images/application-dev/ui/figures/zh-cn_image_0000001234011019.gif) 通过设置label属性,自定义stepper-item的提示按钮。 ``` -
stepper-item1 stepper-item2 stepper-item3 stepper-item4
+ +
+ + + stepper-item1 + + + stepper-item2 + + + stepper-item3 + + + stepper-item4 + + +
``` ``` @@ -114,9 +152,14 @@ export default { Stepper组件默认填充父容器,通过border和background-color设置边框、背景色。 ``` -
+ +
- stepper-item1 + + + stepper-item1 + +
``` @@ -143,7 +186,7 @@ text{ } ``` -![zh-cn_image_0000001163691154](/images/application-dev/ui/figures/zh-cn_image_0000001163691154.png) +![zh-cn_image_0000001234130975](/images/application-dev/ui/figures/zh-cn_image_0000001234130975.png) ## 添加事件 @@ -242,14 +285,14 @@ export default { } ``` -![zh-cn_image_0000001163547244](/images/application-dev/ui/figures/zh-cn_image_0000001163547244.gif) +![zh-cn_image_0000001189089950](/images/application-dev/ui/figures/zh-cn_image_0000001189089950.gif) ## 场景示例 在本场景中,开发者可以在界面上点击选择并实时显示选择结果,点击下一步按钮后可动态修改页面的字体颜色和字体大小。 -用Stepper组件实现分步,再创建[Toggle](/pages/000b010001021a)组件实现选择显示功能,再使用[Select](/pages/000b0100010212)组件实现改变选中值动态修改字体颜色或大小。 +用Stepper组件实现分步,再创建[Toggle](/pages/010c020101031b)组件实现选择显示功能,再使用[Select](/pages/010c0201010313)组件实现改变选中值动态修改字体颜色或大小。 ```
@@ -353,4 +396,4 @@ export default { } ``` -![zh-cn_image_0000001163214740](/images/application-dev/ui/figures/zh-cn_image_0000001163214740.gif) +![zh-cn_image_0000001189249862](/images/application-dev/ui/figures/zh-cn_image_0000001189249862.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" index 5bc018d73a4053505dba3c760ecfa82aad09d0e1..732fe6ce7c9827d866e921c5587fad56f93dd28c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/09.Tabs.md" @@ -1,6 +1,6 @@ --- title: Tabs -permalink: /pages/000701000208 +permalink: /pages/010802020409 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:48 --- # Tabs -Tabs是一种常见的界面导航结构。通过页签容器,用户可以快捷地访问应用的不同模块。具体用法请参考[Tabs API](/pages/000b010001010e)。 +Tabs是一种常见的界面导航结构。通过页签容器,用户可以快捷地访问应用的不同模块。具体用法请参考[Tabs API](/pages/010c020101020f)。 ## 创建Tabs @@ -202,7 +202,8 @@ export default { > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** -> - tabs子组件仅支持一个[](/pages/000b010001010f)和一个[](/pages/000b0100010110)。 +> +> - tabs子组件仅支持一个[\](/pages/010c0201010210)和一个\[](/pages/010c0201010211)。 ## 场景示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" index 4e9a8ad4c34f1adc32be099b09857c1b8daa8a50..5aa206dedcee08050487cadec47083af8aa43bf6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\270\270\350\247\201\347\273\204\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274/10.Image.md" @@ -1,6 +1,6 @@ --- title: Image -permalink: /pages/000701000209 +permalink: /pages/01080202040a navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:49 --- # Image -Image是图片组件,用来渲染展示图片。具体用法请参考[Image API](/pages/000b0100010203)。 +Image是图片组件,用来渲染展示图片。具体用法请参考[Image API](/pages/010c0201010304)。 ## 创建Image组件 @@ -66,7 +66,7 @@ image{ border-radius: 20px; object-fit: contain; match-text-direction:true; - object-position: center center; + } ``` @@ -202,7 +202,7 @@ export default { } ``` -![zh-cn_image_0000001210358571](/images/application-dev/ui/figures/zh-cn_image_0000001210358571.gif) +![zh-cn_image_0000001188931396](/images/application-dev/ui/figures/zh-cn_image_0000001188931396.gif) ## 场景示例 @@ -229,6 +229,7 @@ export default { align-self: center; justify-content: center; background-color:#F1F3F5; + background-color: #F1F3F5; } .content{ flex-direction:column; @@ -277,4 +278,4 @@ export default { } ``` -![zh-cn_image_0000001208892929](/images/application-dev/ui/figures/zh-cn_image_0000001208892929.gif) +![zh-cn_image_0000001188771430](/images/application-dev/ui/figures/zh-cn_image_0000001188771430.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" similarity index 85% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" index 9592008a0007f2a460c4379951df9f3c5f669ace..d6c5bf5d7e0914b22b163663c16ce00c4d5fa21b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/01.\345\261\236\346\200\247\346\240\267\345\274\217\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 属性样式动画 -permalink: /pages/00070100030000 +permalink: /pages/01080202050101 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:49 --- -# 属性样式动画 +# 属性样式动画 + + 在关键帧(Keyframes)中动态设置父组件的width和height,实现组件变大缩小。子组件设置scale属性使父子组件同时缩放,再设置opacity实现父子组件的显示与隐藏。 + ```
@@ -27,6 +30,7 @@ date: 2021-12-30 18:31:34
``` + ``` /* xxx.css */ .container { @@ -91,9 +95,11 @@ text{ } ``` -![](/images/application-dev/ui/figures/d1.gif) -> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->1. animation取值不区分先后,duration (动画执行时间)/ delay (动画延迟执行时间)按照出现的先后顺序解析。 ->2. 必须设置animation-duration样式,否则时长为0则不会有动画效果。当设置animation-fill-mode属性为forwards时,组件直接展示最后一帧的样式。 +![zh-cn_image_0000001217168141](/images/application-dev/ui/figures/zh-cn_image_0000001217168141.gif) + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 1. animation取值不区分先后,duration (动画执行时间)/ delay (动画延迟执行时间)按照出现的先后顺序解析。 +> +> 2. 必须设置animation-duration样式,否则时长为0则不会有动画效果。当设置animation-fill-mode属性为forwards时,组件直接展示最后一帧的样式。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" index 523613a642117a463268e01f96428b1511860bc3..d2ed8f5641b653cd57d3fd5e94562e397874f4d2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/02.transform\346\240\267\345\274\217\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: transform样式动画 -permalink: /pages/00070100030001 +permalink: /pages/01080202050102 navbar: true sidebar: true prev: true @@ -9,15 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:34 +date: 2022-02-12 09:01:49 --- -# transform样式动画 +# transform样式动画 设置transform属性对组件进行旋转、缩放、移动和倾斜。 -## 设置静态动画 -创建一个正方形并旋转90°变成菱形,并用下方的长方形把菱形下半部分遮盖形成屋顶,设置长方形translate属性值为\(150px,-150px\)确定坐标位置形成门,再使用position属性使横纵线跟随父组件(正方形)移动到指定坐标位置,接着设置scale属性使父子组件一起变大形成窗户大小,最后使用skewX属性使组件倾斜后设置坐标translate\(200px,-830px\)得到烟囱。 +## 设置静态动画 + +创建一个正方形并旋转90°变成菱形,并用下方的长方形把菱形下半部分遮盖形成屋顶,设置长方形translate属性值为(150px,-150px)确定坐标位置形成门,再使用position属性使横纵线跟随父组件(正方形)移动到指定坐标位置,接着设置scale属性使父子组件一起变大形成窗户大小,最后使用skewX属性使组件倾斜后设置坐标translate(200px,-830px)得到烟囱。 ``` @@ -99,9 +100,10 @@ date: 2021-12-30 18:31:34 } ``` -![](/images/application-dev/ui/figures/111.png) +![zh-cn_image_0000001220634677](/images/application-dev/ui/figures/zh-cn_image_0000001220634677.png) + -## 设置平移动画 +## 设置平移动画 小球下降动画,改变小球的Y轴坐标实现小球下落,在下一段是时间内减小Y轴坐标实现小球回弹,让每次回弹的高度逐次减小直至回弹高度为0,就模拟出了小球下降的动画。 @@ -175,9 +177,10 @@ date: 2021-12-30 18:31:34 } ``` -![](/images/application-dev/ui/figures/q2.gif) +![zh-cn_image_0000001174756438](/images/application-dev/ui/figures/zh-cn_image_0000001174756438.gif) + -## 设置旋转动画 +## 设置旋转动画 设置不同的原点位置(transform-origin)改变元素所围绕的旋转中心。rotate3d属性前三个参数值分别为X轴、Y轴、Z轴的旋转向量,第四个值为旋转角度,旋转向角度可为负值,负值则代表旋转方向为逆时针方向。 @@ -225,7 +228,7 @@ date: 2021-12-30 18:31:34 } .rect3{ background-color: #6081f7; - /* 改变原定点置*/ + /* 改变原点位置*/ transform-origin: right bottom; } @keyframes rotate { @@ -305,12 +308,13 @@ date: 2021-12-30 18:31:34 } ``` -![](/images/application-dev/ui/figures/d2.gif) +![zh-cn_image_0000001220316305](/images/application-dev/ui/figures/zh-cn_image_0000001220316305.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->transform-origin变换对象的原点位置,如果仅设置一个值,另一个值为50%,若设置两个值第一个值表示X轴的位置,第二个值表示Y轴的位置。 +> transform-origin变换对象的原点位置,如果仅设置一个值,另一个值为50%,若设置两个值第一个值表示X轴的位置,第二个值表示Y轴的位置。 -## 设置缩放动画 + +## 设置缩放动画 设置scale样式属性实现涟漪动画,先使用定位确定元素的位置,确定坐标后创建多个组件实现重合效果,再设置opacity属性改变组件不透明度实现组件隐藏与显示,同时设置scale值使组件可以一边放大一边隐藏,最后设置两个组件不同的动画执行时间,实现扩散的效果。 @@ -346,14 +350,12 @@ date: 2021-12-30 18:31:34 height: 100px; border-radius: 50px; background:linear-gradient(#dcaec1, #d3a8e3); - z-index: 1; - position: absolute; + z-index: 1; position: absolute; } .ripple{ margin-top: 400px; margin-left: 40%; - position: absolute; - z-index: 0; + position: absolute; z-index: 0; width: 100px; height: 100px; border-radius: 50px; @@ -419,14 +421,15 @@ text{ } ``` -![](/images/application-dev/ui/figures/d3.gif) +![zh-cn_image_0000001220396251](/images/application-dev/ui/figures/zh-cn_image_0000001220396251.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->设置transform属性值后,子元素会跟着父元素一起改变,若只改变父元素其他属性值时(如:height,width),子元素不会改变。 +> 设置transform属性值后,子元素会跟着父元素一起改变,若只改变父元素其他属性值时(如:height,width),子元素不会改变。 + -## 设置matrix属性 +## 设置matrix属性 -matrix是一个入参为六个值的矩阵,6个值分别代表:scaleX, skewY, skewX, scaleY, translateX, translateY。下面示例中设置 了matrix属性为matrix\(1,0,0,1,0,200\)使组件移动和倾斜。 +matrix是一个入参为六个值的矩阵,6个值分别代表:scaleX, skewY, skewX, scaleY, translateX, translateY。下面示例中设置 了matrix属性为matrix(1,0,0,1,0,200)使组件移动和倾斜。 ``` @@ -464,9 +467,10 @@ matrix是一个入参为六个值的矩阵,6个值分别代表:scaleX, skewY } ``` -![](/images/application-dev/ui/figures/q3.gif) +![zh-cn_image_0000001174756580](/images/application-dev/ui/figures/zh-cn_image_0000001174756580.gif) + -## 整合transform属性 +## 整合transform属性 transform可以设置多个值并且多个值可同时设置,下面案例中展示同时设置缩放(scale),平移(translate),旋转(rotate)属性时的动画效果。 @@ -527,8 +531,7 @@ transform可以设置多个值并且多个值可同时设置,下面案例中 /* change1 change2 对比 */ @keyframes change1{ 0%{ - transform: translate(0,0); - transform: rotate(0deg) + transform: translate(0,0); transform: rotate(0deg) } 100%{ transform: translate(0,500px); @@ -572,10 +575,11 @@ transform可以设置多个值并且多个值可同时设置,下面案例中 } ``` -![](/images/application-dev/ui/figures/d4.gif) +![zh-cn_image_0000001220554911](/images/application-dev/ui/figures/zh-cn_image_0000001220554911.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->1. 当设置多个transform时,后续的transform值会把前面的覆盖掉。若想同时使用多个动画样式可用复合写法,例:transform: scale\(1\) rotate\(0\) translate\(0,0\)。 ->2. transform进行复合写法时,变化样式内多个样式值顺序的不同会呈现不一样的动画效果。 ->3. transform属性设置的样式值要一一对应,若前后不对应,则该动画不生效。若设置多个样式值则只会呈现出已对应值的动画效果。 - +> 1. 当设置多个transform时,后续的transform值会把前面的覆盖掉。若想同时使用多个动画样式可用复合写法,例:transform: scale(1) rotate(0) translate(0,0)。 +> +> 2. transform进行复合写法时,变化样式内多个样式值顺序的不同会呈现不一样的动画效果。 +> +> 3. transform属性设置的样式值要一一对应,若前后不对应,则该动画不生效。若设置多个样式值则只会呈现出已对应值的动画效果。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" similarity index 85% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" index a35ada30c75f4902d7a911eca6c377ee17a50064..8809985cd09687c03b1729076f42c741eeb90734 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/01.CSS\345\212\250\347\224\273/03.background-position\346\240\267\345\274\217\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: background-position样式动画 -permalink: /pages/00070100030002 +permalink: /pages/01080202050103 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- -# background-position样式动画 +# background-position样式动画 + + 通过改变background-position属性(第一个值为X轴的位置,第二个值为Y轴的位置)移动背景图片位置,若背景图位置超出组件则超出部分的背景图不显示。 + ```
@@ -23,6 +26,7 @@ date: 2021-12-30 18:31:35
``` + ``` /* xxx.css */ .container { @@ -87,8 +91,9 @@ date: 2021-12-30 18:31:35 } ``` -![](/images/application-dev/ui/figures/q8.gif) -> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->background-position仅支持背景图片的移动,不支持背景颜色(background-color)。 +![zh-cn_image_0000001217008255](/images/application-dev/ui/figures/zh-cn_image_0000001217008255.gif) + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> background-position仅支持背景图片的移动,不支持背景颜色(background-color)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" similarity index 82% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" index 0a264b6db7d32bd2da2e178edd6b8f62c4859107..0548368d7ea159ebac3d71a2db28266954bd42a0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/01.\347\273\204\344\273\266\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 组件动画 -permalink: /pages/00070100030100 +permalink: /pages/01080202050201 navbar: true sidebar: true prev: true @@ -9,13 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- -# 组件动画 +# 组件动画 -在组件上创建和运行动画的快捷方式。具体用法请参考[通用方法](/pages/000b0100010003)。 +在组件上创建和运行动画的快捷方式。具体用法请参考[通用方法](/pages/010c0201010104)。 -## 获取动画对象 + +## 获取动画对象 通过调用animate方法获得animation对象,animation对象支持动画属性、动画方法和动画事件。 @@ -70,13 +71,14 @@ export default { } ``` -![](/images/application-dev/ui/figures/1.gif) +![zh-cn_image_0000001175235138](/images/application-dev/ui/figures/zh-cn_image_0000001175235138.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >- 使用animate方法时必须传入Keyframes和Options参数。 >- 多次调用animate方法时,采用replace策略,即最后一次调用时传入的参数生效。 -## 设置动画参数 + +## 设置动画参数 在获取动画对象后,通过设置参数Keyframes设置动画在组件上的样式。 @@ -115,30 +117,7 @@ export default { this.options = { duration: 4000, }; - this.keyframes = [ - { - transform: { - translate: '-120px -0px', - scale: 1, - rotate: 0 - }, - transformOrigin: '100px 100px', - offset: 0.0, - width: 200, - height: 200 - }, - { - transform: { - translate: '120px 0px', - scale: 1.5, - rotate: 90 - }, - transformOrigin: '100px 100px', - offset: 1.0, - width: 300, - height: 300 - } - ]; + this.keyframes = [ { transform: { translate: '-120px -0px', scale: 1, rotate: 0 }, transformOrigin: '100px 100px', offset: 0.0, width: 200, height: 200 }, { transform: { translate: '120px 0px', scale: 1.5, rotate: 90 }, transformOrigin: '100px 100px', offset: 1.0, width: 300, height: 300 } ]; }, Show() { this.animation = this.$element('content').animate(this.keyframes, this.options); @@ -147,11 +126,12 @@ export default { } ``` -![](/images/application-dev/ui/figures/1-0.gif) +![zh-cn_image_0000001174916742](/images/application-dev/ui/figures/zh-cn_image_0000001174916742.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->- translate、scale和totate的先后顺序会影响动画效果。 ->- transformOrigin只对scale和totate起作用。 +> - translate、scale和rtotate的先后顺序会影响动画效果。 +> +> - transformOrigin只对scale和rtotate起作用。 在获取动画对象后,通过设置参数Options来设置动画的属性。 @@ -187,12 +167,12 @@ export default { onInit() { }, onShow() { - var options = { - duration: 1500, - easing: 'ease-in', - delay: 5, - iterations: 2, - direction: 'normal', + var options = { + duration: 1500, + easing: 'ease-in', + delay: 5, + iterations: 2, + direction: 'normal', }; var frames = [ { @@ -214,16 +194,21 @@ export default { } ``` -![](/images/application-dev/ui/figures/3.gif) +![zh-cn_image_0000001220396499](/images/application-dev/ui/figures/zh-cn_image_0000001220396499.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->direction:指定动画的播放模式。 ->normal: 动画正向循环播放。 ->reverse: 动画反向循环播放。 ->alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放。 ->alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。 +> direction:指定动画的播放模式。 +> +> normal: 动画正向循环播放。 +> +> reverse: 动画反向循环播放。 +> +> alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放。 +> +> alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。 -## 添加事件和调用方法 + +## 添加事件和调用方法 animation对象支持动画事件和动画方法。可以通过添加开始和取消事件,调用播放、暂停、倒放和结束方法实现预期动画。 @@ -349,7 +334,7 @@ export default { } ``` -![](/images/application-dev/ui/figures/111-1.gif) +![zh-cn_image_0000001220635011](/images/application-dev/ui/figures/zh-cn_image_0000001220635011.gif) 通过改变playStat的属性实现动画状态的改变。 @@ -476,5 +461,4 @@ export default { } ``` -![](/images/application-dev/ui/figures/1111.gif) - +![zh-cn_image_0000001175075286](/images/application-dev/ui/figures/zh-cn_image_0000001175075286.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" similarity index 87% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" index 0664fef87e8ae951a181a1147275510f1d7de79d..6e41326d0179a0683af44590a81f7ae4c3bc691a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/01.\345\212\250\347\224\273\345\212\250\346\225\210.md" @@ -1,6 +1,6 @@ --- title: 动画动效 -permalink: /pages/0007010003010100 +permalink: /pages/0108020205020201 navbar: true sidebar: true prev: true @@ -9,16 +9,18 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- -# 动画动效 +# 动画动效 -通过设置插值器来实现动画效果。具体用法请参考[动画](/pages/000b000807)。 + +通过设置插值器来实现动画效果。具体用法请参考[动画](/pages/010c010b08)。 > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->从API Version 6 开始支持。 +> 从API Version 6 开始支持。 + -## 创建动画对象 +## 创建动画对象 通过createAnimator创建一个动画对象,通过设置参数options来设置动画的属性。 @@ -85,16 +87,19 @@ export default { } ``` -![](/images/application-dev/ui/figures/22.gif) +![zh-cn_image_0000001174756776](/images/application-dev/ui/figures/zh-cn_image_0000001174756776.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->- 使用createAnimator创建动画对象时必须传入options参数。 ->- begin插值起点,不设置时默认为0。 ->- end插值终点,不设置时默认为1。 +> - 使用createAnimator创建动画对象时必须传入options参数。 +> +> - begin插值起点,不设置时默认为0。 +> +> - end插值终点,不设置时默认为1。 -## 添加动画事件和调用接口 -animator支持事件和接口,可以通过添加frame、cancel、repeat、finish事件和调用update、play、pause、cancel、reverse、finish接口自定义动画效果。animator支持的事件和接口具体见animator支持的事件和animator支持的接口。 +## 添加动画事件和调用接口 + +animator支持事件和接口,可以通过添加frame、cancel、repeat、finish事件和调用update、play、pause、cancel、reverse、finish接口自定义动画效果。animator支持的事件和接口具体见[动画中的createAnimator](/pages/010c010b08)。 ``` @@ -243,8 +248,7 @@ export default { } ``` -![](/images/application-dev/ui/figures/1-2.gif) +![zh-cn_image_0000001220635059](/images/application-dev/ui/figures/zh-cn_image_0000001220635059.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->在调用update接口的过程中可以使用这个接口更新动画参数,入参与createAnimator一致。 - +> 在调用update接口的过程中可以使用这个接口更新动画参数,入参与createAnimator一致。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" similarity index 89% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" index 81ba324b68e260e1a4e53e014b399e81129be644..6325188c56d1faecc530e6ca5d9db21d16a3bf29 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\212\250\346\225\210\345\274\200\345\217\221\346\214\207\345\257\274/02.JS\345\212\250\347\224\273/02.\346\217\222\345\200\274\345\231\250\345\212\250\347\224\273/02.\345\212\250\347\224\273\345\270\247.md" @@ -1,6 +1,6 @@ --- title: 动画帧 -permalink: /pages/0007010003010101 +permalink: /pages/0108020205020202 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- -# 动画帧 +# 动画帧 -## 请求动画帧 +## 请求动画帧 请求动画帧时通过requestAnimationFrame函数逐帧回调,在调用该函数时传入一个回调函数。 @@ -106,12 +106,13 @@ export default { } ``` -![](/images/application-dev/ui/figures/3333.gif) +![zh-cn_image_0000001174756860](/images/application-dev/ui/figures/zh-cn_image_0000001174756860.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->requestAnimationFrame函数在调用回调函数时在第一个参数位置传入timestamp时间戳,表示requestAnimationFrame开始去执行回调函数的时刻。 +> requestAnimationFrame函数在调用回调函数时在第一个参数位置传入timestamp时间戳,表示requestAnimationFrame开始去执行回调函数的时刻。 -## 取消动画帧 + +## 取消动画帧 通过cancelAnimationFrame函数取消逐帧回调,在调用cancelAnimationFrame函数时取消requestAnimationFrame函数的请求。 @@ -194,8 +195,7 @@ export default { } ``` -![](/images/application-dev/ui/figures/4444.gif) +![zh-cn_image_0000001220316655](/images/application-dev/ui/figures/zh-cn_image_0000001220316655.gif) > ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** ->在调用该函数时需传入一个具有标识id的参数。 - +> 在调用该函数时需传入一个具有标识id的参数。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/06.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/06.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" index 659c4fddbe3fb05734b6448552aaa00f65997c7c..3310f991072c57d6112ca989f75f6a7dbea26e61 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/05.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/06.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 自定义组件 -permalink: /pages/0007010004 +permalink: /pages/0108020206 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 自定义组件 @@ -36,7 +36,7 @@ date: 2021-12-30 18:31:35 margin-top: 100px; } .text-style { - width: 100%; + width: 100%; text-align: center; font-weight: 500; font-family: Courier; @@ -96,7 +96,7 @@ date: 2021-12-30 18:31:35 export default { data: { text: '开始', - isShow: false, + isShow: false, }, textClicked (e) { this.text = e.detail.text; @@ -105,7 +105,7 @@ date: 2021-12-30 18:31:35 ``` -本示例中父组件通过添加自定义属性向子组件传递了名称为title的参数,子组件在props中接收。同时子组件也通过事件绑定向上传递了参数text,接收时通过e.detail获取。要绑定子组件事件,父组件事件命名必须遵循事件绑定规则,详见[自定义组件开发规范](/pages/000b01000200)。自定义组件效果如下图所示: +本示例中父组件通过添加自定义属性向子组件传递了名称为title的参数,子组件在props中接收。同时子组件也通过事件绑定向上传递了参数text,接收时通过e.detail获取。要绑定子组件事件,父组件事件命名必须遵循事件绑定规则,详见[自定义组件开发规范](/pages/010c02010201)。自定义组件效果如下图所示: **图1** 自定义组件的效果 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" index ec8de2b2c587eb3f2e3744cd274a3634d70b40d7..4138fc1b7aeed13c3b01952014656a691d6094fd 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/0007010100 +permalink: /pages/0108020301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 概述 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..38216308d90c847dce40f01a71d0455bd03ad9ec --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" @@ -0,0 +1,42 @@ +--- +title: 目录结构 +permalink: /pages/01080203020101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 目录结构 + + + +FA应用的eTS模块(entry/src/main)的典型开发目录结构如下: + + +![zh-cn_image_0000001182200571](/images/application-dev/ui/figures/zh-cn_image_0000001182200571.png) + + +**目录结构中文件分类如下:** + + +- .ets结尾的eTS(extended TypeScript)文件,这个文件用于描述UI布局、样式、事件交互和页面逻辑。 + + +**各个文件夹和文件的作用:** + + +- **app.ets**文件用于全局应用逻辑和应用生命周期管理。 + +- **pages**目录用于存放所有组件页面。 + +- **common**目录用于存放公共代码文件,比如:自定义组件和公共方法。 + + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> +> - 页面支持导入TypeScript和JavaScript文件。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" similarity index 74% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" index 1e2cd499a96b9eb83494f9af4801a983abdb89f9..b62824d6be843388eeb0e24fd74ecd667107387e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/02.\345\272\224\347\224\250\344\273\243\347\240\201\346\226\207\344\273\266\350\256\277\351\227\256\350\247\204\345\210\231.md" @@ -1,6 +1,6 @@ --- title: 应用代码文件访问规则 -permalink: /pages/000b0101000001 +permalink: /pages/01080203020102 navbar: true sidebar: true prev: true @@ -9,17 +9,21 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 应用代码文件访问规则 +# 应用代码文件访问规则 应用代码文件可通过如下方式访问: -- 使用相对路径引用代码文件,比如:上一级目录:../common/utils/utils.ets,当前目录:./common/utils/utils.ets。 -- 使用当前模块根路径引用代码文件,比如:common/utils/utils.ets。 -- 公共代码文件推荐放在**common**目录下。 -## 示例 +- 使用相对路径引用代码文件,比如:上一级目录:../common/utils/utils.ets,当前目录:./common/utils/utils.ets。 + +- 使用当前模块根路径引用代码文件,比如:common/utils/utils.ets。 + +- 公共代码文件推荐放在**common**目录下。 + + +## 示例 ``` import { FoodData, FoodList } from "../common/utils/utils.ets"; @@ -77,4 +81,3 @@ export struct FoodList { } } ``` - diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..8943266834907d4ff690c9f666b1dd414a9b1636 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" @@ -0,0 +1,114 @@ +--- +title: js标签配置 +permalink: /pages/010802030202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# js标签配置 + +开发框架需要应用的config.json中配置相关的js标签,其中包含了实例名称、页面路由、视图窗口配置信息。 + + +| 标签 | 类型 | 默认值 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | -------- | +| name | string | default | 是 | 标识ETS实例的名字。 | +| pages | Array | - | 是 | 页面路由信息,详见[pages](#pages)说明。 | +| window | Object | - | 否 | 视图窗口配置信息,详见[window](#window)说明。 | +| mode | Object | - | 否 | 配置Js Component运行类型与语法风格,详见[mode](#mode)说明。 | + + +## pages + +定义每个页面入口组件的路由信息,每个页面由页面路径和页面名组成,页面的文件名就是页面名。比如: + +``` +{ + "pages": [ + "pages/index", + "pages/detail" + ] +} +``` + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> - pages列表中第一个页面为应用的首页入口。 +> +> - 页面文件名不能使用组件名称,比如:Text.ets、Button.ets等。 +> +> - 每个页面文件中必须包含[页面入口组件](/pages/0108020303020302)(\@Entry装饰)。 + + +## window + +window用于配置相关视图显示窗口,支持配置如下属性: + +| 类型 | 默认值 | 说明 | +| -------- | -------- | -------- | +| designWidth | - | 配置视图显示的逻辑宽度,缺省默认720(智能穿戴默认454)。视图显示的逻辑宽度决定了lpx像素单位大小,如designWidth配置720时,在视图宽度为1440物理像素时,1lpx为2物理像素。详见[lpx像素单位](/pages/010802030204)说明。 | + +``` +{ + ... + "window": { + "designWidth": 720 + } + ... +} +``` + + +## mode + +mode用于配置JS Component的运行类型与语法风格,支持如下属性: + +| 类型 | 默认值 | 说明 | +| -------- | -------- | -------- | +| type | - | 配置该JS Component的运行类型,可选值为:
- pageAbility:以ability的方式运行该JS Component。
- form:以卡片的方式运行该JS Component。 | +| syntax | - | 配置该JS Component的语法风格,可选值为:
- hml:以hml/css/js风格进行编写。
- ets:以声明式语法风格进行编写。 | + +> ![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +> 不支持同时配置type类型为form,syntax类型为ets。 + + +## 示例 + +config.json: + +``` +{ + "app": { + "bundleName": "com.example.player", + "version": { + "code": 1, + "name": "1.0" + }, + "vendor": "example" + }, + "module": { + "js": [{ + "name": "default", + "pages": [ + "pages/index", + "pages/detail" + ], + "window": { + "designWidth": 720 + }, + "mode": { + "type": "pageAbility", + "syntax": "ets" + }, + }], + "abilities": [{ + ... + }] + } +} +``` diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" new file mode 100644 index 0000000000000000000000000000000000000000..7fbc8ad6bea6f6b2d7bf2353d5548417f992fe7a --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" @@ -0,0 +1,26 @@ +--- +title: 媒体资源类型说明 +permalink: /pages/01080203020301 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 媒体资源类型说明 + + + +- 开发框架支持的图片资源类型说明 + | 格式 | 文件后缀名 | + | -------- | -------- | + | JPEG | .jpg | + | PNG | .png | + | GIF | .gif | + | SVG | .svg | + | WEBP | .webp | + | BMP | .bmp | diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..694844a9131c3aab951d803c529d10ddacca43b9 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" @@ -0,0 +1,86 @@ +--- +title: 像素单位 +permalink: /pages/010802030204 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 像素单位 + +为开发者提供4种像素单位,框架采用vp为基准数据单位。 + + +| 名称 | 描述 | +| -------- | -------- | +| px | 屏幕物理像素单位。 | +| vp | 屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素。 | +| fp | 字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。 | +| lpx | 视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过[designWidth](/pages/010802030202)配置)的比值。如配置designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。 | + + +## 像素单位转换 + +提供其他单位与px单位互相转换的方法。 + +| 接口 | 描述 | +| -------- | -------- | +| vp2px(value : number) : number | 将vp单位的数值转换为以px为单位的数值。 | +| px2vp(value : number) : number | 将px单位的数值转换为以vp为单位的数值。 | +| fp2px(value : number) : number | 将fp单位的数值转换为以px为单位的数值。 | +| px2fp(value : number) : number | 将px单位的数值转换为以fp为单位的数值。 | +| lpx2px(value : number) : number | 将lpx单位的数值转换为以px为单位的数值。 | +| px2lpx(value : number) : number | 将px单位的数值转换为以lpx为单位的数值。 | + + +## 示例 + +``` +@Entry +@Component +struct Example { + build() { + Column() { + Flex({ wrap: FlexWrap.Wrap }) { + Column() { + Text("width(220)") + .width(220).height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') + }.margin(5) + Column() { + Text("width('220px')") + .width('220px').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White) + }.margin(5) + Column() { + Text("width('220vp')") + .width('220vp').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') + }.margin(5) + Column() { + Text("width('220lpx') designWidth:720") + .width('220lpx').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') + }.margin(5) + Column() { + Text("width(vp2px(220) + 'px')") + .width(vp2px(220) + 'px').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') + }.margin(5) + Column() { + Text("fontSize('12fp')") + .width(220).height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12fp') + }.margin(5) + }.width('100%') + } + } +} +``` + +![zh-cn_image_0000001169582302](/images/application-dev/ui/figures/zh-cn_image_0000001169582302.gif) diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..feae2bc4eac6fb46dd8a89b38be8cf7853f7d759 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" @@ -0,0 +1,151 @@ +--- +title: 类型定义 +permalink: /pages/010802030205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 类型定义 + +## 长度类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| Length | string \| number | 用于描述尺寸单位,输入为number类型时,使用vp单位;输入为string类型时,需要显式指定像素单位,如'10px',也可设置百分比字符串,如'100%'。 | + + +## 角度类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| Angle | string \| number | 用于角度单位,输入为number类型时,使用deg单位;输入为string类型时需要显示指定角度单位,支持以下两种角度单位:
- deg:如'100deg'。
- rad:如'3.14rad'。 | + + +## 点类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| Point | [Length, Length] | 用于描述点坐标,第一个值为x轴坐标,第二个值为y坐标。 | + + +## 颜色类型 + +组件属性方法使用的颜色Color说明如下: + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| Color | string \| number \| Color | 用于描述颜色信息,输入为string类型时,使用rgb或者rgba进行描述;输入为number类型是,使用HEX格式颜色;输入类型为Color枚举时,使用颜色枚举值。
- 'rgb(255, 255, 255)'。
- 'rgba(255, 255, 255, 1.0)'。
- HEX格式:0xrrggbb,0xaarrggbb,'\#FFFFFF'。
- 枚举格式:Color.Black,Color.White等。 | + + +当前支持的Color颜色枚举: + + +| 颜色名称 | 颜色值 | 颜色示意 | +| -------- | -------- | -------- | +| Black | 0x000000 | ![zh-cn_image_0000001111680230](/images/application-dev/ui/figures/zh-cn_image_0000001111680230.png) | +| Blue | 0x0000ff | ![zh-cn_image_0000001158240091](/images/application-dev/ui/figures/zh-cn_image_0000001158240091.png) | +| Brown | 0xa52a2a | ![zh-cn_image_0000001158360079](/images/application-dev/ui/figures/zh-cn_image_0000001158360079.png) | +| Gray | 0x808080 | ![zh-cn_image_0000001111840132](/images/application-dev/ui/figures/zh-cn_image_0000001111840132.png) | +| Green | 0x008000 | ![zh-cn_image_0000001111680236](/images/application-dev/ui/figures/zh-cn_image_0000001111680236.png) | +| Orange | 0xffa500 | ![zh-cn_image_0000001158240095](/images/application-dev/ui/figures/zh-cn_image_0000001158240095.png) | +| Pink | 0xffc0cb | ![zh-cn_image_0000001158360085](/images/application-dev/ui/figures/zh-cn_image_0000001158360085.png) | +| Red | 0xff0000 | ![zh-cn_image_0000001111840136](/images/application-dev/ui/figures/zh-cn_image_0000001111840136.png) | +| White | 0xffffff | ![zh-cn_image_0000001111680240](/images/application-dev/ui/figures/zh-cn_image_0000001111680240.png) | +| Yellow | 0xffff00 | ![zh-cn_image_0000001158240097](/images/application-dev/ui/figures/zh-cn_image_0000001158240097.png) | + + +## ColorStop类型 + +颜色断点类型,用于描述渐进色颜色断点。 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| ColorStop | [Color, number] | 描述渐进色颜色断点类型,第一个参数为颜色值,第二个参数为0~1之间的比例值。 | + + +## ResourceStr类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| ResourceStr | string \| Resource | 用于描述资源字符串的类型。 | + + +## ResourceColor类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| ResourceColor | Color \| number \| string \| Resource | 用于描述资源颜色类型。 | + + +## Font类型 + +| 名称 | 类型定义 | 描述 | +| -------- | -------- | -------- | +| Font | {
size?: Length;
weight?: FontWeight  \| number  \| string;
family?: string  \| Resource;
style?: FontStyle;
} | 设置文本样式:
  • size: 设置文本尺寸,Length为number类型时,使用fp单位。
  • weight: 设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。
  • family: 设置文本的字体列表。使用多个字体,使用','进行分割,优先级按顺序生效。例如:'Arial, sans-serif'。
  • style: 设置文本的字体样式。
| + + +## 示例 + +``` +@Entry +@Component +struct dataTypeExample { + build() { + Column({ space: 5 }) { + Text('Length').fontColor(0xCCCCCC).fontSize(9).width('90%') + Text('90%').width('90%').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White) + Text('320').width(320).height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White) + Text('1000px').width('1000px').height(40).backgroundColor(0xF9CF93) + .textAlign(TextAlign.Center).fontColor(Color.White) + + Text('Angle').fontColor(0xCCCCCC).fontSize(9).width('90%') + Text('45deg') + .width(40).height(40) + .rotate({ x: 0, y: 0, z: 1, angle: 45, centerX: '50%', centerY: '50%' }) + .fontColor(Color.White) + .backgroundColor(0xF9CF93).textAlign(TextAlign.Center) + + Text('45rad') + .width(40).height(40) + .rotate({ x: 0, y: 0, z: 1, angle: '45rad', centerX: '50%', centerY: '50%' }) + .fontColor(Color.White) + .backgroundColor(0xF9CF93).textAlign(TextAlign.Center).margin({ top: 30 }) + + Text('Point').fontColor(0xCCCCCC).fontSize(9).width('90%') + Line().width(300).height(40).startPoint([0, 20]).endPoint([300, 20]) + + Text('Color').fontColor('#CCCCCC').fontSize(9).width('90%') + Text('0xF9CF93') + .fontColor(Color.White).textAlign(TextAlign.Center) + .width('90%').height(40).backgroundColor(0xF9CF93) + + Text('#F9CF93') + .fontColor(Color.White).textAlign(TextAlign.Center) + .width('90%').height(40).backgroundColor('#F9CF93') + + Text('rgb(249, 207, 147)') + .fontColor(Color.White).textAlign(TextAlign.Center) + .width('90%').height(40).backgroundColor('rgb(249, 207, 147)') + + Text('rgba(249, 207, 147, 1.0)') + .fontColor(Color.White).textAlign(TextAlign.Center) + .width('90%').height(40).backgroundColor('rgba(249, 207, 147, 1.0)') + + Text('Color.Yellow') + .textAlign(TextAlign.Center) + .width('90%').height(40).backgroundColor(Color.Yellow) + } + .width('100%').margin({ top: 5 }) + } +} +``` + +![zh-cn_image_0000001214437889](/images/application-dev/ui/figures/zh-cn_image_0000001214437889.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" index b3dec2776645c75f14d41a9c9ee31eedda707f0b..b2fbeed94ba39b80d0eb78e69100d6e5eeaeedab 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/01.\346\217\217\350\277\260\350\247\204\350\214\203\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 描述规范使用说明 -permalink: /pages/000b01010100 +permalink: /pages/010802030301 navbar: true sidebar: true prev: true @@ -9,15 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 描述规范使用说明 本节定义了基于TS扩展的声明式开发范式的核心机制和功能。讲述了声明式UI描述、组件化机制、UI状态管理、渲染控制语法和语法糖。 -本节为应用开发人员开发UI提供了参考规范。有关组件的详细信息,请参考[组件说明](/pages/000b010102000000)。 +本节为应用开发人员开发UI提供了参考规范。有关组件的详细信息,请参考[组件说明](/pages/extra/cc3a5f/)。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>**说明:** +> >- 所有示例都以TypeScript \(TS\)语言为例,请遵循相应语言的语法要求。 >- 示例中的**Image**、**Button**、**Text**、**Divider**、**Row**和**Column**等组件是UI框架中预置的组件控件,仅用于解释UI描述规范。 >- 通用属性方法和事件方法通常支持所有组件,而组件内的属性方法和事件方法仅对当前组件有效。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 79% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index bcd26ee380449801aaa487e9103ca1858b8de8a3..2d0891b26c018508173e76f0c2ca5952ee8e5394 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/000b0101010100 +permalink: /pages/01080203030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 基本概念 @@ -47,10 +47,10 @@ struct Hello { 上述示例代码描述了简单页面的结构,并介绍了以下基本概念: -- **装饰器:**装饰类、结构、方法和变量,并为它们赋予特殊含义。例如,上例中的**@Entry**、**@Component**和**@State**都是装饰器; +- **装饰器:**方舟开发框架定义了一些具有特殊含义的装饰器,用于装饰类、结构、方法和变量。例如,上例中的**@Entry**、**@Component**和**@State**都是装饰器; - **自定义组件:**可重用的UI单元,可以与其他组件组合,如**@Component**装饰的**struct Hello**; - **UI描述:**声明性描述UI结构,例如**build\(\)**方法中的代码块; - **内置组件:**框架中默认内置的基本组件和布局组件,开发者可以直接调用,如**Column**、**Text**、**Divider**、**Button**等; - **属性方法:**用于配置组件属性,如**fontSize\(\)**、**width\(\)**、**height\(\)**、**color\(\)**等; -- **事件方法:**用于将组件响应逻辑添加到事件中。逻辑是通过事件方法设置的。例如,按钮后面的**onClick\(\)**。 +- **事件方法:**在事件方法的回调中添加组件响应逻辑。例如,为Button组件添加onClick方法,在onClick方法的回调中添加点击响应逻辑。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" similarity index 70% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" index 63c249a799af3d056f2f2c89e1a4b29defdb53b3..695c3879129b38a1b635f540b25a57be7234d964 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/01.\346\227\240\346\236\204\351\200\240\345\217\202\346\225\260\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 无构造参数配置 -permalink: /pages/000b010101010100 +permalink: /pages/0108020303020201 navbar: true sidebar: true prev: true @@ -9,13 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 无构造参数配置 -组件的接口定义不包含必选构造参数,组件后面的“**\(\)**”中不需要配置任何内容。 - -例如,以下**Divider**组件不包含构造参数: +组件的接口定义不包含必选构造参数,组件后面的“**\(\)**”中不需要配置任何内容。例如,**Divider**组件不包含构造参数: ``` Column() { diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" similarity index 65% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" index 42dc9c275a853e3a87dd0d75dd4f70bb470faea6..cd089ea124de582ca52bafc3b078af3c908e4ffe 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\277\205\351\200\211\345\217\202\346\225\260\346\236\204\351\200\240\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 必选参数构造配置 -permalink: /pages/000b010101010101 +permalink: /pages/0108020303020202 navbar: true sidebar: true prev: true @@ -9,29 +9,29 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 必选参数构造配置 -如果组件的接口定义中包含必选构造参数,则在组件后面的“**\(\)**”中必须配置参数。参数可以使用常量进行赋值。 +如果组件的接口定义中包含必选构造参数,则在组件后面的“**\(\)**”中必须配置参数,参数可以使用常量进行赋值。 例如: -**Image**组件的必选参数**src**: +- **Image**组件的必选参数**src**: -``` -Image('http://xyz/a.jpg') -``` + ``` + Image('http://xyz/a.jpg') + ``` -**Text**组件的必选参数**content**: -``` -Text('123') -``` +- **Text**组件的必选参数**content**: + + ``` + Text('123') + ``` -变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。 -传递变量或表达式来构造**Image**和**Text**组件的参数示例如下: +变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。例如,传递变量或表达式来构造**Image**和**Text**组件的参数: ``` // imagePath, where imageUrl is a private data variable defined in the component. diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..4e04fc2d7b5d39ca6427479bce7aad007da46b4d --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" @@ -0,0 +1,57 @@ +--- +title: 属性配置 +permalink: /pages/0108020303020203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 属性配置 + +使用属性方法配置组件的属性,属性方法紧随组件,并用“**.**”运算符连接。 + +- 配置**Text**组件的字体大小属性: + + ``` + Text('123') + .fontSize(12) + ``` + + +- 使用“**.**”操作进行链式调用并同时配置组件的多个属性,如下所示: + + ``` + Image('a.jpg') + .alt('error.jpg') + .width(100) + .height(100) + ``` + + +- 除了直接传递常量参数外,还可以传递变量或表达式,如下所示: + + ``` + // Size, count, and offset are private variables defined in the component. + Text('hello') + .fontSize(this.size) + Image('a.jpg') + .width(this.count % 2 === 0 ? 100 : 200) + .height(this.offset + 100) + ``` + + +- 对于内置组件,框架还为其属性预定义了一些枚举类型,供开发人员调用,枚举值可以作为参数传递。枚举类型必须满足参数类型要求,有关特定属性的枚举类型定义的详细信息。可以按以下方式配置**Text**组件的颜色和字重属性: + + ``` + Text('hello') + .fontSize(20) + .fontColor(Color.Red) + .fontWeight(FontWeight.Bold) + ``` + + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" index c33682bd19df1bb5fabbb817b40582af58165766..cb79bb45f99a71a2d147466e08f81026c0b14e7e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/04.\344\272\213\344\273\266\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 事件配置 -permalink: /pages/000b010101010103 +permalink: /pages/0108020303020204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 事件配置 @@ -26,9 +26,7 @@ date: 2021-12-30 18:31:39 ``` -- 使用匿名函数表达式配置组件的事件方法: - - 此时要求我们使用**bind**,以确保函数体中的this引用包含的组件。 +- 使用匿名函数表达式配置组件的事件方法,要求使用**bind**,以确保函数体中的this引用包含的组件。 ``` // Counter is a private data variable defined in the component. diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" index bc70412e55d4718bec3d922cabb56f1e2ed7afa2..02f32071d21fcbeb2680efc55c2702b0a9c99f99 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/05.\345\255\220\347\273\204\344\273\266\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 子组件配置 -permalink: /pages/000b010101010104 +permalink: /pages/0108020303020205 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 子组件配置 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" similarity index 54% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" index afcd5c804f34ef4a218233ec88f86167f34b80ad..26a5b7e5b40a2134d1dee99b08b4968b8c534755 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/01.Component.md" @@ -1,6 +1,6 @@ --- title: Component -permalink: /pages/000b010101010200 +permalink: /pages/0108020303020301 navbar: true sidebar: true prev: true @@ -9,32 +9,22 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Component -**@Component**装饰的**struct**表示该结构体具有组件化能力,能够成为一个独立的组件,这种类型的组件也称为自定义组件。 +**@Component**装饰的**struct**表示该结构体具有组件化能力,能够成为一个独立的组件,这种类型的组件也称为自定义组件,在**build**方法里描述UI结构。自定义组件具有以下特点: -该组件可以组合其他组件,它通过实现**build**方法来描述UI结构,其必须符合**Builder**的接口约束,该接口定义如下: +- **可组合:**允许开发人员组合使用内置组件、其他组件、公共属性和方法; +- **可重用:**自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用; +- **生命周期:**生命周期的回调方法可以在组件中配置,用于业务逻辑处理; +- **数据驱动更新:**由状态变量的数据驱动,实现UI自动更新。 -``` -interface Builder { - build: () => void -} -``` - -用户定义的组件具有以下特点: - -- **可组合:**允许开发人员组合使用内置组件和其他组件,以及公共属性和方法; -- **可重用:**可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用; -- **有生命周期:**生命周期的回调方法可以在组件中配置,用于业务逻辑处理; -- **数据驱动更新:**可以由状态数据驱动,实现UI自动更新。 - -组件生命周期主要包括**aboutToAppear**和**aboutToDisappear**回调函数,有关规范,请参见“[组件生命周期回调函数](/pages/000b0101010402)”章节。 +对组件化的深入描述,请参考[深入理解组件化](/pages/extra/409af4/)。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 组件必须遵循上述**Builder**接口约束,其他组件在内部的**build**方法中以声明式方式进行组合,在组件的第一次创建和更新场景中都会调用**build**方法。 ->- 组件禁止自定义构造函数。 +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +>- 自定义组件必须定义build方法。 +>- 自定义组件禁止自定义构造函数。 ## 示例 @@ -69,7 +59,7 @@ struct ParentComponent { } ``` -可以多次嵌入**MyComponent**,并嵌入到不同的组件中进行重用: +可以多次使用**MyComponent**,并在不同的组件中进行重用: ``` @Component diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" similarity index 85% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" index 5de87b4816575665c96ebf2408999410cf2b2783..8f0724149b5ed985035a4fa3a56316e3341bfd60 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/02.Entry.md" @@ -1,6 +1,6 @@ --- title: Entry -permalink: /pages/000b010101010201 +permalink: /pages/0108020303020302 navbar: true sidebar: true prev: true @@ -9,13 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Entry 用**@Entry**装饰的自定义组件用作页面的默认入口组件,加载页面时,将首先创建并呈现**@Entry**装饰的自定义组件。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >在单个源文件中,最多可以使用**@Entry**装饰一个自定义组件。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" index 07b5452a7a4abb1ee3cd14c774d7f9c630aa08df..cfacbaa4b44da0ca84aeb4e0d2887aee424f652a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/03.Preview.md" @@ -1,6 +1,6 @@ --- title: Preview -permalink: /pages/000b010101010202 +permalink: /pages/0108020303020303 navbar: true sidebar: true prev: true @@ -9,13 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Preview -用**@Preview**装饰的自定义组件可以在DevEco的PC预览上进行单组件预览,加载页面时,将创建并呈现**@Preview**装饰的自定义组件。 +用**@Preview**装饰的自定义组件可以在DevEco Studio的预览器上进行预览,加载页面时,将创建并呈现**@Preview**装饰的自定义组件。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >在单个源文件中,最多可以使用**@Preview**装饰一个自定义组件。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" similarity index 68% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" index 7e5fee39e963d692a48d133c746e7c15770bd84f..684703455ba829d2c3b5d4cb297c01611f041836 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/04.Builder.md" @@ -1,6 +1,6 @@ --- title: Builder -permalink: /pages/000b010101010203 +permalink: /pages/0108020303020304 navbar: true sidebar: true prev: true @@ -9,13 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Builder -@Builder装饰器定义了一个如何渲染自定义组件的方法。此装饰器提供了一个修饰方法,其目的是和[build函数](/pages/000b0101010400)一致。@Builder装饰器装饰的方法的语法规范与build函数也保持一致。 - -通过@Builder装饰器可以在一个自定义组件内快速生成多个布局内容。 +@Builder装饰的方法用于定义组件的声明式UI描述,在一个自定义组件内快速生成多个布局内容。@Builder装饰方法的功能和语法规范与[build函数](/pages/01080203030501)相同。 ``` @Entry diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" similarity index 67% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" index 7543071b3ec3c1387e6023b0d0f238f9055d66a7..c0e368e88aee1a278b7a079ef7a26b3b17a74154 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/05.Extend.md" @@ -1,6 +1,6 @@ --- title: Extend -permalink: /pages/000b010101010204 +permalink: /pages/0108020303020305 navbar: true sidebar: true prev: true @@ -9,16 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Extend **@Extend**装饰器将新的属性函数添加到内置组件上,如**Text**、**Column**、**Button**等。通过**@Extend**装饰器可以快速定义并复用组件的自定义样式。 ``` -@Extend(Text) function fancy(color: number) { - .fontColor(color) - .fontSize(24) +@Extend(Text) function fancy(fontSize: number) { + .fontColor(Color.Red) + .fontSize(fontSize) .fontStyle(FontStyle.Italic) } @@ -28,14 +28,14 @@ struct FancyUse { build() { Row({ space: 10 }) { Text("Fancy") - .fancy(Color.Blue) + .fancy(16) Text("Fancy") - .fancy(Color.Red) + .fancy(24) } } } ``` ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >@Extend装饰器不能用在自定义组件struct定义框内。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" index 73aa95e0a650866c15c29c58779918cac57115c5..eafcc542afeb7dec435bdf3bb5f64166cc1bf058 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\347\273\204\344\273\266\345\214\226/06.CustomDialog.md" @@ -1,6 +1,6 @@ --- title: CustomDialog -permalink: /pages/000b010101010205 +permalink: /pages/0108020303020306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @CustomDialog diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 21e3b95f3d35abe9ebe1b039187b765fae70945d..91185834b8ee56631710451f769c43a637bc0569 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/000b0101010200 +permalink: /pages/01080203030301 navbar: true sidebar: true prev: true @@ -9,27 +9,25 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 基本概念 -在声明式UI编程范式中,UI是应用程序状态的函数,开发人员通过修改当前应用程序状态来更新相应的UI界面。 +在声明式UI编程范式中,UI是应用程序状态的函数,开发人员通过修改当前应用程序状态来更新相应的UI界面。开发框架提供了多种应用程序状态管理的能力。 -开发框架提供了多种应用程序状态管理的能力。 - -![](/images/application-dev/reference/arkui-ts/figures/CoreSpec_/images/application-dev/reference/arkui-ts/figures_state-mgmt-overview.png) +![](/images/application-dev/ui/figures/CoreSpec_/images/application-dev/ui/figures_state-mgmt-overview.png) ## 状态变量装饰器 -- **@State:**组件拥有的状态属性。每当**@State**装饰的变量更改时,组件会重新渲染更新UI。 -- **@Link:**组件依赖于其父组件拥有的某些状态属性。每当任何一个组件中的数据更新时,另一个组件的状态都会更新,父子组件都会进行重新渲染。 -- **@Prop:**工作原理类似**@Link**,只是子组件所做的更改不会同步到父组件上,属于单向传递。 +- **@State:**组件拥有的状态属性,当**@State**装饰的变量更改时,组件会重新渲染更新UI。 +- **@Link:**组件依赖于其父组件拥有的某些状态属性,当任何一个组件中的数据更新时,另一个组件的状态都会更新,父子组件重新渲染。 +- **@Prop:**原理类似**@Link**,但是子组件所做的更改不会同步到父组件上,属于单向传递。 ## 应用程序状态数据 -**AppStorage**是整个UI中使用的应用程序状态的中心“数据库”,UI框架会针对应用程序创建单例**AppStorage**对象,并提供相应的装饰器和接口供应用程序使用。 +**AppStorage**是整个UI应用程序状态的中心“数据库”,UI框架会针对应用程序创建单例**AppStorage**对象,并提供相应的装饰器和接口供应用程序使用。 -- **@StorageLink:@StorageLink\(name\)**的工作原理类似于**@Consume\(name\)**,不同的是,该给定名称的链接对象是从**AppStorage**中获得的,它在**UI组件**和**AppStorage**之间建立双向绑定同步数据。 -- **@StorageProp:@StorageProp\(name\)**将UI组件属性与**AppStorage**进行单向同步。**AppStorage**中的值更改会更新组件中的属性,但UI组件无法更改**AppStorage**中的属性值。 -- **AppStorage**还提供用于业务逻辑实现的API,用于添加、读取、修改和删除应用程序的状态属性,通过此API所做的更改会导致修改的状态数据同步到UI组件上进行UI更新。 +- **@StorageLink:@StorageLink\(name\)**的原理类似于**@Consume\(name\)**,不同的是,该给定名称的链接对象是从**AppStorage**中获得的,在**UI组件**和**AppStorage**之间建立双向绑定同步数据。 +- **@StorageProp:@StorageProp\(name\)**将UI组件属性与**AppStorage**进行单向同步,**AppStorage**中值的更改会更新组件中的属性,但UI组件无法更改**AppStorage**中的属性值。 +- **AppStorage**还提供用于业务逻辑实现的API,用于添加、读取、修改和删除应用程序的状态属性,此API所做的更改会导致修改的状态数据同步到UI组件上进行UI更新。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" similarity index 81% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" index 280b4c1d08814466673ac63c9003e7cda1218458..86e940568746228974be2b61cd09869eb1a39389 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/01.State.md" @@ -1,6 +1,6 @@ --- title: State -permalink: /pages/000b010101020100 +permalink: /pages/0108020303030201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @State @@ -17,9 +17,9 @@ date: 2021-12-30 18:31:39 **@State**状态数据具有以下特征: -- **支持多种类型:**允许如下强类型的按值和按引用类型:**class**、**number**、**boolean**、**string**,以及这些类型的数组,即**Array**、**Array**、**Array**、**Array**。不允许**object**和**any。** +- **支持多种类型:**允许**class**、**number**、**boolean**、**string**强类型的按值和按引用类型。允许这些强类型构成的数组,即**Array**、**Array**、**Array**、**Array。**不允许**object**和**any。** - **支持多实例:**组件不同实例的内部状态数据独立。 -- **内部私有:**标记为**@State**的属性不能直接在组件外部修改。它的生命周期取决于它所在的组件。 +- **内部私有:**标记为**@State**的属性是私有变量,只能在组件内访问。 - **需要本地初始化:**必须为所有**@State**变量分配初始值,将变量保持未初始化可能导致框架行为未定义。 - **创建自定义组件时支持通过状态变量名设置初始值:**在创建组件实例时,可以通过变量名显式指定**@State**状态属性的初始值**。** @@ -77,15 +77,15 @@ struct MyComponent { build() { Column() { - Text(`${this.title.value}`) + Text(`${this.title.value}`).fontSize(30) Button() { - Text(`Click to change title`).fontSize(10) + Text(`Click to change title`).fontSize(20).fontColor(Color.White) }.onClick(() => { - this.title.value = this.toggle ? 'Hello World' : 'Hello UI' + this.title.value = (this.toggle == this.title.value) ? 'Hello World' : 'Hello UI' }) // Modify the internal state of MyComponent using the anonymous method. Button() { - Text(`Click to increase count=${this.count}`).fontSize(10) + Text(`Click to increase count=${this.count}`).fontSize(20).fontColor(Color.White) }.onClick(() => { this.count += this.increaseBy }) // Modify the internal state of MyComponent using the anonymous method. @@ -104,4 +104,3 @@ struct MyComponent { MyComponent({title: {value: 'Hello, World 2'}, count: 7}) ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" similarity index 75% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" index 295ad1fd572e9141fe43c57af6cf6446f6d44520..3a0d95cdb34b098587aba88a734dc5b06b862a9d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/02.Prop.md" @@ -1,6 +1,6 @@ --- title: Prop -permalink: /pages/000b010101020101 +permalink: /pages/0108020303030202 navbar: true sidebar: true prev: true @@ -9,15 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Prop -**@Prop**具有与**@State**相同的语义,但初始化方式不同。**@Prop**装饰的变量必须使用其父组件提供的**@State**变量进行初始化,允许组件内部修改**@Prop**变量,但上述更改不会通知给父组件,即**@Prop**属于单向数据绑定。 +**@Prop与@State**有相同的语义,但初始化方式不同。**@Prop**装饰的变量必须使用其父组件提供的**@State**变量进行初始化,允许组件内部修改**@Prop**变量,但更改不会通知给父组件,即**@Prop**属于单向数据绑定。 **@Prop**状态数据具有以下特征: -- **支持简单类型:**仅支持简单类型:number、string、boolean; +- **支持简单类型:**仅支持number、string、boolean简单类型; - **私有:**仅在组件内访问; - **支持多个实例:**一个组件中可以定义多个标有**@Prop**的属性; - **创建自定义组件时将值传递给@Prop变量进行初始化:**在创建组件的新实例时,必须初始化所有@Prop变量,不支持在组件内部进行初始化。 @@ -74,8 +74,8 @@ struct CountDownComponent { } ``` -在上述示例中,当按“+1”或“-1”按钮时,父组件状态发生变化,重新执行**build**方法,此时将创建一个新的**CountDownComponent**组件。父组件的**countDownStartValue**状态属性被用于初始化子组件的**@Prop**变量。当按下子组件的“Try again”按钮时,其**@Prop**变量**count**将被更改,这将导致**CountDownComponent**重新渲染。但是,**count**值的更改不会影响父组件的**countDownStartValue**值。 +在上述示例中,当按“+1”或“-1”按钮时,父组件状态发生变化,重新执行**build**方法,此时将创建一个新的**CountDownComponent**组件。父组件的**countDownStartValue**状态属性被用于初始化子组件的**@Prop**变量,当按下子组件的“Try again”按钮时,其**@Prop**变量**count**将被更改,**CountDownComponent**重新渲染。但是**count**值的更改不会影响父组件的**countDownStartValue**值。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >创建新组件实例时,必须初始化其所有**@Prop**变量。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" index 107149c98c4c2e7100bfe5bf2539dcc74b1cae12..22ac15d84904f719a08e3ce3249c7b2e09cfffcf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/02.\347\256\241\347\220\206\347\273\204\344\273\266\346\213\245\346\234\211\347\232\204\347\212\266\346\200\201/03.Link.md" @@ -1,6 +1,6 @@ --- title: Link -permalink: /pages/000b010101020102 +permalink: /pages/0108020303030203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Link @@ -19,9 +19,9 @@ date: 2021-12-30 18:31:39 - **私有:**仅在组件内访问; - **单个数据源:**初始化**@Link**变量的父组件的变量必须是**@State**变量; - **双向通信:**子组件对**@Link**变量的更改将同步修改父组件的**@State**变量; -- **创建自定义组件时需要将变量的引用传递给@Link变量:**在创建组件的新实例时,必须使用命名参数初始化所有**@Link**变量。**@Link**变量可以使用**@State**变量或**@Link**变量的引用进行初始化。**@State**变量可以通过'**$**'操作符创建引用。 +- **创建自定义组件时需要将变量的引用传递给@Link变量:**在创建组件的新实例时,必须使用命名参数初始化所有**@Link**变量。**@Link**变量可以使用**@State**变量或**@Link**变量的引用进行初始化,**@State**变量可以通过'**$**'操作符创建引用。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >**@Link**变量不能在组件内部进行初始化。 ## 简单类型示例 @@ -93,7 +93,7 @@ struct Child { } ``` -在上面的示例中,点击**Button1**和**Button2**以更改父组件中显示的文本项目列表。 +在上面的示例中,点击**Button1**和**Button2**更改父组件中显示的文本项目列表。 ## @Link和@State、@Prop结合使用示例 @@ -131,7 +131,7 @@ struct ChildB { } ``` -上述示例中,ParentView包含ChildA和ChildB两个子组件,ParentView的状态变量**counter**分别初始化ChildA和ChildB: +上述示例中,ParentView包含ChildA和ChildB两个子组件,ParentView的状态变量**counter**分别初始化ChildA和ChildB。 - ChildB使用**@Link**建立双向状态绑定。当**ChildB**修改**counterRef**状态变量值时,该更改将同步到**ParentView**和**ChildA**共享; - ChildA使用**@Prop**建立从**ParentView**到自身的单向状态绑定。当**ChildA**修改状态时,**ChildA**将重新渲染,但该更改不会传达给**ParentView**和**ChildB。** diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" similarity index 41% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" index 17efb7bc4ec4bc7d704c52cd398c95cae3089b94..89ab4000d92c51e31e22c6f6113d165bcf9d0a5a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/01.\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\346\225\260\346\215\256\345\255\230\345\202\250.md" @@ -1,6 +1,6 @@ --- title: 应用程序的数据存储 -permalink: /pages/000b01010102020000 +permalink: /pages/010802030303030101 navbar: true sidebar: true prev: true @@ -9,158 +9,203 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 应用程序的数据存储 -**AppStorage**是应用程序中的单例对象,由UI框架在应用程序启动时创建。它的目的是为可变应用程序状态属性提供中央存储。**AppStorage**包含整个应用程序中需要访问的所有状态属性。只要应用程序保持运行,**AppStorage**存储就会保留所有属性及其值,属性值可以通过唯一的键值进行访问。 +**AppStorage**是应用程序中的单例对象,由UI框架在应用程序启动时创建,在应用程序退出退出时销毁,为应用程序范围内的可变状态属性提供中央存储。**AppStorage**包含整个应用程序中需要访问的所有状态属性,只要应用程序保持运行,**AppStorage**就会保存所有属性及属性值,属性值可以通过唯一的键值进行访问。 -UI组件可以通过装饰器将应用程序状态数据与**AppStorage**进行同步。应用业务逻辑的实现也可以通过接口访问**AppStorage**。 +UI组件可以通过装饰器将应用程序状态数据与**AppStorage**进行同步,应用业务逻辑的实现也可以通过接口访问**AppStorage**。 -AppStorage的选择状态属性可以与不同的数据源或数据接收器同步。这些数据源和接收器可以是设备上的本地或远程,并具有不同的功能,如数据持久性。这样的数据源和接收器可以独立于UI在业务逻辑中实现。 +**AppStorage**的选择状态属性可以与不同的数据源或数据接收器同步,这些数据源和接收器可以是设备上的本地或远程,并具有不同的功能,如数据持久性。这样的数据源和接收器可以独立于UI在业务逻辑中实现。 默认情况下,**AppStorage**中的属性是可变的,**AppStorage**还可使用不可变(只读)属性。 -## AppStorage接口说明 +## AppStorage接口 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + -

方法

参数说明

+

参数说明

返回值

+

返回值

定义

Link

+

SetAndLink

key: string

+

key: string,

+

defaultValue: T

@Link

+

@Link

如果存在具有给定键的数据,则返回到此属性的双向数据绑定,该双向绑定意味着变量或者组件对数据的更改将同步到AppStorage,通过AppStorage对数据的修改将同步到变量或者组件。如果具有此键的属性不存在或属性为只读,则返回undefined

+

与Link接口类似,如果当前的key保存于AppStorage,则返回该key对应的value。如果该key未被创建,则创建一个对应default值的Link返回。

SetAndLink

+

Set

key : String

-

defaultValue: T

+

key: string,

+

newValue: T

@Link

+

void

与Link接口类似。如果当前的key在AppStorage有保存,则返回此key对应的value。如果此key未被创建,则创建一个对应default值的Link返回。

+

对已保存的key值,替换其value值。

Prop

+

Link

key: string

+

key: string

@Prop

+

@Link

如果存在具有给定键的属性,则返回到此属性的单向数据绑定。该单向绑定意味着只能通过AppStorage将属性的更改同步到变量或者组件。该方法返回的变量为不可变变量,适用于可变和不可变的状态属性,如果具有此键的属性不存在则返回undefined

-
说明:

prop方法对应的属性值类型为简单类型。

-
+

如果存在具有给定键的数据,则返回到此属性的双向数据绑定,该双向绑定意味着变量或者组件对数据的更改将同步到AppStorage,通过AppStorage对数据的修改将同步到变量或者组件。如果具有此键的属性不存在或属性为只读,则返回undefined

SetAndProp

+

SetAndProp

key : string

-

defaultValue: S

+

propName: string,

+

defaultValue: S

@Prop

+

@Prop

与Prop接口类似。如果当前的key在AppStorage有保存,则返回此key对应的value。如果此key未被创建,则创建一个对应default值的Prop返回。

+

与Prop接口类似,如果当前的key保存于AppStorage,则返回该key对应的value。如果该key未被创建,则创建一个对应default值的Prop返回。

Has

+

Prop

key: string

+

key: string

boolean

+

@Prop

判断对应键值的属性是否存在

+

如果存在具有给定键的属性,则返回此属性的单向数据绑定。该单向绑定意味着只能通过AppStorage将属性的更改同步到变量或者组件。该方法返回的变量为不可变变量,适用于可变和不可变的状态属性,如果具有此键的属性不存在则返回undefined

+
说明:

prop方法对应的属性值类型为简单类型。

+

Keys

+

SetOrCreate

void

+

key: string,

+

newValue: T

array<string>

+

boolean

返回包含所有键的字符串数组。

+

如果相同名字的属性存在:如果此属性可以被更改返回true,否则返回false。

+

如果相同名字的属性不存在:创建第一个赋值为defaultValue的属性,不支持null和undefined。

Get

+

Get

string

+

key: string

T或undefined

+

T或undefined

通过此接口获取对应此key值的value

+

通过此接口获取对应key值的value。

Set

+

Has

string, newValue :T

+

propName: string

void

+

boolean

对已保存的key值,替换其value值。

+

判断对应键值的属性是否存在

SetOrCreate

+

Keys

string, newValue :T

+

void

boolean

+

array<string>

如果相同名字的属性存在:如果此属性可以被更改返回true,否则返回false

-

如果相同名字的属性不存在:创建第一个赋值为defaultValue的属性,不支持null和undefined

+

返回包含所有键的字符串数组。

Delete

key : string

+

key: string

boolean

+

boolean

删除属性,如果存在返回true,不存在返回false

+

删除key指定的键值对,如果存在且删除成功返回true,不存在或删除失败返回false。

Clear

none

+

void

boolean

+

boolean

删除所有的属性,如果当前有状态变量依旧引用此属性,则返回false

+

删除所有的属性,如果当前有状态变量依旧引用此属性,则返回false。

IsMutable

key: string

+

key: string

+

boolean

  

返回此属性是否存在并且是否可以改变。

->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >当前接口当前仅可以处理基础类型数据,对于修改object中某一个值尚未支持。 +## AppStorage与组件同步 + +在[管理组件拥有的状态](/pages/0108020303030201)中,已经定义了如何将组件的状态变量与父组件或祖先组件中的**@State**装饰的状态变量同步,主要包括**@Prop**、**@Link**、**@Consume**。 + +本章节将定义如何将组件变量与**AppStorage**同步,主要提供**@StorageLink**和**@StorageProp**装饰器。 + +### @StorageLink装饰器 + +组件通过使用**@StorageLink\(key\)**装饰的状态变量,与**AppStorage**建立双向数据绑定,**key**为**AppStorage**中的属性键值。当创建包含**@StorageLink**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。在UI组件中对**@StorageLink**的状态变量所做的更改将同步到**AppStorage**,并从**AppStorage**同步到任何其他绑定实例中,如**PersistentStorage**或其他绑定的UI组件。 + +### @StorageProp装饰器 + +组件通过使用**@StorageProp\(key\)**装饰的状态变量,将与**AppStorage**建立单向数据绑定,**key**标识AppStorage中的属性键值。当创建包含**@StoageProp**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。**AppStorage**中的属性值的更改会导致绑定的UI组件进行状态更新。 + ## 示例 ``` -let link1 = AppStorage.Link('PropA') -let link2 = AppStorage.Link('PropA') -let prop = AppStorage.Prop('PropA') +let varA = AppStorage.Link('varA') +let envLang = AppStorage.Prop('languageCode') + +@Entry +@Component +struct ComponentA { + @StorageLink('varA') varA: number = 2 + @StorageProp('languageCode') lang: string = 'en' + private label: string = 'count' -link1 = 47 // causes link1 == link2 == prop == 47 -link2 = link1 + prop // causes link1 == link2 == prop == 94 -prop = 1 // error, prop is immutable + private aboutToAppear() { + this.label = (this.lang === 'zh') ? '数' : 'Count' + } + + build() { + Row({ space: 20 }) { + + Button(`${this.label}: ${this.varA}`) + .onClick(() => { + AppStorage.Set('varA', AppStorage.Get('varA') + 1) + }) + Button(`lang: ${this.lang}`) + .onClick(() => { + if (this.lang === 'zh') { + AppStorage.Set('languageCode', 'en') + } else { + AppStorage.Set('languageCode', 'zh') + } + this.label = (this.lang === 'zh') ? '数' : 'Count' + }) + } + } +} ``` +每次开发者单击Count按钮时,this.varA变量值都会增加,此变量与AppStorage中的varA同步。每次用户单击当前语言按钮时,修改AppStorage中的languageCode,此修改会同步给this.lang变量。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" index a914c8395c51f6f58fd82dfc5f28dd61484d35b4..43633e0007ebbabb872fb6c17520466d18aedc7b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/02.\346\214\201\344\271\205\345\214\226\346\225\260\346\215\256\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 持久化数据管理 -permalink: /pages/000b01010102020001 +permalink: /pages/010802030303030102 navbar: true sidebar: true prev: true @@ -9,13 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 持久化数据管理 -**PersistentStorage**用于管理应用持久化数据。此对象可以将特定标记的持久化数据链接到AppStorage中,并由AppStorage接口访问对应持久化数据,或者通过@StorageLink修饰器来访问对应key的变量。 - -## PersistentStorage接口 +方舟开发框架通过**PersistentStorage**类提供了一些静态方法用来管理应用持久化数据,可以将特定标记的持久化数据链接到AppStorage中,并由AppStorage接口访问对应持久化数据,或者通过@StorageLink装饰器来访问对应key的变量。 -

方法

@@ -35,10 +33,9 @@ date: 2021-12-30 18:31:39

void

关联命名的属性在AppStorage变为持久化数据。赋值覆盖顺序

-

首先 如果此属性在AppStorage中存在,并且将Persistent中的数据复写为AppStorage中的属性值。

-

其次Persistent中有此命名的属性,使用Persistent中的属性值。

-

最后 以上条件不满足使用defaultValue,不支持null和undefined。

+

关联命名的属性在AppStorage变为持久化数据,赋值覆盖顺序如下:

+
  • 首先,如果该属性存在于AppStorage,将Persistent中的数据复写为AppStorage中的属性值。
  • 其次,Persistent中有此命名的属性,使用Persistent中的属性值。
+
  • 最后,以上条件均不满足,则使用defaultValue,不支持null和undefined。

DeleteProp

@@ -74,7 +71,7 @@ date: 2021-12-30 18:31:39
->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >- PersistProp接口使用时,需要保证输入对应的key应当在Appstorage存在。 >- DeleteProp接口使用时,只能对本次启动已经link过的数据生效。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" index 87c3bfdf3bcdbfb450acd551bc4e8b183df7f8fd..ed0d89c20a84afd908b21af9a527114483a5929a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/01.\346\216\245\345\217\243/03.\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -1,6 +1,6 @@ --- title: 环境变量 -permalink: /pages/000b01010102020002 +permalink: /pages/010802030303030103 navbar: true sidebar: true prev: true @@ -9,20 +9,18 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 环境变量 -**Environment**是框架在应用程序启动时创建的单例对象,它为**AppStorage**提供了一系列应用程序需要的环境状态属性,这些属性描述了应用程序运行的设备环境。**Environment**及其属性是不可变的,所有属性值类型均为简单类型。 - -如下示例展示了从**Environment**获取语音环境: +**Environment**是框架在应用程序启动时创建的单例对象,它为**AppStorage**提供了一系列应用程序需要的环境状态属性,这些属性描述了应用程序运行的设备环境。**Environment**及其属性是不可变的,所有属性值类型均为简单类型。如下示例展示了从**Environment**获取语音环境: ``` Environment.EnvProp("accessibilityEnabled", "default"); var enable = AppStorageGet("accessibilityEnabled"); ``` -**accessibilityEnabled**是**Environment**提供默认系统变量识别符。首先需要将对应系统属性绑定到**Appstorage**中,后可以通过AppStorage中的方法或者装饰器,访问对应系统属性数据。 +**accessibilityEnabled**是**Environment**提供默认系统变量识别符。首先需要将对应系统属性绑定到**Appstorage**中,再通过AppStorage中的方法或者装饰器访问对应系统的属性数据。 ## Environment接口 @@ -39,12 +37,12 @@ var enable = AppStorageGet("accessibilityEnabled");

EnvProp

-

key : string

+

key: string,

defaultValue: any

boolean

-

关联此系统项到Appstorage中。建议在app启动时使用此Api。如果此属性在Appstorage已经存在则返回false。请勿使用AppStorage中的变量,在调用此方法关联环境变量。

+

关联此系统项到Appstorage中,建议在app启动时使用此接口。如果该属性在Appstorage已存在,返回false。请勿使用AppStorage中的变量,在调用此方法关联环境变量。

EnvProps

@@ -93,7 +91,7 @@ var enable = AppStorageGet("accessibilityEnabled");

ColorMode

-

深浅色模式,选项值为:

+

深浅色模式,可选值为:

  • ColorMode.LIGHT:浅色模式;
  • ColorMode.DARK:深色模式。
@@ -101,14 +99,14 @@ var enable = AppStorageGet("accessibilityEnabled");

number

-

字体大小比例,范围为:[0.85, 1.45]。

+

字体大小比例,取值范围为[0.85, 1.45]。

fontWeightScale

number

-

字体权重比例,取值范围:[0.6, 1.6]。

+

字体权重比例,取值范围为[0.6, 1.6]。

layoutDirection

@@ -123,9 +121,8 @@ var enable = AppStorageGet("accessibilityEnabled");

string

-

当前系统语言值,小写字母,例如zh。

+

设置当前系统的语言,小写字母,例如zh。

- diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" index 426cc17cb1b88dc95be8af69b0e0448ccbda74ef..eaddd2aafbae783373e58628ffe559d986788325 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/03.\347\256\241\347\220\206\345\272\224\347\224\250\347\250\213\345\272\217\347\232\204\347\212\266\346\200\201/02.AppStorage\344\270\216\347\273\204\344\273\266\345\220\214\346\255\245.md" @@ -1,6 +1,6 @@ --- title: AppStorage与组件同步 -permalink: /pages/000b010101020201 +permalink: /pages/0108020303030302 navbar: true sidebar: true prev: true @@ -9,23 +9,27 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# AppStorage与组件同步 +# AppStorage与组件同步 + +在[管理组件拥有的状态](/pages/0108020303030201)中,我们已经定义了如何将组件的状态变量与父组件或祖先组件中的**@State**装饰的状态变量同步,主要包括**@Prop**、**@Link**、**@Consume**。 -在[管理组件拥有的状态](/pages/000b010101020100)中,我们已经定义了如何将组件的状态变量与父组件或祖先组件中的**@State**装饰的状态变量同步,主要包括**@Prop**、**@Link**、**@Consume**。 本章节将定义如何将组件变量与**AppStorage**同步,主要提供**@StorageLink**和**@StorageProp**装饰器。 -## @StorageLink装饰器 -组件通过使用**@StorageLink\(key\)**装饰的状态变量,将于**AppStorage**建立双向数据绑定,**key**为**AppStorage**中的属性键值。当创建包含**@StorageLink**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。在UI组件中对**@StorageLink**的状态变量所做的更改将同步到**AppStorage**,并从**AppStorage**同步到任何其他绑定实例中,如**PersistentStorage**或其他绑定的UI组件。 +## @StorageLink装饰器 + +组件通过使用**@StorageLink(key)**装饰的状态变量,将与**AppStorage**建立双向数据绑定,**key**为**AppStorage**中的属性键值。当创建包含**@StorageLink**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。在UI组件中对**@StorageLink**的状态变量所做的更改将同步到**AppStorage**,并从**AppStorage**同步到任何其他绑定实例中,如**PersistentStorage**或其他绑定的UI组件。 + -## @StorageProp装饰器 +## @StorageProp装饰器 -组件通过使用**@StorageProp\(key\)**装饰的状态变量,将于**AppStorage**建立单向数据绑定,**key**标识AppStorage中的属性键值。当创建包含**@StoageProp**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。**AppStorage**中的属性值更改会导致绑定的UI组件进行状态更新。 +组件通过使用**@StorageProp(key)**装饰的状态变量,将于**AppStorage**建立单向数据绑定,**key**标识AppStorage中的属性键值。当创建包含**@StoageProp**的状态变量的组件时,该状态变量的值将使用**AppStorage**中的值进行初始化。**AppStorage**中的属性值更改会导致绑定的UI组件进行状态更新。 -## 示例 + +## 示例 ``` let varA = AppStorage.Link('varA') @@ -64,4 +68,3 @@ struct ComponentA { ``` 每次用户单击Count按钮时,this.varA变量值都会增加,此变量与AppStorage中的varA同步。每次用户单击当前语言按钮时,修改AppStorage中的languageCode,此修改会同步给this.lang变量。 - diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..171dd502409ef5aa017a7959f4178ec8e73e316c --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" @@ -0,0 +1,185 @@ +--- +title: Observed和ObjectLink数据管理 +permalink: /pages/0108020303030401 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# Observed和ObjectLink数据管理 + + +本章将引入两个新的装饰符@Observed和@ObjectLink: + +- @Observed应用于类,表示该类中的数据变更被UI页面管理,例如:@Observed class ClassA \{\}。 +- @ObjectLink应用于被@Observed所装饰类的对象,例如:@ObjectLink a: ClassA。 + +## 引入动机 + +当开发者需要在子组件中针对父组件的一个变量(parent\_a)设置双向同步时,开发者可以在父组件中使用@State装饰变量(parsent\_a),并在子组件中使用@Link装饰相应的变量(child\_a)。这样的话,不仅可以实现父组件与单个子组件之间的数据同步,也可以实现父组件与多个子组件之间的数据同步。如下图所示,可以看到,父子组件针对ClassA类型的变量设置了双向同步,那么当子组件1中变量的属性c的值变化时,会通知父组件同步变化,而当父组件中属性c的值变化时,会通知所有子组件同步变化。 + +![](/images/application-dev/ui/figures/zh-cn_image_0000001251090821.png) + +然而,上述例子是针对某个数据对象进行的整体同步,而当开发者只想针对父组件中某个数据对象的部分信息进行同步时,使用@Link就不能满足要求。如果这些部分信息是一个类对象,就可以使用@ObjectLink配合@Observed来实现,如下图所示。 + +![](/images/application-dev/ui/figures/zh-cn_image_0000001206450834.png) + +## 设置要求 + +- @Observed 用于类,@ObjectLink 用于变量。 +- @ObjectLink装饰的变量类型必须为类(class type)。 + - 类要被@Observed装饰器所装饰。 + - 不支持简单类型参数,可以使用@Prop进行单向同步。 + +- @ObjectLink装饰的变量是不可变的(immutable)。 + - 属性的改动是被允许的,当改动发生时,如果同一个对象被多个@ObjectLink变量所引用,那么所有拥有这些变量的自定义组件都会被通知去重新渲染。 + +- @ObjectLink装饰的变量不可设置默认值。 + - 必须让父组件中有一个由@State、@Link、@StorageLink、@Provide或@Consume所装饰变量参与的TS表达式进行初始化。 + +- @ObjectLink装饰的变量是私有变量,只能在组件内访问。 + +## 示例 + +### 案例1 + +``` +@Observed +class ClassA { + public name : string; + public c: number; + constructor(c: number, name: string = 'OK') { + this.name = name; + this.c = c; + } +} + +class ClassB { + public a: ClassA; + constructor(a: ClassA) { + this.a = a; + } +} + +@Component +struct ViewA { + label : string = "ep1"; + @ObjectLink a : ClassA; + build() { + Column() { + Text(`ViewA [${this.label}]: a.c=${this.a.c}`) + .fontSize(20) + Button(`+1`) + .width(100) + .margin(2) + .onClick(() => { + this.a.c += 1; + }) + Button(`reset`) + .width(100) + .margin(2) + .onClick(() => { + this.a = new ClassA(0); // ERROR, this.a is immutable + }) + } + } +} + +@Entry +@Component +struct ViewB { + @State b : ClassB = new ClassB(new ClassA(10)); + build() { + Flex({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) { + ViewA({label: "ViewA #1", a: this.b.a}) + ViewA({label: "ViewA #2", a: this.b.a}) + + Button(`ViewB: this.b.a.c += 1` ) + .width(320) + .margin(4) + .onClick(() => { + this.b.a.c += 1; + }) + Button(`ViewB: this.b.a = new ClassA(0)`) + .width(240) + .margin(4) + .onClick(() => { + this.b.a = new ClassA(0); + }) + Button(`ViewB: this.b = new ClassB(ClassA(0))`) + .width(240) + .margin(4) + .onClick(() => { + this.b = new ClassB(new ClassA(0)); + }) + } + } +} +``` + +### 案例2 + +``` +var nextID: number = 0; +@Observed +class ClassA { + public name : string; + public c: number; + public id : number; + constructor(c: number, name: string = 'OK') { + this.name = name; + this.c = c; + this.id = nextID++; + } +} + +@Component +struct ViewA { + label : string = "ViewA1"; + @ObjectLink a: ClassA; + build() { + Row() { + Button(`ViewA [${this.label}] this.a.c= ${this.a.c} +1`) + .onClick(() => { + this.a.c += 1; + }) + } + } +} + +@Entry +@Component +struct ViewB { + @State arrA : ClassA[] = [ new ClassA(0), new ClassA(0) ]; + build() { + Column() { + ForEach (this.arrA, (item) => { + ViewA({label: `#${item.id}`, a: item}) + }, + (item) => item.id.toString() + ) + ViewA({label: `ViewA this.arrA[first]`, a: this.arrA[0]}) + ViewA({label: `ViewA this.arrA[last]`, a: this.arrA[this.arrA.length-1]}) + + Button(`ViewB: reset array`) + .onClick(() => { + this.arrA = [ new ClassA(0), new ClassA(0) ]; + }) + Button(`ViewB: push`) + .onClick(() => { + this.arrA.push(new ClassA(0)) + }) + Button(`ViewB: shift`) + .onClick(() => { + this.arrA.shift() + }) + } + } +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" similarity index 81% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" index 834e9ebcceabc8ad68448944a5d06a904b03aaf3..71e54a2a7be037919eba97a68766e1bbc9b96962 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/02.Consume\345\222\214Provide\346\225\260\346\215\256\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: Consume和Provide数据管理 -permalink: /pages/000b010101020301 +permalink: /pages/0108020303030402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Consume和@Provide数据管理 @@ -18,7 +18,7 @@ Provide作为数据的提供方,可以更新其子孙节点的数据,并触 **表 1** @Provide - - - - @@ -107,7 +105,7 @@ date: 2021-12-30 18:31:39

类型

+ @@ -26,7 +26,7 @@ Provide作为数据的提供方,可以更新其子孙节点的数据,并触 - - - @@ -60,13 +59,13 @@ Provide作为数据的提供方,可以更新其子孙节点的数据,并触 -

名称

说明

装饰器参数

别名:是一个string类型的常量。如果规定别名,则提供对应别名的数据更新。如果没有,则使用变量名作为别名。推荐使用@Provide("alias")这种形式。

+

是一个string类型的常量,用于给装饰的变量起别名。如果规定别名,则提供对应别名的数据更新。如果没有,则使用变量名作为别名。推荐使用@Provide("alias")这种形式。

同步机制

@@ -36,14 +36,13 @@ Provide作为数据的提供方,可以更新其子孙节点的数据,并触

初始值

必须制定初始值

+

必须制定初始值。

页面重渲染场景

1. 基础类型 boolean,string,number

-

2. observed class,修改其中的属性

-

3. Array:添加,删除,更新数组中的元素

+

触发页面渲染的修改:

+
  • 基础类型(boolean,string,number)的改变;
  • @Observed class类型变量及其属性的修改;
  • 添加,删除,更新数组中的元素。

初始值

不可设置默认值

+

不可设置默认值。

->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >使用@Provide 和@Consume时避免循环引用导致死循环。 其他属性说明与Provide一致。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" similarity index 67% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" index 337d32fec3e9f5286073faff287076178beb63b0..8b42ff8fd0f448a06b48ddd58f38bf092b3893c4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/03.Watch.md" @@ -1,6 +1,6 @@ --- title: Watch -permalink: /pages/000b010101020302 +permalink: /pages/0108020303030403 navbar: true sidebar: true prev: true @@ -9,11 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # @Watch -应用可以注册回调方法。当一个被@State, @Prop, @Link, @ObjectLink, @Provide, @Consume, @StorageProp, 以及 @StorageLink中任意一个装饰器修饰的变量改变时,均可触发此回调。@Watch中的变量一定要使用(“”)进行包装。 +@Watch用于监听状态变量的变化,语法结构为: + +``` +@State @Watch("onChanged") count : number = 0 +``` + +如上给状态变量增加一个@Watch装饰器,通过@Watch注册一个回调方法onChanged, 当状态变量count被改变时, 触发onChanged回调。 + +装饰器@State, @Prop, @Link, @ObjectLink, @Provide, @Consume, @StorageProp以及 @StorageLink装饰的变量可以监听其变化。 ``` @Entry diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" similarity index 55% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" index e19d63d69d92b75fd558a58c0463d4fc475629df..d6c6cb8087a359fa2a8135e4bd41888325694ff4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/01.\346\235\241\344\273\266\346\270\262\346\237\223.md" @@ -1,6 +1,6 @@ --- title: 条件渲染 -permalink: /pages/000b0101010300 +permalink: /pages/01080203030401 navbar: true sidebar: true prev: true @@ -9,17 +9,17 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 条件渲染 使用**if/else**进行条件渲染。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- if条件语句可以使用状态变量; ->- 使用if可以使子组件的渲染依赖条件语句; +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +>- if条件语句可以使用状态变量。 +>- 使用if可以使子组件的渲染依赖条件语句。 >- 必须在容器组件内使用。 ->- 某些容器组件限制子组件的类型或数量。当将if放置在这些组件内时,这些限制将应用于if和else语句内创建的组件:如当在Grid组件内使用if时,则仅允许if条件语句内使用GridItem组件,而在List组件内则仅允许ListItem组件。 +>- 某些容器组件限制子组件的类型或数量。将if放置在这些组件内时,这些限制将应用于if和else语句内创建的组件。例如,Grid组件的子组件仅支持GridItem组件,在Grid组件内使用if时,则if条件语句内仅允许使用GridItem组件。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" index 24f883290b6643399156a75f115fc13cab354952..97f7e77b4e2ba81e154b1bce8ed2587ce9e7bc70 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/02.\345\276\252\347\216\257\346\270\262\346\237\223.md" @@ -1,6 +1,6 @@ --- title: 循环渲染 -permalink: /pages/000b0101010301 +permalink: /pages/01080203030402 navbar: true sidebar: true prev: true @@ -9,27 +9,78 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 循环渲染 -开发框架提供**ForEach**组件来迭代数组,并为每个数组项创建相应的组件。**ForEach**定义如下: +开发框架提供**循环渲染(**ForEach组件)来迭代数组,并为每个数组项创建相应的组件。**ForEach**定义如下: ``` ForEach( arr: any[], // Array to be iterated - itemGenerator: (item: any) => void, // child component generator - keyGenerator?: (item: any) => string // (optional) Unique key generator, which is recommended. + itemGenerator: (item: any, index?: number) => void, // child component generator + keyGenerator?: (item: any, index?: number) => string // (optional) Unique key generator, which is recommended. ) ``` ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 循环渲染使用ForEach从提供的数组中自动生成子组件; +## ForEach + +ForEach\(arr: any\[\],itemGenerator: \(item: any, index?: number\) =\> void, keyGenerator?: \(item: any, index?: number\) =\> string\):void + +**表 1** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

arr

+

any[]

+

+

-

+

必须是数组,允许空数组,空数组场景下不会创建子组件。同时允许设置返回值为数组类型的函数,例如arr.slice(1, 3),设置的函数不得改变包括数组本身在内的任何状态变量,如Array.spliceArray.sortArray.reverse这些改变原数组的函数。

+

itemGenerator

+

(item: any, index?: number) => void

+

+

-

+

生成子组件的lambda函数,为给定数组项生成一个或多个子组件,单个组件和子组件列表必须括在大括号“{....}”中。

+

keyGenerator

+

(item: any, index?: number) => string

+

+

-

+

匿名参数,用于给定数组项生成唯一且稳定的键值。当子项在数组中的位置更改时,子项的键值不得更改,当数组中的子项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的,但是,为了使开发框架能够更好地识别数组更改,提高性能,建议提供。如将数组反向时,如果没有提供键值生成器,则ForEach中的所有节点都将重建

+
+ +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >- 必须在容器组件内使用; ->- 第一个参数必须是数组:允许空数组,空数组场景下不会创建子组件。同时允许设置返回值为数组类型的函数,例如**arr.slice\(1, 3\)**,设置的函数不得改变包括数组本身在内的任何状态变量,如**Array.splice**、**Array.sort**或**Array.reverse**这些原地修改数组的函数; ->- 第二个参数用于生成子组件的lambda函数。它为给定数组项生成一个或多个子组件。单个组件和子组件列表必须括在大括号“**\{....\}**”中; ->- 可选的第三个参数是用于键值生成的匿名函数。它为给定数组项生成唯一且稳定的键值。当子项在数组中的位置更改时,子项的键值不得更改,当数组中的子项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的。但是,出于性能原因,强烈建议提供,这使开发框架能够更好地识别数组更改。如单击进行数组反向时,如果没有提供键值生成器,则ForEach中的所有节点都将重建。 ->- 生成的子组件必须允许在**ForEach**的父容器组件中,允许子组件生成器函数中包含**if/else**条件渲染,同时也允许**ForEach**包含在**if/else**条件渲染语句中。 +>- 生成的子组件允许在**ForEach**的父容器组件中,允许子组件生成器函数中包含**if/else**条件渲染,同时也允许**ForEach**包含在**if/else**条件渲染语句中; >- 子项生成器函数的调用顺序不一定和数组中的数据项相同,在开发过程中不要假设子项生成器和键值生成器函数是否执行以及执行顺序。如下示例可能无法正常工作: > ``` > ForEach(anArray, item => {Text(`${++counter}. item.label`)}) diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" new file mode 100644 index 0000000000000000000000000000000000000000..b3c9c39e4eb0a55328cbd2abd47135f4d64bff7e --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" @@ -0,0 +1,280 @@ +--- +title: 数据懒加载 +permalink: /pages/01080203030403 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 数据懒加载 + +开发框架提供**数据懒加载**(LazyForEach组件)从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。**LazyForEach**定义如下: + +``` +LazyForEach( + dataSource: IDataSource, // Data source to be iterated + itemGenerator: (item: any) => void, // child component generator + keyGenerator?: (item: any) => string // (optional) Unique key generator, which is recommended. +): void + +interface IDataSource { + totalCount(): number; // Get total count of data + getData(index: number): any; // Get single data by index + registerDataChangeListener(listener: DataChangeListener): void; // Register listener to listening data changes + unregisterDataChangeListener(listener: DataChangeListener): void; // Unregister listener +} + +interface DataChangeListener { + onDataReloaded(): void; // Called while data reloaded + onDataAdded(index: number): void; // Called while single data added + onDataMoved(from: number, to: number): void; // Called while single data moved + onDataDeleted(index: number): void; // Called while single data deleted + onDataChanged(index: number): void; // Called while single data changed +} +``` + +## 接口 + +### LazyForEach + +LazyForEach\(dataSource: IDataSource, itemGenerator: \(item: any\) =\> void, keyGenerator?: \(item: any\) =\> string\):void + +**表 1** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

dataSource

+

IDataSource

+

+

-

+

实现IDataSource接口的对象,需要开发者实现相关接口。

+

itemGenerator

+

(item: any) => void

+

+

-

+

生成子组件的lambda函数,为给定数组项生成一个或多个子组件,单个组件和子组件列表必须括在大括号“{....}”中。

+

keyGenerator

+

(item: any) => string

+

+

-

+

匿名函数,用于键值生成,为给定数组项生成唯一且稳定的键值。当子项在数组中的位置更改时,子项的键值不得更改,当数组中的子项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的,但是,为了使开发框架能够更好地识别数组更改,提高性能,建议提供。如将数组反向时,如果没有提供键值生成器,则LazyForEach中的所有节点都将重建。

+
+ +**表 2** IDataSource类型说明 + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

totalCount(): number

+

获取数据总数。

+

getData(index: number): any

+

获取索引对应的数据。

+

registerDataChangeListener(listener: DataChangeListener): void

+

注册改变数据的控制器。

+

unregisterDataChangeListener(listener: DataChangeListener): void

+

注销改变数据的控制器。

+
+ +**表 3** DataChangeListener类型说明 + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

onDataReloaded(): void

+

重新加载所有数据。

+

onDataAdded(index: number): void

+

通知组件index的位置有数据添加。

+

onDataMoved(from: number, to: number): void

+

通知组件数据从from的位置移到to的位置。

+

onDataDeleted(index: number): void

+

通知组件index的位置有数据删除。

+

onDataChanged(index: number): void

+

通知组件index的位置有数据变化。

+
+ +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +>- 数据懒加载必须在容器组件内使用,且仅有List、Grid以及Swiper组件支持数据的懒加载(即只加载可视部分以及其前后少量数据用于缓冲),其他组件仍然是一次加载所有的数据; +>- **LazyForEach**在每次迭代中,必须且只允许创建一个子组件; +>- 生成的子组件必须允许在**LazyForEach**的父容器组件中; +>- 允许**LazyForEach**包含在**if/else**条件渲染语句中,不允许**LazyForEach**中出现**if/else**条件渲染语句; +>- 为了高性能渲染,通过DataChangeListener对象的onDataChanged方法来更新UI时,仅itemGenerator中的UI描述的组件内使用了状态变量时,才会触发组件刷新; +>- 子项生成器函数的调用顺序不一定和数据源中的数据项相同,在开发过程中不要假设子项生成器和键值生成器函数是否执行以及执行顺序。如下示例可能无法正常工作: +> ``` +> LazyForEach(dataSource, item => {Text(`${++counter}. item.label`)}) +> ``` +> 正确的示例如下: +> ``` +> LazyForEach(dataSource, +> item => Text(`${item.i}. item.data.label`)), +> item => item.data.id.toString()) +> ``` + +## 示例 + +``` +// Basic implementation of IDataSource to handle data listener +class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = [] + + public totalCount(): number { + return 0 + } + public getData(index: number): any { + return undefined + } + + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener') + this.listeners.push(listener) + } + } + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener') + this.listeners.splice(pos, 1) + } + } + + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded() + }) + } + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdded(index) + }) + } + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChanged(index) + }) + } + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDeleted(index) + }) + } + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMoved(from, to) + }) + } +} + +class MyDataSource extends BasicDataSource { + private dataArray: string[] = ['/path/image0', '/path/image1', '/path/image2', '/path/image3'] + + public totalCount(): number { + return this.dataArray.length + } + public getData(index: number): any { + return this.dataArray[index] + } + + public addData(index: number, data: string): void { + this.dataArray.splice(index, 0, data) + this.notifyDataAdd(index) + } + public pushData(data: string): void { + this.dataArray.push(data) + this.notifyDataAdd(this.dataArray.length - 1) + } +} + +@Entry +@Component +struct MyComponent { + private data: MyDataSource = new MyDataSource() + build() { + List({space: 3}) { + LazyForEach(this.data, (item: string) => { + ListItem() { + Row() { + Image(item).width("30%").height(50) + Text(item).fontSize(20).margin({left:10}) + }.margin({left: 10, right: 10}) + } + .onClick(()=>{ + this.data.pushData('/path/image' + this.data.totalCount()) + }) + }, item => item) + } + } +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" index 6538406ae1e1ab2b9cd07087ef769687ed667c0e..c5996bd575f4963e04835cf4c7547cb204f15ecd 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/01.build\345\207\275\346\225\260.md" @@ -1,6 +1,6 @@ --- title: build函数 -permalink: /pages/000b0101010400 +permalink: /pages/01080203030501 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # build函数 -**build**函数满足**Builder**构造器接口定义,用于定义组件的声明式UI描述。 +**build**函数满足**Builder**构造器接口定义,用于定义组件的声明式UI描述。必须遵循上述**Builder**接口约束,在**build**方法中以声明式方式进行组合自定义组件或系统内置组件,在组件的第一次创建和更新场景中都会调用**build**方法。 ``` interface Builder { @@ -21,3 +21,6 @@ interface Builder { } ``` +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** +>build方法仅支持组合组件,使用渲染控制语法。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" similarity index 76% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" index 283a11f70b7f279b60f1797e084befb1c3649c34..2bc311d9746e5cda73d03abb284edb3f933cdade 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\345\210\235\345\247\213\345\214\226.md" @@ -1,6 +1,6 @@ --- title: 自定义组件初始化 -permalink: /pages/000b0101010401 +permalink: /pages/01080203030502 navbar: true sidebar: true prev: true @@ -9,18 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 自定义组件初始化 - -本节介绍自定义组件状态变量的初始化规则。 +# 自定义组件成员变量初始化 组件的成员变量可以通过两种方式初始化: - 本地初始化,例如: ``` - @State counter: Counterr = new Counter() + @State counter: Counter = new Counter() ``` - 在构造组件时通过构造参数初始化,例如: @@ -41,21 +39,21 @@ date: 2021-12-30 18:31:39

@State

+

@State

必须

可选

@Prop

+

@Prop

禁止

必须

@Link

+

@Link

禁止

-从上表中: +从上表中可以看出: - **@State**变量需要本地初始化,初始化的值可以被构造参数覆盖; - **@Prop**和**@Link**变量必须且仅通过构造函数参数进行初始化。 @@ -115,88 +113,88 @@ date: 2021-12-30 18:31:39 通过构造函数方法初始化成员变量,需要遵循如下规则: - - - - - - @@ -87,7 +85,7 @@ struct CountDownTimerComponent { 上述示例表明,生命周期函数对于允许CountDownTimerComponent管理其计时器资源至关重要,类似的函数也包括异步从网络请求加载资源。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>![icon-note.gif](/images/application-dev/ui/public_sys-resources/icon-note.gif) **说明:** >- 允许在生命周期函数中使用**Promise**和异步回调函数,比如网络资源获取,定时器设置等; >- 不允许在生命周期函数中使用**async await**。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" index cd02db33a3844663e94182418e588b0bf01caca1..0d892cd346eb6aee82e56f0cbeafaad1cd477986 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/04.\347\273\204\344\273\266\345\210\233\345\273\272\345\222\214\351\207\215\346\226\260\345\210\235\345\247\213\345\214\226\347\244\272\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 组件创建和重新初始化示例 -permalink: /pages/000b0101010403 +permalink: /pages/01080203030504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 组件创建和重新初始化示例 @@ -100,4 +100,3 @@ struct TimerComponent { 3. **Button**内置组件会被重用,但使用新的图片源地址。 - diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..9c7ba5efc47aee311c2a0d0756d6f6decca28188 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" @@ -0,0 +1,61 @@ +--- +title: 装饰器 +permalink: /pages/01080203030601 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:49 +--- +# 装饰器 + +装饰器**@Decorator**,被装饰的元素可以是变量声明,类定义,结构体定义,方法定义等,赋予其特殊的含义。 + + +多个装饰器实现可以叠加到目标元素,书写在同一行上或者在多行上,推荐书写在多行上。 + + +如下**@Component**和**@State**的使用,被**@Component**装饰的元素具备了组件化的含义,使用**@State**装饰的变量具备了状态数据的含义: + + +``` +@Component +struct MyComponent { + @State count: number = 0 +} +``` + + +装饰器可以书写在同一行上: + + +``` +@Entry @Component struct MyComponent { +} +``` + + +但更推荐书写在多行上: + + +``` +@Entry +@Component +struct MyComponent { +} +``` + + +## 支持的装饰器列表 + +| 装饰器 | 装饰内容 | 说明 | +| -------- | -------- | -------- | +| @Component | struct | 结构体在装饰后具有基于组件的能力,需要实现**build**方法来更新UI。 | +| @Entry | struct | 组件被装饰后作为页面的入口,页面加载时将被渲染显示。 | +| @State | 基本数据类型,类,数组 | 修饰的状态数据被修改时会触发组件的**build**方法进行UI界面更新。 | +| @Prop | 基本数据类型 | 修改后的状态数据用于在父组件和子组件之间建立单向数据依赖关系。修改父组件关联数据时,更新当前组件的UI。 | +| @Link | 基本数据类型,类,数组 | 父子组件之间的双向数据绑定。父组件的内部状态数据作为数据源。任何一方所做的修改都会反映给另一方。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" similarity index 74% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" index 54de94676e038835c12f7aa02aac6373d757f762..d7e35f354925607439c8dd2b10f391158a23be81 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/02.\351\223\276\345\274\217\350\260\203\347\224\250.md" @@ -1,6 +1,6 @@ --- title: 链式调用 -permalink: /pages/000b0101010501 +permalink: /pages/01080203030602 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 链式调用 +# 链式调用 + + 允许开发者以“.”链式调用的方式配置UI结构及其属性、事件等。 + ``` Column() { Image('1.jpg') @@ -23,4 +26,3 @@ Column() { .height(100) }.padding(10) ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" similarity index 75% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" index c4751e579664cef45f047147a6686b344453d6c1..90bc86a9fac1ba4a6beefe0c23138faad281147f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/03.struct\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: struct对象 -permalink: /pages/000b0101010502 +permalink: /pages/01080203030603 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# struct对象 +# struct对象 + + 组件可以基于**struct**实现,组件不能有继承关系,**struct**可以比**class**更加快速的创建和销毁。 + ``` @Component struct MyComponent { @@ -24,4 +27,3 @@ struct MyComponent { } } ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" similarity index 73% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" index a7b6bd0c4e87051d51ead22f92bc17cbf6a4cb70..6c3bde11311275b0e74571d857fbec5e10e31df9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/04.\345\234\250\345\256\236\344\276\213\345\214\226\350\277\207\347\250\213\344\270\255\347\234\201\347\225\245\"new\".md" @@ -1,6 +1,6 @@ --- title: 在实例化过程中省略\new\ -permalink: /pages/000b0101010503 +permalink: /pages/01080203030604 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 在实例化过程中省略"new" +# 在实例化过程中省略"new" + + 对于**struct**的实例化,可以省略**new**。 + ``` // 定义 @Component @@ -33,4 +36,3 @@ new Column() { new MyComponent() } ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" index 55e3b656893108b5bb2f4842099470a8aa8e6400..fdf4ce0720127740a246beea95561895dab1c221 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/05.\347\273\204\344\273\266\345\210\233\345\273\272\344\275\277\347\224\250\347\213\254\347\253\213\344\270\200\350\241\214.md" @@ -1,6 +1,6 @@ --- title: 组件创建使用独立一行 -permalink: /pages/000b0101010504 +permalink: /pages/01080203030605 navbar: true sidebar: true prev: true @@ -9,12 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 组件创建使用独立一行 +# 组件创建使用独立一行 + + **每行代码末尾可以省略分号";"** + ``` Column() { Image('icon.png') @@ -22,8 +25,10 @@ Column() { } ``` + 等同于: + ``` Column() { Image('icon.png'); @@ -31,10 +36,13 @@ Column() { } ``` + **每行只允许创建一个组件。if, else, else if, ForEach语句单独一行。** + 无效示例: + ``` Column() { Image('icon.png') Text('text') // invalid, creation of two components in same line @@ -43,10 +51,13 @@ Column() { if (this.condi) {Image('icon.png')} // invalid, if and creation a components in same line ``` -**内置容器组件、if和ForEach项生成器函数必须在单个子项的情况下使用封闭括号"\{\}"。** + +**内置容器组件、if和ForEach项生成器函数必须在单个子项的情况下使用封闭括号"{}"。** + 无效示例: + ``` if (this.condi) Image('icon.png'), // invalid, missing {} @@ -54,10 +65,10 @@ else Text('text'); ``` + ``` ForEach(this.arr, (item) => Image('icon.png'), // invalid, missing {} (item) => item.id.toString() } ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" index 45b1207f5127224a44f27f4ff6f872ee21a9e33d..e84c8f73926dd015615c2d3f78500c0c2b7d7681 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/06.\347\224\237\346\210\220\345\231\250\345\207\275\346\225\260\345\206\205\344\275\277\347\224\250TS\350\257\255\350\250\200\347\232\204\351\231\220\345\210\266.md" @@ -1,6 +1,6 @@ --- title: 生成器函数内使用TS语言的限制 -permalink: /pages/000b0101010505 +permalink: /pages/01080203030606 navbar: true sidebar: true prev: true @@ -9,21 +9,30 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- -# 生成器函数内使用TS语言的限制 +# 生成器函数内使用TS语言的限制 + + TS语言的使用在生成器函数中存在一定的限制: -- 表达式仅允许在字符串\($\{expression\}\)、if条件、ForEach的参数和组件的参数中使用; -- 这些表达式中的任何一个都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; -- 允许在生成器函数体的第一行使用console.log,以便开发人员更容易跟踪组件重新渲染。对日志字符串文字中表达式仍遵循上述限制。 -- 生成器函数内部不能有局部变量。 + +- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用; + +- 这些表达式中的任何一个都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; + +- 允许在生成器函数体的第一行使用console.log,以便开发人员更容易跟进组件重新渲染。对日志字符串文字中表达式仍遵循上述限制。 + +- 生成器函数内部不能有局部变量。 + 上述限制都不适用于事件处理函数(例如**onClick**)的匿名函数实现,它们也不适用于UI组件描述外的其余部分。 + 非法示例: + ``` build() { let a: number = 1 // invalid: variable declaration not allowed @@ -36,4 +45,3 @@ build() { Text(this.calcTextValue()) // this function call is ok. } ``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" similarity index 81% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" index 4e66a4ad948f93016603a7d6d596cdf14d39d211..b3711f3c294578f1d027feedf5ef149d81bb8ce8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/01.\345\210\233\345\273\272\345\243\260\346\230\216\345\274\217UI\345\267\245\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 创建声明式UI工程 -permalink: /pages/000701010200 +permalink: /pages/010802030401 navbar: true sidebar: true prev: true @@ -9,28 +9,30 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 创建声明式UI工程 -创建工程之前,首先需要安装DevEco Studio,[下载安装教程](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/deveco-studio-overview.md)。 -1. 打开DevEco Studio,点击Create Project。如果已有一个工程,则点击File>New>New project。 +创建工程之前,首先需要安装DevEco Studio,[下载安装教程](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)。 + + +1. 打开DevEco Studio,点击Create Project。如果已有一个工程,则点击File > New > New project。 ![zh-cn_image_0000001168956332](/images/application-dev/ui/figures/zh-cn_image_0000001168956332.png) 2. - 进入选择ability template界面,选择[Standard]Empty Ability。 + 进入选择ability template界面,选择[Standard]Empty Ability。 ![zh-cn_image_0000001168059158](/images/application-dev/ui/figures/zh-cn_image_0000001168059158.png) 3. - 安装OpenHarmony sdk + 安装OpenHarmony SDK。 ![zh-cn_image_0000001213462329](/images/application-dev/ui/figures/zh-cn_image_0000001213462329.png) 4. 进入配置工程界面,将工程名字改为HealthyDiet,Project Type选择Application,Device Type选择Phone,Language选择eTS,选择兼容API Version 7。DevEco Studio会默认将工程保存在C盘,如果要更改工程保存位置,点击Save Location的文件夹图标,自行指定工程创建位置。配置完成后点击Finish。 - + ![zh-cn_image_0000001167746622](/images/application-dev/ui/figures/zh-cn_image_0000001167746622.png) @@ -72,6 +74,6 @@ date: 2021-12-30 18:31:35 8. 应用安装到手机上运行应用。将手机连接电脑,等IDE识别到物理设备后,点击Run 'entry'按钮。 ![zh-cn_image_0000001148858818](/images/application-dev/ui/figures/zh-cn_image_0000001148858818.png) - 在安装之前,需要[配置应用签名](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/configuring-openharmony-app-signature.md),安装成功后,点击屏幕上的Run图标打开应用,可以看到居中加粗显示的“Hello World”。 + 在安装之前,需要配置应用签名,[配置应用签名教程](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/configuring-openharmony-app-signature.md)。安装成功后,点击屏幕上的Run图标打开应用,可以看到居中加粗显示的“Hello World”。 ![zh-cn_image_0000001158896538](/images/application-dev/ui/figures/zh-cn_image_0000001158896538.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" index 04952e6010c47e278b8165c2bcb90483583594eb..2d8dead8c9fa62a39407098c6a33ed3363c4b406 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/02.\345\210\235\350\257\206Component.md" @@ -1,6 +1,6 @@ --- title: 初识Component -permalink: /pages/000701010201 +permalink: /pages/010802030402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 初识Component @@ -18,7 +18,7 @@ date: 2021-12-30 18:31:35 ## 组件和装饰器 -在声明式UI中,所有的页面都是由组件构成。组件的数据结构为struct,装饰器[@Component](/pages/000b010101010200)是组件化的标志。用@Component修饰的struct表示这个结构体有了组件化的能力。 +在声明式UI中,所有的页面都是由组件构成。组件的数据结构为struct,装饰器[@Component](/pages/0108020303020301)是组件化的标志。用@Component修饰的struct表示这个结构体有了组件化的能力。 自定义组件的声明方式为: @@ -35,7 +35,7 @@ interface Builder { } ``` -[@Entry](/pages/000b010101010201)修饰的Component表示该Component是页面的总入口,也可以理解为页面的根节点。值得注意的是,一个页面有且仅能有一个@Entry,只有被@Entry修饰的组件或者其子组件,才会在页面上显示。 +[@Entry](/pages/0108020303020302)修饰的Component表示该Component是页面的总入口,也可以理解为页面的根节点。值得注意的是,一个页面有且仅能有一个@Entry,只有被@Entry修饰的组件或者其子组件,才会在页面上显示。 @Component和@Entry都是基础且十分重要的装饰器。简单地理解,装饰器就是某一种修饰,给被装饰的对象赋予某一种能力,比如@Entry就是页面入口的能力,@Component就是组件化能力。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" index d21b880064a1f1a3c30e05722e2126b75d8a3ff5..902ee6b7f41e36790032d5621b2c2c21a21aa999 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\344\275\223\351\252\214\345\243\260\346\230\216\345\274\217UI/03.\345\210\233\345\273\272\347\256\200\345\215\225\350\247\206\345\233\276.md" @@ -1,6 +1,6 @@ --- title: 创建简单视图 -permalink: /pages/000701010202 +permalink: /pages/010802030403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 创建简单视图 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" index 6f53fbaf2a88e99075856cff22abc90429e8e094..1d83fcae41676db235e7687ddcda6e7275b656b9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/01.\346\236\204\345\273\272\351\243\237\347\211\251\346\225\260\346\215\256\346\250\241\345\236\213.md" @@ -1,6 +1,6 @@ --- title: 构建食物数据模型 -permalink: /pages/000701010300 +permalink: /pages/010802030501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 构建食物数据模型 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" index c8c7b5d0db13c27f49fe5b0b616b5c35c1489f2b..661839014716e0aaa70df5d55af6eddf20e14e1a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/02.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\227\350\241\250List\345\270\203\345\261\200.md" @@ -1,6 +1,6 @@ --- title: 构建食物列表List布局 -permalink: /pages/000701010301 +permalink: /pages/010802030502 navbar: true sidebar: true prev: true @@ -9,10 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:49 --- # 构建食物列表List布局 + + 使用List组件和ForEach循环渲染,构建食物列表布局。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" index c0918498b85afabbe08bda548bf284b0e39f212e..5924e8abf2122de618a85095dee19101d931a476 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/03.\346\236\204\345\273\272\351\243\237\347\211\251\345\210\206\347\261\273Grid\345\270\203\345\261\200.md" @@ -1,6 +1,6 @@ --- title: 构建食物分类Grid布局 -permalink: /pages/000701010302 +permalink: /pages/010802030503 navbar: true sidebar: true prev: true @@ -9,10 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 构建食物分类Grid布局 + + 健康饮食应用在主页提供给用户两种食物显示方式:列表显示和网格显示。开发者将实现通过页签切换不同食物分类的网格布局。 @@ -292,7 +294,7 @@ date: 2021-12-30 18:31:35 ``` 11. 设置不同食物分类的Grid的行数和高度。因为不同分类的食物数量不同,所以不能用'1fr 1fr 1fr 1fr 1fr 1fr '常量来统一设置成6行。 - 创建gridRowTemplate和HeightValue成员变量,通过成员变量设置Grid行数和高度。 + 创建gridRowTemplate和HeightValue成员变量,通过成员变量设置Grid行数和高度。 ``` @Component diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" index 2c0fba3f67c1af7c10a21e6cc77dc38c68e9e6ef..49d2cbd9bf821e24e6df06e18b33e2a16c17b14b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\351\241\265\351\235\242\345\270\203\345\261\200\344\270\216\350\277\236\346\216\245/04.\351\241\265\351\235\242\350\267\263\350\275\254\344\270\216\346\225\260\346\215\256\344\274\240\351\200\222.md" @@ -1,6 +1,6 @@ --- title: 页面跳转与数据传递 -permalink: /pages/000701010303 +permalink: /pages/010802030504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 页面跳转与数据传递 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" index a28fb56aea68991a3e5c6a18a0b7202ac1ad3e73..8c549824a4dcf12db253b778bfebb35207d3e208 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/01.\351\237\263\351\242\221\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 音频开发概述 -permalink: /pages/00070200 +permalink: /pages/0108030101 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 音频开发概述 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..5fad94649f5f17da6de3db5f9c848d31d8bcc8e7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,192 @@ +--- +title: 音频播放开发指导 +permalink: /pages/0108030102 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 音频播放开发指导 + +## 场景介绍 + +音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。 + +**图1** 音频播放状态机 + +![zh-ch_image_20220117](/images/application-dev/media/figures/zh-ch_image_20220117.jpg) + +## 音频播放开发步骤 + +详细API含义可参考:[js-apis-media.md](/pages/010c010302) + +### 全流程场景 + +包含流程:创建实例,设置uri,播放音频,跳转播放位置,设置音量,暂停播放,获取轨道信息,停止播放,重置,释放资源等流程。 + +AudioPlayer支持的src媒体源输入类型可参考:[src属性说明](/pages/010c010302#audioplayer_属性) + +```js +function SetCallBack(audioPlayer) { + audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + console.info('audio set source success'); + //播放界面可切换至已准备好,可点击播放按钮进行播放状态 + }); + audioPlayer.on('play', () => { //设置'play'事件回调 + console.info('audio play success'); + //将播放按钮切换至可暂停状态 + }); + audioPlayer.on('pause', () => { //设置'pause'事件回调 + console.info('audio pause success'); + //将播放按钮切换至可播放状态 + }); + audioPlayer.on('stop', () => { //设置'stop'事件回调 + console.info('audio stop success'); + //播放停止,播放进度条归零,播放按钮切换至可播放状态 + }); + audioPlayer.on('reset', () => { //设置'reset'事件回调 + console.info('audio reset success'); + //需重新设置src属性后,可继续播放其他音频 + }); + audioPlayer.on('timeUpdate', (seekDoneTime) => {//设置'timeUpdate'事件回调 + if (typeof(seekDoneTime) == 'undefined') { + console.info('audio seek fail'); + return; + } + console.info('audio seek success, and seek time is ' + seekDoneTime); + //播放进度条更新到seek对应的位置 + }); + audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调 + console.info('audio volumeChange success'); + //更新音量显示 + }); + audioPlayer.on('finish', () => { //设置'finish'事件回调,播放完成触发 + console.info('audio play finish'); + }); + audioPlayer.on('error', (error) => { //设置'error'事件回调 + console.info(`audio error called, errName is ${error.name}`); + console.info(`audio error called, errCode is ${error.code}`); + console.info(`audio error called, errMessage is ${error.message}`); + }); +} + +function printfDescription(obj) { + for (let item in obj) { + let property = obj[item]; + console.info('audio key is ' + item); + console.info('audio value is ' + property); + } +} + +//1、创建实例 +let audioPlayer = media.createAudioPlayer(); +SetCallBack(audioPlayer); //设置事件回调 +//2、用户选择音频,设置uri +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp3'; //设置src属性,并触发'dataLoad'事件回调 +//3、播放音频 +audioPlayer.play(); //需等待'dataLoad'事件回调完成后,才可调用play进行播放,触发'play'事件回调 +//4、跳转播放位置 +audioPlayer.seek(30000); //触发'timeUpdate'事件回调,seek到30000ms处播放 +//5、设置音量 +audioPlayer.setVolume(0.5); //触发'volumeChange'事件回调 +//6、暂停播放 +audioPlayer.pause(); //触发'pause'事件回调,暂停播放 +//7、获取轨道信息 +audioPlayer.getTrackDescription((error, arrlist) => { //通过回调方式获取音频轨道信息 + if (typeof (arrlist) != 'undefined') { + for (let i = 0; i < arrlist.length; i++) { + printfDescription(arrlist[i]); + } + } else { + console.log(`audio getTrackDescription fail, error:${error.message}`); + } +}); +//8、停止播放 +audioPlayer.stop(); //触发'stop'事件回调 +//9、重置播放资源 +audioPlayer.reset(); //触发'reset'事件回调后,重新设置src属性,可完成切歌 +//10、释放资源 +audioPlayer.release(); //audioPlayer资源被销毁 +audioPlayer = undefined; +``` + +### 正常播放场景 + +```js +function SetCallBack(audioPlayer) { + audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + console.info('audio set source success'); + audioPlayer.play(); //调用play方法开始播放,触发'play'事件回调 + }); + audioPlayer.on('play', () => { //设置'play'事件回调 + console.info('audio play success'); + }); + audioPlayer.on('finish', () => { //设置'finish'事件回调,播放完成触发 + console.info('audio play finish'); + audioPlayer.release(); //audioPlayer资源被销毁 + audioPlayer = undefined; + }); +} + +let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 +SetCallBack(audioPlayer); //设置事件回调 +/* 用户选择音频,设置uri */ +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp3'; //设置src属性,并触发'dataLoad'事件回调 +``` + +### 切歌场景 + +```js +function SetCallBack(audioPlayer) { + audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + console.info('audio set source success'); + audioPlayer.play(); //调用play方法开始播放,触发'play'事件回调 + }); + audioPlayer.on('play', () => { //设置'play'事件回调 + console.info('audio play success'); + }); + audioPlayer.on('finish', () => { //设置'finish'事件回调,播放完成触发 + console.info('audio play finish'); + audioPlayer.release(); //audioPlayer资源被销毁 + audioPlayer = undefined; + }); +} + +let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 +SetCallBack(audioPlayer); //设置事件回调 +/* 用户选择音频,设置uri */ +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp3'; //设置src属性,并触发'dataLoad'事件回调 +/* 播放一段时间后,下发切歌指令 */ +audioPlayer.reset(); +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/next.mp3'; +``` + +### 单曲循环场景 + +```js +function SetCallBack(audioPlayer) { + audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + console.info('audio set source success'); + audioPlayer.play(); //调用play方法开始播放,触发'play'事件回调 + }); + audioPlayer.on('play', () => { //设置'play'事件回调 + console.info('audio play success'); + }); + audioPlayer.on('finish', () => { //设置'finish'事件回调,播放完成触发 + console.info('audio play finish'); + audioPlayer.release(); //audioPlayer资源被销毁 + audioPlayer = undefined; + }); +} + +let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 +SetCallBack(audioPlayer); //设置事件回调 +/* 用户选择音频,设置uri */ +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp3'; //设置src属性,并触发'dataLoad'事件回调 +audioPlayer.loop = true; //设置循环播放属性 +``` \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" index 9d61101b504e4b29bcd70a86e09a39013a55cf7f..588fb21aba5d495c295d249ec1928945eb5baf09 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/03.\351\237\263\351\242\221\347\256\241\347\220\206\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 音频管理开发指导 -permalink: /pages/00070202 +permalink: /pages/0108030103 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 音频管理开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index 8b0ef27d050c10eae86e26f299b741fee9bc8e2d..d8f68737ce0fd76403dd08669607c5d1a32a19b3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221/04.\351\237\263\351\242\221\345\275\225\345\210\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 音频录制开发指导 -permalink: /pages/00070203 +permalink: /pages/0108030104 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 音频录制开发指导 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/01.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/01.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..f0963a2b8e1faec1a082550595f37184e19beb76 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/01.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -0,0 +1,37 @@ +--- +title: 用户认证开发概述 +permalink: /pages/01080401 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 用户认证开发概述 + +提供用户认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。 + +当前用户认证能力提供2D人脸识别、3D人脸识别两种人脸识别能力,设备具备哪种识别能力,取决于设备的硬件能力和技术实现。 + +3D人脸识别技术识别率、防伪能力都优于2D人脸识别技术,但具有3D人脸能力(比如3D结构光、3D TOF等)的设备才可以使用3D人脸识别技术。 + +## 基本概念 + +人脸识别:基于人的脸部特征信息进行身份识别的一种生物特征识别技术,用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别,通常也叫做人像识别、面部识别、人脸认证。 + +## 运作机制 + +人脸识别会在摄像头和TEE(Trusted Execution Environment)之间建立安全通道,人脸图像信息通过安全通道传递到TEE中,由于人脸图像信息从REE(Rich Execution Environment)侧无法获取,从而避免了恶意软件从REE侧进行攻击。对人脸图像采集、特征提取、活体检测、特征比对等处理完全在TEE中,基于TrustZone进行安全隔离,外部的人脸框架只负责人脸的认证发起和处理认证结果等数据,不涉及人脸数据本身。 + +人脸特征数据通过TEE的安全存储区进行存储,采用高强度的密码算法对人脸特征数据进行加密和完整性保护,外部无法获取到加密人脸特征数据的密钥,保证用户的人脸特征数据不会泄露。本能力采集和存储的人脸特征数据不会在用户未授权的情况下被传出TEE,这意味着,用户未授权时,无论是系统应用还是三方应用都无法获得人脸特征数据,也无法将人脸特征数据传送或备份到任何外部存储介质。 + +## 约束与限制 + +- 当前版本提供的用户认证能力只包含人脸识别,且只支持本地认证,不提供认证界面。 +- 要求设备上具备摄像器件,且人脸图像像素大于100*100。 +- 要求设备上具有TEE安全环境,人脸特征信息高强度加密保存在TEE中。 +- 对于面部特征相似的人、面部特征不断发育的儿童,人脸特征匹配率有所不同。如果对此担忧,可考虑其他认证方式。 \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/02.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/02.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..6e327afb8a929a9f57ff9104543f4f7324ae4228 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.\347\224\250\346\210\267\350\256\244\350\257\201/02.\347\224\250\346\210\267\350\256\244\350\257\201\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,114 @@ +--- +title: 用户认证开发指导 +permalink: /pages/01080402 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 用户认证开发指导 + +## 场景介绍 + +当前用户认证支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景。 + +## 接口说明 + +userIAM_userAuth模块提供了用户认证的相关方法,包括检测认证能力、认证和取消认证等,用户可以通过人脸等生物特征信息进行认证操作。具体接口说明可以查阅[API参考](/pages/010c010401)。 + +在执行认证前,需要检查设备是否支持该认证能力,具体指认证类型、安全级别和是否本地认证。如果不支持,需要考虑使用其他认证能力。 + +**表1** 用户认证开放能力列表 + +| 接口名 | 功能描述 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| getAuthenticator(): Authenticator | 获取Authenticator对象,用于执行用户身份认证。6+
获取Authenticator对象,用于检测设备身份认证能力、执行和取消用户身份认证,获取认证过程中的提示信息。7+ | +| checkAvailability(type: AuthType, level: SecureLevel): number | 根据指定的认证类型、安全等级,检测当前设备是否支持相应的认证能力。 | +| execute(type: AuthType, level: SecureLevel, callback: AsyncCallback\): void | 执行用户认证,使用callback方式作为异步方法。 | +| execute(type: AuthType, level: SecureLevel): Promise\ | 执行用户认证,使用Promise方式作为异步方法。 | +| cancel(): void | 取消当前的认证流程。 | +| on(type: "tip", callback: Callback\): void | 订阅指定类型的事件。 | +| off(type: "tip", callback?: Callback\): void | 取消订阅指定类型的事件。 | + +## 开发步骤 + +开发前请完成以下准备工作: + +1. 在应用配置权限文件中,增加ohos.permission.ACCESS_BIOMETRIC的权限声明。 +2. 在使用用户认证能力的代码文件中增加import userIAM_userAuth from '@ohos.userIAM.userAuth'。 + +开发过程: + +1. 获取Authenticator的单例对象,代码示例如下: + + ```js + let auth = userIAM_userAuth.getAuthenticator(); + ``` + +2. 检测设备是否具有指定级别的认证能力: + + 2D人脸识别支持低于S2级别的认证,3D人脸识别支持低于S3级别的认证。代码示例如下: + + ```js + let authenticator = userIAM_userAuth.getAuthenticator(); + let checkCode = authenticator.checkAvailability("FACE_ONLY", "S2"); + if (checkCode == userIAM_userAuth.CheckAvailabilityResult.SUPPORTED) { + console.info("check auth support success"); + } else { + console.error("check auth support fail, code = " + checkCode); + } + ``` + +3. (可选)订阅人脸tip信息,代码示例如下: + + ```js + let authenticator = userIAM_userAuth.getAuthenticator(); + let tipCallback = (tip)=>{ + console.info("receive tip: errorCode(" + tip.errorCode + ") code(" + tip.tipCode +") event(" + + tip.tipEvent + ") info(" + tip.tipInfo + ")"); + }; + authenticator.on("tip", tipCallback); + ``` + +4. 执行认证操作,代码示例如下: + + ```js + let authenticator = userIAM_userAuth.getAuthenticator(); + authenticator.execute("FACE_ONLY", "S2").then((code)=>{ + authenticator.off("tip", tipCallback); + console.info("auth success"); + }).catch((code)=>{ + authenticator.off("tip", tipCallback); + console.error("auth fail, code = " + code); + }); + ``` + +5. (仅执行订阅信息后需要)取消订阅人脸tip信息: + + ```js + let authenticator = userIAM_userAuth.getAuthenticator(); + let tipCallback = (tip)=>{ + console.info("receive tip: errorCode(" + tip.errorCode + ") code(" + tip.tipCode + ") event(" + + tip.tipEvent + ") info(" + tip.tipInfo + ")"); + }; + // 取消订阅指定回调 + authenticator.off("tip", tipCallback); + // 取消订阅所有回调authenticator.off("tip"); + ``` + +6. 认证过程中取消认证,代码示例如下: + + ```js + let authenticator = userIAM_userAuth.getAuthenticator(); + let cancelCode = authenticator.cancel(); + if (cancelCode == userIAM_userAuth.Result.SUCCESS) { + console.info("cancel auth success"); + } else { + console.error("cancel auth fail"); + } + ``` \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" similarity index 81% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" index 3397c55b8f146753220ac8dbd96247f5410581e7..c6358c567b41b9c1413a91236f4edb8a08f0b38d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/01.IPC\344\270\216RPC\351\200\232\344\277\241\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: IPC与RPC通信概述 -permalink: /pages/00070300 +permalink: /pages/01080501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # IPC与RPC通信概述 @@ -24,9 +24,8 @@ IPC(Inter-Process Communication)与RPC(Remote Procedure Call)机制用 ## 约束与限制 -目前暂不支持的场景: - -跨设备RPC +单个设备上跨进程通信时,传输的数据量最大约为1MB,过大的数据量请使用匿名共享内存。 +不支持把跨设备的Proxy对象传递回该Proxy对象所指向的Stub对象所在的设备。 ## 相关模块 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" index 963026eeff3870bd1e6f211443b37efbb3cde1d0..baebb691745a4c09fbbe2f71fcda66cd0ff7b422 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/02.IPC\344\270\216RPC\351\200\232\344\277\241\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: IPC与RPC通信开发指导 -permalink: /pages/00070301 +permalink: /pages/01080502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # IPC与RPC通信开发指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" similarity index 76% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" index 85503db624aac44a0479da6a13e50d12b89e0990..063e78e17824eb6e8603eadaf2a53eaa0840efa9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/04.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.IPC\344\270\216RPC\351\200\232\344\277\241/03.\350\277\234\347\253\257\347\212\266\346\200\201\350\256\242\351\230\205\345\274\200\345\217\221\345\256\236\344\276\213.md" @@ -1,6 +1,6 @@ --- title: 远端状态订阅开发实例 -permalink: /pages/00070302 +permalink: /pages/01080503 navbar: true sidebar: true prev: true @@ -9,15 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 远端状态订阅开发实例 -IPC/RPC 提供对远端 Stub对象状态的订阅机制, 在远端 Stub对象死亡时,可触发死亡通知告诉本地 Proxy对象。这种状态通知订阅并不会自动附加在每个本地 Proxy对象上,需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现死亡通知接口DeathRecipient并实现onRemoteDied方法,清理资源,该方法会在 远端 Stub对象所在进程死亡,或所在设备离开组网时被回调。值得注意的是,调用这些接口有一定的顺序。首先,必然需要 Proxy订阅 Stub死亡通知,若在订阅期间未发生 Stub死亡,则可在不再需要时取消订阅;若在订阅期间发生 Stub死亡,则会自动触发 Proxy自定义的后续操作,也无需再手动取消订阅。 +IPC/RPC 提供对远端 Stub对象状态的订阅机制, 在远端 Stub对象死亡时,可触发死亡通知告诉本地 Proxy对象。这种状态通知订阅并不会自动附加在每个本地 Proxy对象上,需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现死亡通知接口DeathRecipient并实现onRemoteDied方法,清理资源,该方法会在 远端 Stub对象所在进程死亡,或所在设备离开组网时被回调。值得注意的是,调用这些接口有一定的顺序。首先,需要 Proxy订阅 Stub死亡通知,若在订阅期间Stub状态正常,则可在不再需要时取消订阅;若在订阅期间 Stub所在进程退出,或者所在设备退出组网,则会自动触发 Proxy自定义的后续操作。 -RPC目前不提供匿名 Stub对象的死亡通知,即只有向 SAMgr注册过的服务才能被订阅死亡通知。 IPC则支持匿名对象的死亡通知。 - **Native侧接口** diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/01.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/01.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..58063151bcbb98510276fc80959c2cfcfe143a8b --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/01.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\346\246\202\350\277\260.md" @@ -0,0 +1,105 @@ +--- +title: 分布式数据服务概述 +permalink: /pages/01080601 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 分布式数据服务概述 + +分布式数据服务(Distributed Data Service,DDS) 为应用程序提供不同设备间数据库的分布式协同能力。通过调用分布式数据接口,应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组,分布式数据服务对属于不同应用的数据进行隔离,保证不同应用之间的数据不能通过分布式数据服务互相访问。在通过可信认证的设备间,分布式数据服务支持应用数据相互同步,为用户提供在多种终端设备上最终一致的数据访问体验。 + + +## 基本概念 + +- **KV数据模型** + “KV数据模型”是“Key-Value数据模型”的简称,“Key-Value”即“键-值”;其数据以键值对的形式进行组织、索引和存储。 + + KV数据模型适合不涉及过多数据关系和业务关系的业务数据存储,比SQL数据库存储拥有更好的读写性能,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。分布式数据库也是基于KV数据模型,对外提供KV类型的访问接口。 + +- **分布式数据库事务性** + 分布式数据库事务支持本地事务(和传统数据库的事务概念一致)和同步事务。同步事务是指在设备之间同步数据时,以本地事务为单位进行同步,一次本地事务的修改要么都同步成功,要么都同步失败。 + +- **分布式数据库一致性** + 在分布式场景中一般会涉及多个设备,组网内设备之间看到的数据是否一致称为分布式数据库的一致性。分布式数据库一致性可以分为**强一致性**、**弱一致性**和**最终一致性**。 + + - **强一致性**:是指某一设备成功增、删、改数据后,组网内设备对该数据的读取操作都将得到更新后的值。 + - **弱一致性**:是指某一设备成功增、删、改数据后,组网内设备可能读取到本次更新数据,也可能读取不到,不能保证在多长时间后每个设备的数据一定是一致的。 + - **最终一致性**:是指某一设备成功增、删、改数据后,组网内设备可能读取不到本次更新数据,但在某个时间窗口之后组网内设备的数据能够达到一致状态。 + + 强一致性对分布式数据的管理要求非常高,在服务器的分布式场景可能会遇到。因为移动终端设备的不常在线、以及无中心的特性,分布式数据服务不支持强一致性,只支持最终一致性。 + +- **分布式数据库同步** + 底层通信组件完成设备发现和认证,会通知上层应用程序(包括分布式数据服务)设备上线。收到设备上线的消息后分布式数据服务可以在两个设备之间建立加密的数据传输通道,利用该通道在两个设备之间进行数据同步。 + + 分布式数据服务提供了两种同步方式:**手动同步**和**自动同步**。 + + - **手动同步**:由应用程序调用sync接口来触发,需要指定同步的设备列表和同步模式。同步模式分为PULL_ONLY(将远端数据拉到本端)、PUSH_ONLY(将本端数据推送到远端)和PUSH_PULL(将本端数据推送到远端同时也将远端数据拉取到本端)。内部接口支持按条件过滤同步,将符合条件的数据同步到远端。 + - **自动同步**:包括全量同步和按条件订阅同步。全量同步由分布式数据库自动将本端数据推送到远端,同时也将远端数据拉取到本端来完成数据同步,同步时机包括设备上线、应用程序更新数据等,应用不需要主动调用sync接口;内部接口支持按条件订阅同步,将远端符合订阅条件的数据自动同步到本端。 + +- **单版本分布式数据库** + 单版本是指数据在本地保存是以单个KV条目为单位的方式保存,对每个Key最多只保存一个条目项,当数据在本地被用户修改时,不管它是否已经被同步出去,均直接在这个条目上进行修改。同步也以此为基础,按照它在本地被写入或更改的顺序将当前最新一次修改逐条同步至远端设备。 + +- **设备协同分布式数据库** + 设备协同分布式数据库建立在单版本分布式数据库之上,对应用程序存入的KV数据中的Key前面拼接了本设备的DeviceID标识符,这样能保证每个设备产生的数据严格隔离,底层按照设备的维度管理这些数据,设备协同分布式数据库支持以设备的维度查询分布式数据,但是不支持修改远端设备同步过来的数据。 + +- **分布式数据库冲突解决策略** + 分布式数据库多设备提交冲突场景,在给提交冲突做合并的过程中,如果多个设备同时修改了同一数据,则称这种场景为数据冲突。数据冲突采用默认冲突解决策略(Last-write-wins),基于提交时间戳,取时间戳较大的提交数据,当前不支持定制冲突解决策略。 + +- **数据库Schema化管理与谓词查询** + 单版本数据库支持在创建和打开数据库时指定Schema,数据库根据Schema定义感知KV记录的Value格式,以实现对Value值结构的检查,并基于Value中的字段实现索引建立和谓词查询。 + +- **分布式数据库备份能力** + 提供分布式数据库备份能力,业务通过设置backup属性为true,可以触发分布式数据服务每日备份。当分布式数据库发生损坏,分布式数据服务会删除损坏数据库,并且从备份数据库中恢复上次备份的数据。如果不存在备份数据库,则创建一个新的数据库。同时支持加密数据库的备份能力。 + + +## 运作机制 + +分布式数据服务支撑OpenHarmony系统上应用程序数据库数据分布式管理,支持数据在相同帐号的多端设备之间相互同步,为用户在多端设备上提供一致的用户体验,分布式数据服务包含五部分: + +- **服务接口** + 分布式数据服务提供专门的数据库创建、数据访问、数据订阅等接口给应用程序调用,接口支持KV数据模型,支持常用的数据类型,同时确保接口的兼容性、易用性和可发布性。 + +- **服务组件** + 服务组件负责服务内元数据管理、权限管理、加密管理、备份和恢复管理以及多用户管理等、同时负责初始化底层分布式DB的存储组件、同步组件和通信适配层。 + +- **存储组件** + 存储组件负责数据的访问、数据的缩减、事务、快照、数据库加密,以及数据合并和冲突解决等特性。 + +- **同步组件** + 同步组件连结了存储组件与通信组件,其目标是保持在线设备间的数据库数据一致性,包括将本地产生的未同步数据同步给其他设备,接收来自其他设备发送过来的数据,并合并到本地设备中。 + +- **通信适配层** + 通信适配层负责调用底层公共通信层的接口完成通信管道的创建、连接,接收设备上下线消息,维护已连接和断开设备列表的元数据,同时将设备上下线信息发送给上层同步组件,同步组件维护连接的设备列表,同步数据时根据该列表,调用通信适配层的接口将数据封装并发送给连接的设备。 + +应用程序通过调用分布式数据服务接口实现分布式数据库创建、访问、订阅功能,服务接口通过操作服务组件提供的能力,将数据存储至存储组件,存储组件调用同步组件实现将数据同步,同步组件使用通信适配层将数据同步至远端设备,远端设备通过同步组件接收数据,并更新至本端存储组件,通过服务接口提供给应用程序使用。 + + +**图1** 数据分布式运作示意图 + + +![zh-cn_image_0000001183386164](/images/application-dev/database/figures/zh-cn_image_0000001183386164.png) + + +## 约束与限制 + +- 分布式数据服务的数据模型仅支持KV数据模型,不支持外键、触发器等关系型数据库中的功能。 + +- 分布式数据服务支持的KV数据模型规格: + - 设备协同数据库,针对每条记录,Key的长度≤896 Byte,Value的长度<4 MB。 + - 单版本数据库,针对每条记录,Key的长度≤1 KB,Value的度<4 MB。 + - 每个应用程序最多支持同时打开16个分布式数据库。 + +- 分布式数据库与本地数据库的使用场景不同,因此开发者应识别需要在设备间进行同步的数据,并将这些数据保存到分布式数据库中。 + +- 分布式数据服务当前不支持应用程序自定义冲突解决策略。 + +- 分布式数据服务针对每个应用程序当前的流控机制:KvStore的接口1秒最大访问1000次,1分钟最大访问10000次;KvManager的接口1秒最大访问50次,1分钟最大访问500次。 + +- 分布式数据库事件回调方法中不允许进行阻塞操作,例如修改UI组件。 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..90bed6132caf7d030fe18dfdf1a0a7e3a2584bd4 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,185 @@ +--- +title: 分布式数据服务开发指导 +permalink: /pages/01080602 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 分布式数据服务开发指导 + +## 场景介绍 + +分布式数据服务主要实现用户设备中应用程序数据内容的分布式同步。当设备1上的应用A在分布式数据库中增、删、改数据后,设备2上的应用A也可以获取到该数据库变化。可在分布式图库、信息、通讯录、文件管理器等场景中使用。 + + +## 接口说明 + +OpenHarmony系统中的分布式数据服务模块为开发者提供下面几种功能: + +**表1** 分布式数据服务关键API功能介绍 + +| 功能分类 | 接口名称 | 描述 | +| -------- | -------- | -------- | +| 分布式数据库创建。 | createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void
createKVManager(config: KVManagerConfig): Promise<KVManager> | 创建一个KVManager对象实例,用于管理数据库对象。 | +| getKVStore<T extends KVStore>(storeId: string, options: Options, callback: AsyncCallback<T>): void
getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> | 指定Options和storeId,创建并获取KVStore数据库。 | +| 分布式数据增、删、改、查。 | put(key: string, value: Uint8Array \| string \| number \| boolean, callback: AsyncCallback<void>): void
put(key: string, value: Uint8Array \| string \| number \| boolean): Promise<void> | 插入和更新数据。 | +| delete(key: string, callback: AsyncCallback<void>): void
delete(key: string): Promise<void> | 删除数据。 | +| get(key: string, callback: AsyncCallback<Uint8Array \| string \| boolean \| number>): void
get(key: string): Promise<Uint8Array \| string \| boolean \| number> | 查询数据。 | +| 订阅分布式数据变化。 | on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void
on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void | 订阅数据库中数据的变化。 | +| 分布式数据同步。 | sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void | 在手动模式下,触发数据库同步。 | + + +## 开发步骤 + +以单版本分布式数据库为例,说明开发步骤。 + +1. 导入模块。 + ``` + import distributedData from '@ohos.data.distributedData'; + ``` + +2. 根据配置构造分布式数据库管理类实例。 + 1. 根据应用上下文创建KvManagerConfig对象。 + 2. 创建分布式数据库管理器实例。 + + 以下为创建分布式数据库管理器的代码示例: + ``` + let kvManager; + try { + const kvManagerConfig = { + bundleName : 'com.example.datamanagertest', + userInfo : { + userId : '0', + userType : distributedData.UserType.SAME_USER_ID + } + } + distributedData.createKVManager(kvManagerConfig, function (err, manager) { + if (err) { + console.log("createKVManager err: " + JSON.stringify(err)); + return; + } + console.log("createKVManager success"); + kvManager = manager; + }); + } catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + +3. 获取/创建分布式数据库。 + 1. 声明需要创建的分布式数据库ID描述。 + 2. 创建分布式数据库,建议关闭自动同步功能(autoSync:false),需要同步时主动调用sync接口。 + + 以下为创建分布式数据库的代码示例: + ``` + let kvStore; + try { + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : false, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + securityLevel : distributedData.SecurityLevel.S2, + }; + kvManager.getKVStore('storeId', options, function (err, store) { + if (err) { + console.log("getKVStore err: " + JSON.stringify(err)); + return; + } + console.log("getKVStore success"); + kvStore = store; + }); + } catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + > ![icon-note.gif](/images/application-dev/database/public_sys-resources/icon-note.gif) **说明:** + > 组网设备间同步数据的场景,建议在应用启动时打开分布式数据库,获取数据库的句柄。在该句柄(如上例中的kvStore)的生命周期内无需重复创建数据库,可直接使用句柄对数据库进行数据的插入等操作。 + +4. 订阅分布式数据变化。 + 以下为订阅单版本分布式数据库数据变化通知的代码示例: + ``` + kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) { + console.log("dataChange callback call data: " + JSON.stringify(data)); + }); + ``` + +5. 将数据写入分布式数据库。 + 1. 构造需要写入分布式数据库的Key(键)和Value(值)。 + 2. 将键值数据写入分布式数据库。 + + 以下为将字符串类型键值数据写入分布式数据库的代码示例: + + ``` + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; + } + console.log("put success"); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + +6. 查询分布式数据库数据。 + 1. 构造需要从单版本分布式数据库中查询的Key(键)。 + 2. 从单版本分布式数据库中获取数据。 + + 以下为从分布式数据库中查询字符串类型数据的代码示例: + ``` + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; + } + console.log("put success"); + kvStore.get(KEY_TEST_STRING_ELEMENT, function (err,data) { + console.log("get success data: " + data); + }); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + +7. 同步数据到其他设备。 + 1.选择同一组网环境下的设备以及同步模式,进行数据同步。 + + 以下为单版本分布式数据库进行数据同步的代码示例,其中deviceIds可由deviceManager调用getTrustedDeviceListSync()方法得到,1000表示最大延迟时间为1000ms: + ``` + import deviceManager from '@ohos.distributedHardware.deviceManager'; + + let devManager; + // create deviceManager + deviceManager.createDeviceManager("bundleName", (err, value) => { + if (!err) { + devManager = value; + } + }); + + // get deviceIds + let deviceIds = []; + if (devManager != null) { + var deviceList = devManager.getTrustedDeviceListSync(); + for (var i = 0; i < deviceList.length; i++) { + deviceIds[i] = deviceList[i].deviceId; + } + } + kvStore.sync(deviceIds, distributedData.SyncMode.PUSH_ONLY, 1000); + ``` diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/01.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/01.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..ca63d3c1a7252c0efb1dc531bc36926aa9e37640 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/01.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\246\202\350\277\260.md" @@ -0,0 +1,33 @@ +--- +title: USB服务开发概述 +permalink: /pages/01080701 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# USB服务开发概述 + +## 基本概念 + +OpenHarmony USB服务是应用访问底层的一种设备抽象概念。开发者根据提供的USB API,可以获取设备列表、控制设备访问权限、以及与连接的设备进行数据传输、控制命令传输等。 + + +## 运作机制 + +OpenHarmony USB服务系统包含USB API、USB Service、USB HAL。 + +**图2** USB服务运作机制 + +![zh-cn_image_0000001237821727](/images/application-dev/usb/figures/zh-cn_image_0000001237821727.png) + +- USB API:提供USB的基础API,主要包含查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 + +- USB Service:主要实现HAL层数据的接收、解析、分发,前后台的策略管控以及对设备的管理等。 + +- USB HAL层:提供给用户态可直接调用的驱动能力接口。 diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/02.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/02.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..8ac40d57c02f6e8a578f470bcf29a67c037898a6 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/07.USB\346\234\215\345\212\241/02.USB\346\234\215\345\212\241\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,168 @@ +--- +title: USB服务开发指导 +permalink: /pages/01080702 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# USB服务开发指导 + + + +## 场景介绍 + +Host模式下,可以获取到已经连接的设备列表,并根据需要打开和关闭设备、控制设备权限、进行数据传输等。 + + +## 接口说明 + +OpenHarmony USB服务主要提供的功能有:查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 + +USB类开放能力如下,具体请查阅API参考文档。 + +**表1** USB类的开放能力接口 + +| 接口名 | 描述 | +| -------- | -------- | +| hasRight(deviceName: string): boolean | 如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。 | +| requestRight(deviceName: string): Promise<boolean> | 请求给定软件包的临时权限以访问设备。 | +| connectDevice(device: USBDevice): Readonly<USBDevicePipe> | 根据getDevices()返回的设备信息打开USB设备。 | +| getDevices(): Array<Readonly<USBDevice>> | 返回USB设备的列表。 | +| setConfiguration(pipe: USBDevicePipe, config: USBConfig): number | 设置设备的配置。 | +| setInterface(pipe: USBDevicePipe, iface: USBInterface): number | 设置设备的接口。 | +| claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number | 获取接口。 | +| function bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise<number> | 批量传输。 | +| closePipe(pipe: USBDevicePipe): number | 关闭设备消息控制通道。 | +| releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number | 释放接口。 | +| getFileDescriptor(pipe: USBDevicePipe): number | 获取文件描述符。 | +| getRawDescriptor(pipe: USBDevicePipe): Uint8Array | 获取原始的USB描述符。 | +| controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise<number> | 控制传输。 | + + +## 开发步骤 + +USB设备可作为Host设备连接Device设备进行数据传输。开发示例如下: + + +1. 获取设备列表。 + ``` + // 导入usb接口api包。 + import usb from '@ohos.usb'; + // 获取设备列表。 + var deviceList = usb.getDevices(); + /* + deviceList结构示例 + [ + { + name: "1-1", + serial: "", + manufacturerName: "", + productName: "", + version: "", + vendorId: 7531, + productId: 2, + clazz: 9, + subclass: 0, + protocol: 1, + devAddress: 1, + busNum: 1, + configs: [ + { + id: 1, + attributes: 224, + isRemoteWakeup: true, + isSelfPowered: true, + maxPower: 0, + name: "1-1", + interfaces: [ + { + id: 0, + protocol: 0, + clazz: 9, + subclass: 0, + alternateSetting: 0, + name: "1-1", + endpoints: [ + { + address: 129, + attributes: 3, + interval: 12, + maxPacketSize: 4, + direction: 128, + number: 1, + type: 3, + interfaceId: 0, + }, + ], + }, + ], + }, + ], + }, + ], + */ + ``` + +2. 获取设备操作权限。 + ``` + var deviceName = deviceList[0].name; + // 申请操作指定的device的操作权限。 + usb.requestRight(deviceName).then(hasRight => { + console.info("usb device request right result: " + hasRight); + }).catch(error => { + console.info("usb device request right failed : " + error); + }); + ``` + +3. 打开Device设备。 + ``` + // 打开设备,获取数据传输通道。 + var pipe = usb.connectDevice(deviceList[0]); + /* + 打开对应接口,在设备信息(deviceList)中选取对应的interface。 + interface为设备配置中的一个接口。 + */ + usb.claimInterface(pipe , interface, true); + ``` + +4. 数据传输。 + ``` + /* + 读取数据,在device信息中选取对应数据接收的endpoint来做数据传输 + (endpoint.direction == 0x80);dataUint8Array是要读取的数据,类型为Uint8Array。 + */ + + usb.bulkTransfer(pipe, inEndpoint, dataUint8Array, 15000).then(dataLength => { + if (dataLength >= 0) { + console.info("usb readData result Length : " + dataLength); + var resultStr = this.ab2str(dataUint8Array); // uint8数据转string。 + console.info("usb readData buffer : " + resultStr); + } else { + console.info("usb readData failed : " + dataLength); + } + }).catch(error => { + console.info("usb readData error : " + JSON.stringify(error)); + }); + // 发送数据,在device信息中选取对应数据发送的endpoint来做数据传输。(endpoint.direction == 0) + usb.bulkTransfer(pipe, endpoint, dataUint8Array, 15000).then(dataLength => { + if (dataLength >= 0) { + console.info("usb writeData result write length : " + dataLength); + } else { + console.info("writeData failed"); + } + }).catch(error => { + console.info("usb writeData error : " + JSON.stringify(error)); + }); + ``` + +5. 释放接口,关闭设备。 + ``` + usb.releaseInterface(pipe, interface); + usb.closePipe(pipe); + ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" index 557f09a78f4eb4cb129af79742567d037e1a3a3d..01052cf077206bd772d31c1ef8520f0c9ed75f44 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/01.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 应用事件打点概述 -permalink: /pages/00070400 +permalink: /pages/01080801 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 应用事件打点概述 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" index e5df03f45fa11a88a1aed14eb63927c43f53a4bf..37ed20aff66328fded12fcbcc130e92b3539d1c7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/05.\345\272\224\347\224\250\344\272\213\344\273\266\346\211\223\347\202\271/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/08.DFX/02.\345\272\224\347\224\250\344\272\213\344\273\266\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: 应用事件开发指导 -permalink: /pages/00070401 +permalink: /pages/01080802 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 应用事件开发指导 @@ -47,7 +47,7 @@ date: 2021-12-30 18:31:35 - Array类型参数值的元素个数必须在100个以内,超出时会进行截断处理。 - 参数callback:回调函数,可以在回调函数中处理接口返回值。返回值为0表示事件参数校验成功,事件正常异步写入事件文件;大于0表示事件存在异常参数,事件在忽略异常参数后再异步写入事件文件;小于0表示事件校验失败,不执行事件异步打点操作。 -当采用callback作为异步回调时,可以在callback中进行下一步处理。当采用Promise对象返回时,可以在Promise对象中类似地处理接口返回值。具体结果码说明见[事件校验结果码](/pages/00070400#事件校验结果码)。 +当采用callback作为异步回调时,可以在callback中进行下一步处理。当采用Promise对象返回时,可以在Promise对象中类似地处理接口返回值。具体结果码说明见[事件校验结果码](/pages/01080801#事件校验结果码)。 **打点配置接口功能介绍:** diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" similarity index 61% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" index 1129a86fc725dfdb3f853fbd3481b9aa01e2c4bd..35efb3c227ce087324679a6ca96fe2f96308340a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/01.\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 概述 -permalink: /pages/00070500 +permalink: /pages/01080901 navbar: true sidebar: true prev: true @@ -9,34 +9,31 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 概述 -- [总体说明](#总体说明) -- [使用约束](#使用约束) -- [DevEco Studio演进路标](#deveco-studio演进路标) ## 总体说明 -DevEco Studio 是 HarmonyOS 的配套的开发 IDE ,因为HarmonyOS 是基于OpenHarmony 开发的,因此,使用 DevEco Studio (配套 HarmonyOS )也可以进行 OpenHarmony 的应用开发。 +DevEco Studio是HarmonyOS的配套的开发IDE,因为HarmonyOS是基于OpenHarmony开发的,因此,使用DevEco Studio(配套HarmonyOS)也可以进行OpenHarmony的应用开发。 使用DevEco Studio开发OpenHarmony应用的流程与开发HarmonyOS的流程完全一样,本文档仅描述OpenHarmony应用开发与HarmonyOS应用开发的差异点。 -- **搭建开发环境差异**:OpenHarmony应用开发环境需要先安装OpenHarmony SDK,具体可参考[配置OpenHarmony SDK](/pages/00070502)章节。 +- **搭建开发环境差异**:OpenHarmony应用开发环境需要先安装OpenHarmony SDK,具体可参考[配置OpenHarmony SDK](/pages/01080903)章节。 -- **导入OpenHarmony工程**:OpenHarmony应用开发,只能通过导入Sample工程的方式来创建一个新工程,具体可参考[通过导入Sample方式创建新工程](/pages/0007050301)。 +- **创建OpenHarmony工程**:OpenHarmony应用开发,可以通过工程向导创建一个新工程,或通过导入Sample工程的方式来创建一个新工程,具体可参考[使用工程向导创建新工程](/pages/0108090401)。 -- **调试签名配置**:OpenHarmony应用运行在真机设备上,需要对应用进行签名,关于OpenHarmony应用的签名指导请参考[配置OpenHarmony应用签名信息](/pages/00070504)。 +- **调试签名配置**:OpenHarmony应用运行在真机设备上,需要对应用进行签名,关于OpenHarmony应用的签名指导请参考[配置OpenHarmony应用签名信息](/pages/01080905)。 -- **在真机设备上运行应用**:需要使用hdc工具将OpenHarmony的hap包推送到真机设备上进行安装,具体可参考[安装运行OpenHarmony应用](/pages/00070505)。 +- **在真机设备上运行应用**:将OpenHarmony的hap包推送到真机设备上进行安装,具体可参考[安装运行OpenHarmony应用](/pages/01080906)。 关于DevEco Studio的详细操作指导,请访问[HUAWEI DevEco Studio使用指南](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)。 ## 使用约束 -- OpenHarmony只支持使用JS语言开发应用,不支持Java、C/C++语言。 +- OpenHarmony只支持使用eTS、JS语言开发应用,不支持Java、C/C++语言。 - OpenHarmony开发环境DevEco Studio暂只支持Windows系统。 @@ -44,12 +41,11 @@ OpenHarmony与HarmonyOS的开发工具都是DevEco Studio,下表为OpenHarmony | 特性名称 | HarmonyOS版本 | OpenHarmony版本 | | -------- | -------- | -------- | -| 创建Module | **√** | **X** | | 服务卡片 | **√** | **X** | | 自动化签名 | **√** | **X** | | 远程模拟器 | **√** | **X** | | 本地模拟器 | **√** | **X** | -| 使用DevEco Studio运行调试、日志查看、调优 | **√** | **X** | +| 使用DevEco Studio进行日志查看、调优 | **√** | **X** | | 云测试 | **√** | **X** | | 安全测试 | **√** | **X** | diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" new file mode 100644 index 0000000000000000000000000000000000000000..998c9abba50c52920063986509dd14b50e325d37 --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" @@ -0,0 +1,45 @@ +--- +title: 版本变更说明 +permalink: /pages/01080902 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 版本变更说明 + + +## V3.0 Beta2(2021-12-31) + + +### 版本兼容性 + +DevEco Studio 3.0 Beta2版本兼容性配套关系如下表所示。 + +| 组件 | 版本要求 | 说明 | +| -------- | -------- | -------- | +| Gradle | 7.3(最低版本要求7.2) | DevEco Studio已自带了Gradle7.3版本,开发者无需单独安装。 | +| JDK | 11.0.x | DevEco Studio已自带了JDK 11版本,开发者无需单独安装。 | +| OpenHarmony SDK | 3.1.0.0(API Version 8 Beta) | 兼容历史版本SDK。 | +| Toolchinas | 3.1.0.0 | 建议更新至最新版本。 | +| hap插件 | 3.0.5.2 | 建议更新至最新版本。 | +| decctest插件 | 1.2.7.2 | 建议更新至最新版本。 | + + +### 版本变更说明 + +| | +| -------- | +| **新增特性:**
- 新增DevEco Studio支持界面功能菜单的汉化版本,默认显示为英文,如需开启汉化版本,请打开DevEco Studio的**Settings**界面,在**Plugins > installed**中手动勾选“Chinese(Simplified)”插件,然后重新启动DevEco Studio即可生效。
- 新增支持OpenHarmony应用或服务的调试和运行,支持断点管理、变量查看、Step Into\Step Over\Step Out等单步调试功能。
**增强特性:**
- OpenHarmony SDK更新至3.1.0.0版本(API Version 8 Beta),配套的hap编译构建插件版本更新至3.0.5.2。
- 工程模板新增支持低代码开发的[Standard]Empty Ability模板。
- 支持eTS组件预览,要求compileSdkVersion为8或以上。
- eTS实时预览支持边修改属性边展示预览效果,无需保存修改才生效,要求compileSdkVersion为8或以上。 | + + +## V3.0 Beta1(2021-09-29) + +| | +| -------- | +| **新增特性:**
- 新增支持OpenHarmony SDK的管理,开发者可通过DevEco Studio的SDK Manager功能来下载和管理OpenHarmony SDK。
- 在编译构建HAP包时,新增支持对单个Module进行编译,对于多Module工程中只需要编译其中一个Module的场景,可以提升编译构建速度;同时还新增支持一键重构建HAP包,即在编译构建HAP前,会自动执行Clean Project操作。
**增强特性:**
- 编译构建插件更新至3.0.3.2版本。
- Json编辑器增强,资源索引错误支持快速修复,并支持快速查看资源的取值。
- 工程视图支持Ohos视图,默认视图为Project视图,开发者可手动切换。
- OpenHarmony工程支持ark方舟编译。
- OpenHarmony工程类型标识字段supportSystem "standard",由模块级build.gradle调整至工程级build.gradle。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" similarity index 51% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" index 4db81efdd0163c7608bdf6143e6d79c26b042023..5335853a33be1ec6aef8616d52ec2d9fd9da2dc0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/03.\351\205\215\347\275\256OpenHarmonySDK.md" @@ -1,6 +1,6 @@ --- title: 配置OpenHarmonySDK -permalink: /pages/00070502 +permalink: /pages/01080903 navbar: true sidebar: true prev: true @@ -9,22 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 配置OpenHarmony SDK -- [前提条件](#前提条件) -- [配置SDK信息](#配置sdk信息) -- [参考信息](#参考信息) - - [配置DevEco Studio代理](#配置deveco-studio代理) - - [配置NPM代理](#配置npm代理) - - [设置Gradle代理](#设置gradle代理) 在设置OpenHarmony应用开发环境时,需要开发者在DevEco Studio中配置对应的SDK信息。 ->![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
->请注意,OpenHarmony SDK版本精简了部分工具链,因此不适用于HarmonyOS应用开发。 +> ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** +> 请注意,OpenHarmony SDK版本精简了部分工具链,因此不适用于HarmonyOS应用开发。 ## 前提条件 @@ -39,34 +33,29 @@ DevEco Studio通过SDK Manager统一管理SDK及工具链,OpenHarmony包含如 | 类别 | 包名 | 说明 | | -------- | -------- | -------- | | SDK | JS | JS语言SDK包。 | +| eTS | eTS(Extended TypeScript) SDK包。 | | SDK Tool | Toolchains | SDK工具链,OpenHarmony应用开发必备工具集,包括编译、打包、签名、数据库管理等工具的集合。 | -| | Previewer | OpenHarmony应用预览器,可以在应用开发过程中查看界面UI布局效果。 | +| Previewer | OpenHarmony应用预览器,可以在应用开发过程中查看界面UI布局效果。 | -1. 运行已安装的DevEco Studio,首次使用,请选择 **Do not import settings**,点击OK。 +1. 运行已安装的DevEco Studio,首次使用,请选择**Do not import settings**,点击OK。 -2. 进入配置向导页面,设置 **npm registry**,DevEco Studio已预置对应的仓,直接点击 **Start using DevEco Studio**进入下一步。 - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
- > 如果配置向导界面出现的是设置 **Set up HTTP Proxy**界面,说明网络受限,请根据[参考信息](#参考信息)配置DevEco Studio代理、NPM代理和Gradle代理后,再下载OpenHarmony SDK。 +2. 进入配置向导页面,设置**npm registry**,DevEco Studio已预置对应的仓,直接点击**Start using DevEco Studio**进入下一步。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** + > 如果配置向导界面出现的是设置**Set up HTTP Proxy**界面,说明网络受限,请根据[参考信息](#参考信息)配置DevEco Studio代理、NPM代理和Gradle代理后,再下载OpenHarmony SDK。 - - ![zh-cn_image_0000001163314102](/images/application-dev/quick-start/figures/zh-cn_image_0000001163314102.png) + ![zh-cn_image_0000001163314102](/images/application-dev/quick-start/figures/zh-cn_image_0000001163314102.png) -3. DevEco Studio向导指引开发者下载SDK,默认下载OpenHarmony SDK。SDK下载到user目录下,也可以指定对应的存储路径,SDK存储路径不支持中文字符,然后点击 **Next**。 +3. DevEco Studio向导指引开发者下载SDK,默认下载OpenHarmony SDK。SDK下载到user目录下,也可以指定对应的存储路径,SDK存储路径不支持中文字符,然后点击**Next**。 ![zh-cn_image_0000001208394019](/images/application-dev/quick-start/figures/zh-cn_image_0000001208394019.png) - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
- > 如果不是首次安装DevEco Studio,可能无法查看进入该界面,可通过欢迎页的 **Configure (** **或**![zh-cn_image_0000001208274069](/images/application-dev/quick-start/figures/zh-cn_image_0000001208274069.png) **图标** **)> Settings > SDK Manager > OpenHarmony SDK**界面,点击 **OpenHarmony SDK Location**加载SDK。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** + > 如果不是首次安装DevEco Studio,可能无法查看进入该界面,可通过欢迎页的**Configure (或**![zh-cn_image_0000001208274069](/images/application-dev/quick-start/figures/zh-cn_image_0000001208274069.png)**图标)> Settings > SDK Manager > OpenHarmony SDK**界面,点击**OpenHarmony SDK Location**加载SDK。 + +4. 在弹出的SDK下载信息页面,点击**Next**,并在弹出的**License Agreement**窗口,点击**Accept**开始下载SDK。 -4. 在弹出的SDK下载信息页面,点击 **Next**,并在弹出的 **License Agreement**窗口,点击 **Accept**开始下载SDK。 - - - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
- > 下载SDK过程中,如果出现下载JS SDK失败,提示“Install js dependencies failed”,请根据[JS SDK安装失败处理指导](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/faq-development-environment-0000001168829643#section1311117111474)进行处理。 - - ![zh-cn_image_0000001163472654](/images/application-dev/quick-start/figures/zh-cn_image_0000001163472654.png) - -5. 等待OpenHarmony SDK及工具下载完成,点击 **Finish**,界面会进入到DevEco Studio欢迎页。 + +5. 等待OpenHarmony SDK及工具下载完成,点击**Finish**,界面会进入到DevEco Studio欢迎页。 ![zh-cn_image_0000001163632602](/images/application-dev/quick-start/figures/zh-cn_image_0000001163632602.png) @@ -76,22 +65,22 @@ DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才 一般来说,如果使用的是个人或家庭网络,是不需要设置代理信息的;只有部分企业网络受限的情况下,才需要设置代理信息。 -如果是第一次打开DevEco Studio,配置向导界面出现设置 **Set up HTTP Proxy**界面,说明网络受限,可以通过配置代理的方式来解决,需要配置DevEco Studio代理、NPM代理和Gradle代理。 +如果是第一次打开DevEco Studio,配置向导界面出现设置**Set up HTTP Proxy**界面,说明网络受限,可以通过配置代理的方式来解决,需要配置DevEco Studio代理、NPM代理和Gradle代理。 ![zh-cn_image_0000001166582138](/images/application-dev/quick-start/figures/zh-cn_image_0000001166582138.png) ### 配置DevEco Studio代理 -1. 启动DevEco Studio,配置向导进入 **Set up HTTP Proxy**界面,勾选 **Manual proxy configuration**,设置DevEco Studio的HTTP Proxy。 - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
+1. 启动DevEco Studio,配置向导进入**Set up HTTP Proxy**界面,勾选**Manual proxy configuration**,设置DevEco Studio的HTTP Proxy。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > 如果非首次设置向导进入HTTP Proxy,可以通过如下方式进入HTTP Proxy配置界面: > - > - 在欢迎页点击 **Configure(或**![zh-cn_image_0000001212142015](/images/application-dev/quick-start/figures/zh-cn_image_0000001212142015.png) **图标) > Settings > Appearance & Behavior > System Settings > HTTP Proxy**进入HTTP Proxy设置界面(Mac系统为 **Configure > Preferences > Appearance & Behavior > System Settings > HTTP Proxy**)。 + > - 在欢迎页点击**Configure(或**![zh-cn_image_0000001212142015](/images/application-dev/quick-start/figures/zh-cn_image_0000001212142015.png)**图标) > Settings > Appearance & Behavior > System Settings > HTTP Proxy**进入HTTP Proxy设置界面(Mac系统为**Configure > Preferences > Appearance & Behavior > System Settings > HTTP Proxy**)。 > - > - 在打开了工程的情况下,可以点击 **File > Settings > Appearance & Behavior > System Settings > HTTP Proxy**进入HTTP Proxy设置界面(Mac系统为 **DevEco Studio > Preferences > Appearance & Behavior > System Settings > HTTP Proxy**) + > - 在打开了工程的情况下,可以点击**File > Settings > Appearance & Behavior > System Settings > HTTP Proxy**进入HTTP Proxy设置界面(Mac系统为**DevEco Studio > Preferences > Appearance & Behavior > System Settings > HTTP Proxy**) - - **HTTP**配置项,设置代理服务器信息。 **如果不清楚代理服务器信息,可以咨询你们的网络管理人员**。 + - **HTTP**配置项,设置代理服务器信息。**如果不清楚代理服务器信息,可以咨询你们的网络管理人员**。 - **Host name**:代理服务器主机名或IP地址。 - **Port number**:代理服务器对应的端口号。 - **No proxy for**:不需要通过代理服务器访问的URL或者IP地址(地址之间用英文逗号分隔)。 @@ -99,18 +88,19 @@ DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才 - **Login**:访问代理服务器的用户名。 - **Password**:访问代理服务器的密码。 - **Remember**:勾选,记住密码。 - ![zh-cn_image_0000001212062065](/images/application-dev/quick-start/figures/zh-cn_image_0000001212062065.png) -2. 配置完成后,点击 **Check connection**,输入网络地址(如:https://developer.harmonyos.com),检查网络连通性。提示Connection successful表示代理设置成功。 + ![zh-cn_image_0000001212062065](/images/application-dev/quick-start/figures/zh-cn_image_0000001212062065.png) + +2. 配置完成后,点击**Check connection**,输入网络地址(如:https://developer.harmonyos.com),检查网络连通性。提示Connection successful表示代理设置成功。 -3. 点击 **Next: Configure npm**继续设置NPM代理信息,请参考[配置NPM代理](#配置npm代理)。 +3. 点击**Next: Configure npm**继续设置NPM代理信息,请参考[配置NPM代理](#配置npm代理)。 ### 配置NPM代理 -通过DevEco Studio的设置向导设置NPM代理信息,代理信息将写入用户“users/用户名/”目录下的 **.npmrc**文件。 -> ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
-> 该向导只有第一次安装DevEco Studio才会出现。如果未出现该向导,可以直接在“users/用户名/”目录下的 **.npmrc**文件中,添加代理配置信息。 +通过DevEco Studio的设置向导设置NPM代理信息,代理信息将写入用户“users/用户名/”目录下的**.npmrc**文件。 +> ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** +> 该向导只有第一次安装DevEco Studio才会出现。如果未出现该向导,可以直接在“users/用户名/”目录下的**.npmrc**文件中,添加代理配置信息。 - npm registry:设置npm仓的地址信息,建议勾选。 @@ -120,13 +110,13 @@ DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才 ![zh-cn_image_0000001164577336](/images/application-dev/quick-start/figures/zh-cn_image_0000001164577336.png) -然后点击 **Start using DevEco Studio**继续下一步操作。 +然后点击**Start using DevEco Studio**继续下一步操作。 如果代理服务器需要认证(需要用户名和密码),请先根据如下指导配置代理服务器的用户名和密码信息,然后再下载OpenHarmony SDK;否则,请跳过该操作,参考[配置SDK信息](#配置sdk信息)进行操作即可。 ![zh-cn_image_0000001209817299](/images/application-dev/quick-start/figures/zh-cn_image_0000001209817299.png) -1. 进入用户的users目录,打开 **.npmrc**文件。 +1. 进入用户的users目录,打开**.npmrc**文件。 2. 修改npm代理信息,在proxy和https-proxy中,增加user和password字段,具体取值请以实际代理信息为准。示例如下所示: ``` @@ -134,7 +124,7 @@ DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才 https-proxy=http://user:password@proxy.server.com:80 ``` - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
+ > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > 如果password中存在特殊字符,如\@、\#、\*等符号,可能导致配置不生效,建议将特殊字符替换为ASCII码,并在ASCII码前加百分号%。常用符号替换为ASCII码对照表如下: > > - !:%21 @@ -163,26 +153,26 @@ DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才 ### 设置Gradle代理 -1. 打开“此电脑”,在文件夹地址栏中输入 **%userprofile%**(Mac系统请点击 **前往 > 个人**),进入个人用户文件夹。 +1. 打开“此电脑”,在文件夹地址栏中输入**%userprofile%**(Mac系统请点击**前往 > 个人**),进入个人用户文件夹。 ![zh-cn_image_0000001166740700](/images/application-dev/quick-start/figures/zh-cn_image_0000001166740700.png) -2. 创建一个文件夹,命名为 **.gradle**。如果已有.gradle文件夹,请跳过此操作。 - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
+2. 创建一个文件夹,命名为**.gradle**。如果已有.gradle文件夹,请跳过此操作。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > macOS系统创建.gradle文件夹前,请将系统设置为“显示隐藏文件”。 -3. 进入.gradle文件夹,新建一个文本文档,命名为 **gradle**,并修改后缀为 **.properties**。 +3. 进入.gradle文件夹,新建一个文本文档,命名为**gradle**,并修改后缀为**.properties**。 -4. 打开 **gradle.properties**文件中,添加如下脚本,然后保存。 +4. 打开**gradle.properties**文件中,添加如下脚本,然后保存。 其中代理服务器、端口、用户名、密码和不使用代理的域名,请根据实际代理情况进行修改。其中不使用代理的nonProxyHosts的配置间隔符是 “|”。 - ``` - systemProp.http.proxyHost=proxy.server.com - systemProp.http.proxyPort=8080 - systemProp.http.nonProxyHosts=*.company.com|10.*|100.* - systemProp.http.proxyUser=userId - systemProp.http.proxyPassword=password - systemProp.https.proxyHost=proxy.server.com - systemProp.https.proxyPort=8080 - systemProp.https.nonProxyHosts=*.company.com|10.*|100.* - systemProp.https.proxyUser=userId - systemProp.https.proxyPassword=password - ``` + ``` + systemProp.http.proxyHost=proxy.server.com + systemProp.http.proxyPort=8080 + systemProp.http.nonProxyHosts=*.company.com|10.*|100.* + systemProp.http.proxyUser=userId + systemProp.http.proxyPassword=password + systemProp.https.proxyHost=proxy.server.com + systemProp.https.proxyPort=8080 + systemProp.https.nonProxyHosts=*.company.com|10.*|100.* + systemProp.https.proxyUser=userId + systemProp.https.proxyPassword=password + ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" similarity index 51% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" index d77fc09c00145d94b14c6b3506bb9feedd056de6..a874889c938e524cc77216b1a1e7e67cf0ebcf23 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/01.\344\275\277\347\224\250\345\267\245\347\250\213\345\220\221\345\257\274\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 使用工程向导创建新工程 -permalink: /pages/0007050300 +permalink: /pages/0108090401 navbar: true sidebar: true prev: true @@ -9,50 +9,52 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 使用工程向导创建新工程 - [前提条件](#前提条件) - [操作步骤](#操作步骤) -通过工程向导创建一个OpenHarmony工程,该功能只有DevEco Studio 2.2 Beta1及以上版本支持。如果是DevEco Studio 2.1 Release版本,请根据[通过导入Sample方式创建新工程](/pages/0007050301)进行操作。 +通过工程向导创建一个OpenHarmony工程,该功能只有DevEco Studio 2.2 Beta1及以上版本支持。如果是DevEco Studio 2.1 Release版本,请根据[通过导入Sample方式创建新工程](/pages/0108090402)进行操作。 ## 前提条件 -已安装OpenHarmony SDK,具体请参考[配置OpenHarmony SDK](/pages/00070502)。 +已安装OpenHarmony SDK,具体请参考[配置OpenHarmony SDK](/pages/01080903)。 ## 操作步骤 1. 通过如下两种方式,打开工程创建向导界面。 - - 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择 **Create Project**开始创建一个新工程。 - - 如果已经打开了工程,可以在菜单栏选择 **File > New > New Project**来创建一个新工程。 + - 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择**Create Project**开始创建一个新工程。 + - 如果已经打开了工程,可以在菜单栏选择**File > New > New Project**来创建一个新工程。 -2. 根据工程创建向导,选择 **[Standard]Empty Ability**模板,点击 **Next**。 +2. 根据工程创建向导,选择“[Standard]Empty Ability”模板,点击**Next**。 ![zh-cn_image_0000001162463400](/images/application-dev/quick-start/figures/zh-cn_image_0000001162463400.png) -3. 点击 **Next**,进入到工程配置阶段,需要根据向导配置工程的基本信息。 - - **Project Name**:工程的名称,可以自定义。 - - **Project Type**:工程的类型,标识该工程是一个[原子化服务](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/atomic-service-definition-0000001090840664)(Service)或传统方式的需要安装的应用(Application)。 - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
+3. 点击**Next**,进入到工程配置阶段,需要根据向导配置工程的基本信息。 + - **Project name**:工程的名称,可以自定义。 + - **Project type**:工程的类型,标识该工程是一个[原子化服务](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/atomic-service-definition-0000001090840664)(Service)或传统方式的需要安装的应用(Application)。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > 如果是创建的原子化服务,则: > > - 原子化服务调试、运行时,在设备桌面上没有应用图标,请使用DevEco Studio的调试和运行功能,来启动原子化服务。 > - > - 原子化服务是免安装的,config.json中自动添加 **installationFree**字段,取值为“true”。 + > - 原子化服务是免安装的,config.json中自动添加**installationFree**字段,取值为“true”。 > - > - 如果entry模块的 **installationFree**字段为true,则其相关的所有hap模块的 **installationFree**字段都默认为true;如果entry模块的 **installationFree**字段为false,则其相关的所有hap模块可以配置为true或false。 + > - 如果entry模块的**installationFree**字段为true,则其相关的所有hap模块的**installationFree**字段都默认为true;如果entry模块的**installationFree**字段为false,则其相关的所有hap模块可以配置为true或false。 > > - 编译构建App时,每个hap包大小不能超过10MB。 - - **Package Name**:软件包名称,默认情况下,应用ID也会使用该名称,应用发布时,应用ID需要唯一。 + - **Bundle name**:软件包名称,默认情况下,应用ID也会使用该名称,应用发布时,应用ID需要唯一。如果“Project Type”选择了Atomic Service,则Bundle Name的后缀名必须是.hmservice。 - **Save Location**:工程文件本地存储路径。 - - **Compatible API Version**:兼容的SDK最低版本。 - > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:**
- > OpenHarmony工程如果配置了compileSdkVersion 7以上,对应模块默认使用方舟编译器进行编译,如果要修改编译方式为非方舟编译,在模块级build.gradle的 **ohos**闭包中添加 **arkEnable false**字段。 + - **Development mode**:选择开发模式,部分模板支持低代码开发,可选择Super Visual。 - **Language**:支持的开发语言。 - - **Device Type**:该工程模板支持的设备类型。
- ![zh-cn_image_0000001208210505](/images/application-dev/quick-start/figures/zh-cn_image_0000001208210505.png) - -4. 点击 **Finish**,工具会自动生成示例代码和相关资源,等待工程创建完成。 + - **Compatible API Version**:兼容的SDK最低版本。 + + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** + > OpenHarmony工程如果配置了compileSdkVersion 7以上,对应模块默认使用方舟编译器进行编译,如果要修改编译方式为非方舟编译,在模块级build.gradle的**ohos**闭包中添加**arkEnable false**字段。 + - **Device Type**:该工程模板支持的设备类型。 + ![zh-cn_image_0000001196050928](/images/application-dev/quick-start/figures/zh-cn_image_0000001196050928.png) + +4. 点击**Finish**,工具会自动生成示例代码和相关资源,等待工程创建完成。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" index 71bc12a9cd543332f5e71a2ec062b4ebe6ea03ff..780990e48987410e6bf38e1c53310cb30d96045b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/04.\345\210\233\345\273\272OpenHarmony\345\267\245\347\250\213/02.\351\200\232\350\277\207\345\257\274\345\205\245Sample\346\226\271\345\274\217\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 通过导入Sample方式创建新工程 -permalink: /pages/0007050301 +permalink: /pages/0108090402 navbar: true sidebar: true prev: true @@ -9,30 +9,32 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:35 +date: 2022-02-12 09:01:50 --- # 通过导入Sample方式创建新工程 + + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > 该功能适用于通过DevEco Studio 2.1 Release及以上版本,创建OpenHarmony工程。 -OpenHarmony SDK配置完成后,便可以启动应用开发。针对OpenHarmony应用开发, **可以通过导入Sample工程的方式来创建一个新工程**。 +OpenHarmony SDK配置完成后,便可以启动应用开发。针对OpenHarmony应用开发,**可以通过导入Sample工程的方式来创建一个新工程**。 -1. 在DevEco Studio的欢迎页,进入 **Configure (** **或**![zh-cn_image_0000001118018452](/images/application-dev/quick-start/figures/zh-cn_image_0000001118018452.png) **图标** **) > Settings > Version Control > Git**界面,点击Test按钮检测是否安装Git工具。 - - 已安装,请根据**步骤2**开始导入Sample。 +1. 在DevEco Studio的欢迎页,进入**Configure (或**![zh-cn_image_0000001118018452](/images/application-dev/quick-start/figures/zh-cn_image_0000001118018452.png)**图标) > Settings > Version Control > Git**界面,点击Test按钮检测是否安装Git工具。 + - 已安装,请根据**步骤2**开始导入Sample。 ![zh-cn_image_0000001118018088](/images/application-dev/quick-start/figures/zh-cn_image_0000001118018088.png) - - 未安装,请点击 **Download and Install**,DevEco Studio会自动下载并安装。安装完成后,请根据**步骤2**开始导入Sample。 + - 未安装,请点击**Download and Install**,DevEco Studio会自动下载并安装。安装完成后,请根据**步骤2**开始导入Sample。 ![zh-cn_image_0000001164498191](/images/application-dev/quick-start/figures/zh-cn_image_0000001164498191.png) -2. 在DevEco Studio的欢迎页,点击 **Import Sample**按钮,导入Sample工程。 +2. 在DevEco Studio的欢迎页,点击**Import Sample**按钮,导入Sample工程。 ![zh-cn_image_0000001208006117](/images/application-dev/quick-start/figures/zh-cn_image_0000001208006117.png) -3. 选择OpenHarmony Samples > common下的 **JsHelloWorld**工程,然后点击 **Next**。 +3. 选择OpenHarmony Samples > common下的**JsHelloWorld**工程,然后点击**Next**。 ![zh-cn_image_0000001152459178](/images/application-dev/quick-start/figures/zh-cn_image_0000001152459178.png) -4. 设置 **App Name**和 **Project Location**,然后点击 **Finish**,等待Sample工程导入完成。 +4. 设置**App Name**和**Project Location**,然后点击**Finish**,等待Sample工程导入完成。 ![zh-cn_image_0000001207744539](/images/application-dev/quick-start/figures/zh-cn_image_0000001207744539.png) 5. 等待工程同步完成,同步成功后,便可以进行OpenHarmony应用开发了。 diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" similarity index 71% rename from "website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" index 9353c97be318086ec99b1337fc64a996ca605ac7..54f0487a2bc81a3eeb990bc0badb523e86d784c9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/05.\351\205\215\347\275\256OpenHarmony\345\272\224\347\224\250\347\255\276\345\220\215\344\277\241\346\201\257.md" @@ -1,6 +1,6 @@ --- title: 配置OpenHarmony应用签名信息 -permalink: /pages/00070504 +permalink: /pages/01080905 navbar: true sidebar: true prev: true @@ -9,14 +9,10 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 配置OpenHarmony应用签名信息 -- [生成密钥和证书请求文件](#生成密钥和证书请求文件) -- [生成应用证书文件](#生成应用证书文件) -- [生成应用Profile文件](#生成应用profile文件) -- [配置应用签名信息](#配置应用签名信息) 使用真机设备运行和调试OpenHarmony应用前,需要对应用进行签名才能正常运行。该指导用于OpenHarmony应用的签名配置。除此章节以外,DevEco Studio的其余操作指导无差别,具体请访问[HUAWEI DevEco Studio使用指南](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)。配置应用签名信息的流程如下图所示。 @@ -28,89 +24,78 @@ date: 2021-12-30 18:31:36 OpenHarmony应用通过数字证书(.cer文件)和Profile文件(.p7b文件)来保证应用的完整性,需要通过DevEco Studio来生成密钥文件(.p12文件)和证书请求文件(.csr文件)。同时,也可以使用命令行工具的方式来生成密钥文件和证书请求文件。 -### 使用DevEco Studio生成密钥和证书请求文件 -1. 在主菜单栏点击**Build > Generate Key** **and CSR**。 +### 使用DevEco Studio生成 - > ![](/images/application-dev/quick-start/public_sys-resources/icon-note.gif)**说明** - > +1. 在主菜单栏点击**Build > Generate Keyand CSR**。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** > 如果本地已有对应的密钥,无需新生成密钥,可以在**Generate Key**界面中点击下方的Skip跳过密钥生成过程,直接使用已有密钥生成证书请求文件。 2. 在**Key Store File**中,可以点击**Choose Existing**选择已有的密钥库文件(存储有密钥的.p12文件);如果没有密钥库文件,点击**New**进行创建。下面以新创建密钥库文件为例进行说明。 - - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121901.png) + ![zh-cn_image_0000001119560738](/images/application-dev/quick-start/figures/zh-cn_image_0000001119560738.png) 3. 在**Create Key Store**窗口中,填写密钥库信息后,点击**OK**。 - - **Key Store File**:选择密钥库文件存储路径。 - **Password**:设置密钥库密码,必须由大写字母、小写字母、数字和特殊符号中的两种以上字符的组合,长度至少为8位。请记住该密码,后续签名配置需要使用。 - **Confirm Password**:再次输入密钥库密码。 - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121902.png) + ![zh-cn_image_0000001152674854](/images/application-dev/quick-start/figures/zh-cn_image_0000001152674854.png) 4. 在**Generate Key**界面中,继续填写密钥信息后,点击**Next**。 - - **Alias**:密钥的别名信息,用于标识密钥名称。请记住该别名,后续签名配置需要使用。 - **Password**:密钥对应的密码,与密钥库密码保持一致,无需手动输入。 - - **Validity**:证书有效期,建议设置为25年及以上,覆盖应用的完整生命周期。 + - **Validity**:证书有效期,建议设置为25年及以上,覆盖应用/服务的完整生命周期。 - **Certificate**:输入证书基本信息,如组织、城市或地区、国家码等。 - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121903.png) + ![zh-cn_image_0000001117639668](/images/application-dev/quick-start/figures/zh-cn_image_0000001117639668.png) 5. 在**Generate CSR**界面,选择密钥和设置CSR文件存储路径。 - - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121904.png) + ![zh-cn_image_0000001117479776](/images/application-dev/quick-start/figures/zh-cn_image_0000001117479776.png) 6. 点击**OK**按钮,创建CSR文件成功,可以在存储路径下获取生成的密钥库文件(.p12)和证书请求文件(.csr)。 + ![zh-cn_image_0000001163839541](/images/application-dev/quick-start/figures/zh-cn_image_0000001163839541.png) - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121905.png) -### 使用命令行工具生成证书请求文件 +### 使用命令行工具生成 使用Open JDK携带的Keytool工具生成证书请求文件。 1. 使用管理员身份运行命令行工具。 - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121906.png) - -2. 切换到keytool工具所在路径,实际路径请根据DevEco Studio安装目录进行修改。 + ![zh-cn_image_0000001248045243](/images/application-dev/quick-start/figures/zh-cn_image_0000001248045243.png) - ![img](/images/application-dev/quick-start/figures/zh-cn_image_0000002021121907.png) - - -3. 执行如下命令,生成公私钥文件。例如,生成的密钥库名称为ide_demo_app.p12,以存储到D盘根目录下为例 +2. 切换到keytool工具所在路径,实际路径请根据安装目录进行修改。 + ![zh-cn_image_0000001247125297](/images/application-dev/quick-start/figures/zh-cn_image_0000001247125297.png) +3. 执行如下命令,生成公私钥文件。例如,生成的密钥库名称为ide_demo_app.p12,存储到D盘根目录下。 ``` - keytool -genkeypair -alias "ide_demo_app" -keyalg EC -sigalg SHA256withECDSA -dname "C=CN,O=HUAWEI,OU=HUAWEI IDE,CN=ide_demo_app" -keystore d:\\idedemokey.p12 -storetype pkcs12 -validity 9125 -storepass 123456Abc -keypass 123456Abc + keytool -genkeypair -alias "ide_demo_app" -keyalg EC -sigalg SHA256withECDSA -dname "C=CN,O=Organization,OU=Unit,CN=ide_demo_app" -keystore d:\\idedemokey.p12 -storetype pkcs12 -validity 9125 -storepass 123456Abc -keypass 123456Abc ``` 生成公私钥文件的参数说明如下: - > ![](/images/application-dev/quick-start/public_sys-resources/icon-note.gif)说明 - > - > 请记录下**alias、storepass和keypass**的值,在后续[配置签名信息](#配置应用签名信息)操作会使用到。 + > ![icon-note.gif](/images/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** + > 请记录**下alias、storepass**和**keypass**的值,在后续[配置应用签名信息](#配置应用签名信息)操作会使用到。 - **alias**:密钥的别名信息,用于标识密钥名称。 - - **sigalg**:签名算法,固定为**SHA256withECDSA**。 - **dname**:按照操作界面提示进行输入。 - - C:国家/地区代码,如CN。 - - O:组织名称,如HUAWEI。 - - OU:组织单位名称,如HUAWEI IDE。 - - CN:名字与姓氏,建议与别名一致。 + - C:国家/地区代码,如CN。 + - O:组织名称,如Organization。 + - OU:组织单位名称,如Unit。 + - CN:名字与姓氏,建议与别名一致。 - **validity**:证书有效期,建议设置为9125(25年)。 - **storepass**:设置密钥库密码,必须由大写字母、小写字母、数字和特殊符号中的两种以上字符的组合,长度至少为8位。请记住该密码,后续签名配置需要使用。 - **keypass**:设置密钥的密码,请与**storepass**保持一致。 4. 执行如下命令,执行后需要输入**storepass**密码,生成证书请求文件,后缀格式为.csr。 - ``` keytool -certreq -alias "ide_demo_app" -keystore d:\\idedemokey.p12 -storetype pkcs12 -file d:\\idedemokey.csr ``` 生成证书请求文件的参数说明如下: - - **alias**:与[3](#label001)中输入的alias保持一致。 + - **alias**:与3中输入的alias保持一致。 - **file**:生成的证书请求文件名称,后缀为.csr。 @@ -118,7 +103,7 @@ OpenHarmony应用通过数字证书(.cer文件)和Profile文件(.p7b文件 使用[生成密钥和证书请求文件](#生成密钥和证书请求文件)中生成的证书请求文件,来生成应用签名所需的数字证书文件。生成方法如下: -进入DevEco Studio安装目录的 **Sdk\toolchains\lib**文件夹下(该SDK目录只能是OpenHarmony SDK,配置方法可参考[配置OpenHarmony SDK](/pages/00070502)),打开命令行工具,执行如下命令(如果keytool命令不能执行,请在系统环境变量中添加JDK的环境变量)。其中,只需要修改输入和输出即可快速生成证书文件,即修改 **-infile**指定证书请求文件csr文件路径, **-outfile**指定输出证书文件名及路径。 +进入DevEco Studio安装目录的**Sdk\toolchains\lib**文件夹下(该SDK目录只能是OpenHarmony SDK,配置方法可参考[配置OpenHarmony SDK](/pages/01080903)),打开命令行工具,执行如下命令(如果keytool命令不能执行,请在系统环境变量中添加JDK的环境变量)。其中,只需要修改输入和输出即可快速生成证书文件,即修改**-infile**指定证书请求文件csr文件路径,**-outfile**指定输出证书文件名及路径。 ``` keytool -gencert -alias "OpenHarmony Application CA" -infile myApplication_ohos.csr -outfile myApplication_ohos.cer -keystore OpenHarmony.p12 -sigalg SHA384withECDSA -storepass 123456 -ext KeyUsage:"critical=digitalSignature" -validity 3650 -rfc @@ -132,7 +117,7 @@ keytool -gencert -alias "OpenHarmony Application CA" -infile myApplication_ohos. - **outfile**:输出证书链文件名及路径。 -- **keystore**:签发证书的CA密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中 **Sdk\toolchains\lib**路径下,该参数不能修改。请注意,该OpenHarmony.p12文件并不是[生成密钥和证书请求文件](#生成密钥和证书请求文件)中生成的.p12文件。 +- **keystore**:签发证书的CA密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中**Sdk\toolchains\lib**路径下,该参数不能修改。请注意,该OpenHarmony.p12文件并不是[生成密钥和证书请求文件](#生成密钥和证书请求文件)中生成的.p12文件。 - **sigalg**:证书签名算法,该参数不能修改。 @@ -149,7 +134,7 @@ keytool -gencert -alias "OpenHarmony Application CA" -infile myApplication_ohos. Profile文件包含OpenHarmony应用的包名、数字证书信息、描述应用允许申请的证书权限列表,以及允许应用调试的设备列表(如果应用类型为Release类型,则设备列表为空)等内容,每个应用包中均必须包含一个Profile文件。 -进入 **Sdk\toolchains\lib**目录下,打开命令行工具,执行如下命令。 +进入**Sdk\toolchains\lib**目录下,打开命令行工具,执行如下命令。 ``` java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --out myApplication_ohos_Provision.p7b --keystore OpenHarmony.p12 --storepass 123456 --alias "OpenHarmony Application Profile Release" --sigAlg SHA256withECDSA --cert OpenHarmonyProfileRelease.pem --validity 365 --developer-id ohosdeveloper --bundle-name 包名 --permission 受限权限名(可选) --permission 受限权限名(可选) --distribution-certificate myApplication_ohos.cer @@ -157,13 +142,13 @@ java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --o 关于该命令的参数说明如下: -- **provisionsigtool**:Profile文件生成工具,文件在OpenHarmony SDK的 **Sdk\toolchains\lib**路径下。 +- **provisionsigtool**:Profile文件生成工具,文件在OpenHarmony SDK的**Sdk\toolchains\lib**路径下。 -- **in**:Profile模板文件所在路径,文件在OpenHarmony SDK中 **Sdk\toolchains\lib**路径下,该参数不能修改。 +- **in**:Profile模板文件所在路径,文件在OpenHarmony SDK中**Sdk\toolchains\lib**路径下,该参数不能修改。 - **out**:输出的Profile文件名和路径。 -- **keystore**:签发证书的密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中 **Sdk\toolchains\lib**路径下,该参数不能修改。 +- **keystore**:签发证书的密钥库路径,OpenHarmony密钥库文件名为OpenHarmony.p12,文件在OpenHarmony SDK中**Sdk\toolchains\lib**路径下,该参数不能修改。 - **storepass**:密钥库密码,密码为123456,该参数不能修改。 @@ -171,7 +156,7 @@ java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --o - **sigalg**:证书签名算法,该参数不能修改。 -- **cert**:签名Profile的证书文件路径,文件在OpenHarmony SDK中 **Sdk\toolchains\lib**路径下,该参数不能修改。 +- **cert**:签名Profile的证书文件路径,文件在OpenHarmony SDK中**Sdk\toolchains\lib**路径下,该参数不能修改。 - **validity**:证书有效期,自定义天数。 @@ -188,15 +173,14 @@ java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --o 在真机设备上调试前,需要使用到制作的私钥(.p12)文件、证书(.cer)文件和Profile(.p7b)文件对调试的模块进行签名。 -打开 **File > Project Structure**,点击 **Project > Signing Configs > debug**窗口中,去除勾选“Automatically generate signing”,然后配置指定模块的调试签名信息。 - +打开**File > Project Structure**,点击**Project > Signing Configs > debug**窗口中,去除勾选“Automatically generate signing”,然后配置指定模块的调试签名信息。 - **Store File**:选择密钥库文件,文件后缀为.p12,该文件为[生成密钥和证书请求文件](#生成密钥和证书请求文件)中生成的.p12文件。 - **Store Password**:输入密钥库密码,该密码为[生成密钥和证书请求文件](#生成密钥和证书请求文件)中填写的密钥库密码保持一致。 - **Key Alias**:输入密钥的别名信息,与[生成密钥和证书请求文件](#生成密钥和证书请求文件)中填写的别名保持一致。 -- **Key Password**:输入密钥的密码,与 **Store Password**保持一致。 +- **Key Password**:输入密钥的密码,与**Store Password**保持一致。 - **Sign Alg**:签名算法,固定为SHA256withECDSA。 @@ -206,7 +190,7 @@ java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --o ![zh-cn_image_0000001155643492](/images/application-dev/quick-start/figures/zh-cn_image_0000001155643492.png) -设置完签名信息后,点击 **OK**进行保存,然后可以在工程下的build.gradle中查看签名的配置信息。 +设置完签名信息后,点击**OK**进行保存,然后可以在工程下的build.gradle中查看签名的配置信息。 ![zh-cn_image_0000001202722349](/images/application-dev/quick-start/figures/zh-cn_image_0000001202722349.png) @@ -216,4 +200,4 @@ java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --o 编译完成后,OpenHarmony应用的Hap包可以从工程的bulid目录下获取。 -![zh-cn_image_0000001163918627](/images/application-dev/quick-start/figures/zh-cn_image_0000001163918627.png) \ No newline at end of file +![zh-cn_image_0000001163918627](/images/application-dev/quick-start/figures/zh-cn_image_0000001163918627.png) diff --git "a/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..118db35e78ddf1c85a63c73d039bf21ffabf0e5e --- /dev/null +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/09.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" @@ -0,0 +1,45 @@ +--- +title: 安装运行OpenHarmony应用 +permalink: /pages/01080906 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 安装运行OpenHarmony应用 + + + +安装OpenHarmony应用可以通过DevEco Studio安装,也可以通过使用hdc工具进行手动安装。 + + +- 通过DevEco Studio安装:将设备连接上DevEco Studio后,点击![zh-cn_image_0000001239855207](/images/application-dev/quick-start/figures/zh-cn_image_0000001239855207.png)按钮即可安装。 + +- 通过hdc工具安装:手动执行命令行完成应用的安装。 + hdc工具本身需要手动从开源仓中获取。然后使用工具将编译后的本地hap包发送至设备侧并完成安装。 + + 相关命令如下: + + - 安装命令 + **install [-r/-d/-g] _package_** + + 命令示例: + + ``` + hdc_std install E:\hwadmin.hap + ``` + - 日志抓取命令 + **hilog** + + 命令示例: + + ``` + hdc_std hilog + ``` + + 完整的hdc工具使用指导及命令格式请参见[hdc_std使用指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" rename to "website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" index bf05afe94a82d31604c8449f467e74ce59babbba..2f45f361aec1a854826abbab1e853f73997aab11 100644 --- "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" +++ "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/01.\346\265\213\350\257\225\347\224\250\344\276\213\345\274\200\345\217\221.md" @@ -1,6 +1,6 @@ --- title: 测试用例开发 -permalink: /pages/000800 +permalink: /pages/010901 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 测试子系统 OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根据测试需求开发相关测试用例,开发阶段提前发现缺陷,大幅提高代码质量。 @@ -17,8 +17,8 @@ OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根 本文从基础环境构建,用例开发,编译以及执行等方面介绍OpenHarmony测试框架如何运行和使用。 ## 基础环境构建 测试框架依赖于python运行环境,在使用测试框架之前可参阅以下方式进行配置。 - - [环境配置](/pages/extra/bab7f0/) - - [源码获取](/pages/000102) + - [环境配置](/pages/extra/fa6494/) + - [源码获取](/pages/extra/00a0c5/) ## 测试框架目录简介 diff --git "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" index 334cc14e8a86e0f66627e3bf3b180d42c5c32e62..f19c48cfdaeacf3e03d18a1f5611ce0b863130ea 100644 --- "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/01.bytrace\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: bytrace使用指导 -permalink: /pages/00080100 +permalink: /pages/01090201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # bytrace使用指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" index d95de0a8cac14f5e1aa2433b79ea7f45610f1fa3..d34f79a65fde578fecea296a104f1255a34b4d0d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/09.\350\260\203\346\265\213/02.\350\260\203\346\265\213\345\267\245\345\205\267/02.hdc\\_std\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: hdc\\_std使用指导 -permalink: /pages/00080101 +permalink: /pages/01090202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # hdc\_std 使用指导 diff --git "a/website/docs/01.\346\226\207\346\241\243/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.OpenHarmony/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to "website/docs/01.OpenHarmony/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" index d35848ca7528094af6ec5fa56f265d1e15e9eb5d..afdc73378aabf1e8140d6239f30a98e9ba08b1f3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ "b/website/docs/01.OpenHarmony/10.XTS\350\256\244\350\257\201/01.XTS\350\256\244\350\257\201\347\224\250\344\276\213\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -1,6 +1,6 @@ --- title: XTS认证用例开发指导 -permalink: /pages/000900 +permalink: /pages/010a01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # XTS认证用例开发指导 @@ -673,7 +673,7 @@ hap包编译请参考[标准系统js应用开发指导](https://developer.harmon **测试用例输出目录**:out/release/suites/acts/testcases - **测试框架&用例整体输出目录:**out/release/suites/acts(编译用例时会同步编译测试套执行框架) + **测试框架&用例整体输出目录**:out/release/suites/acts(编译用例时会同步编译测试套执行框架) ## 全量用例执行指导(适用于小型系统、标准系统) diff --git "a/website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" similarity index 85% rename from "website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" index c018b1b3f1d4a19210ec09a642cca7ee2aac5cc7..f9de933a59122ce7086c44e0eff8af14b4212207 100644 --- "a/website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/01.Docker\347\274\226\350\257\221\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: Docker编译环境 -permalink: /pages/000a00 +permalink: /pages/010b01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # Docker编译环境 @@ -56,7 +56,7 @@ OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完
- - - @@ -937,18 +987,17 @@ off\(event: 'distributedDataServiceDie', deathCallback: Callback\): void; - 示例 ``` - let KvStore; + let kvManager; try { - it('KVManagerOff', 0, function (done) { - console.log('KVManagerOff'); - const deathCallback = function () { - console.log('death callback call'); - } - kvManager.off('distributedDataServiceDie', deathCallback); - }); + console.log('KVManagerOff'); + const deathCallback = function () { + console.log('death callback call'); + } + kvManager.off('distributedDataServiceDie', deathCallback); } catch (e) { console.log("An unexpected error occurred. Error:" + e); } + ``` ## Options @@ -1176,27 +1225,11 @@ KVStore常量。

从父组件中的变量(下)到子组件中的变量(右)

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

从父组件中的变量(下)到子组件中的变量(右)

@state

+

@State

@Link

+

@Link

@Prop

+

@Prop

常规变量

+

常规变量

@State

+

@State

允许

+

不允许

允许

+

允许

允许

+

允许

允许

+

允许

@Link

+

@Link

不允许

+

不允许

允许

+

允许

不推荐

+

不推荐

允许

+

允许

@Prop

+

@Prop

不允许

+

不允许

不允许

+

不允许

允许

+

允许

允许

+

允许

@StorageLink

+

@StorageLink

不允许

+

不允许

允许

+

允许

不允许

+

不允许

允许

+

允许

@StorageProp

+

@StorageProp

不允许

+

不允许

不允许

+

不允许

不允许

+

不允许

允许

+

允许

常规变量

+

常规变量

允许

+

允许

不允许

+

不允许

不允许

+

不允许

允许

+

允许

-从上表中: +从上表中可以看出: - 父组件的常规变量可以用于初始化子组件的**@State**变量,但不能用于初始化**@Link**或**@Prop**变量; - 父组件的**@State**变量可以初始化子组件的**@Prop**、**@Link(通过$)**或常规变量,但不能初始化子组件的**@State**变量; diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" similarity index 77% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" rename to "website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" index 33ba84e142c11b8c5c85e29feedcbc7894de3448..26e2ea5d011a06a56fc8f147a6aa066b3ce23534 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" +++ "b/website/docs/01.OpenHarmony/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/03.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/05.\346\267\261\345\205\245\347\220\206\350\247\243\347\273\204\344\273\266\345\214\226/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266\347\224\237\345\221\275\345\221\250\346\234\237\345\233\236\350\260\203\345\207\275\346\225\260.md" @@ -1,6 +1,6 @@ --- title: 自定义组件生命周期回调函数 -permalink: /pages/000b0101010402 +permalink: /pages/01080203030503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:49 --- # 自定义组件生命周期回调函数 @@ -26,29 +26,27 @@ date: 2021-12-30 18:31:39

aboutToAppear

函数在创建自定义组件的新实例后,在执行其build函数之前执行。

-

允许在aboutToAppear函数中改变状态变量,这些更改将在后续执行build函数中生效。

+

函数在创建自定义组件的新实例后,在执行其build函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build函数中生效。

aboutToDisappear

函数在自定义组件析构消耗之前执行。

-

不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

+

函数在自定义组件析构消耗之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

onPageShow

当此页面显示时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。

+

页面显示时触发一次,包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。

onPageHide

当此页面消失时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。

+

页面消失时触发一次,包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。

onBackPress

当用户点击返回按钮时触发,,仅@Entry修饰的自定义组件生效。

+

当用户点击返回按钮时触发,仅@Entry修饰的自定义组件生效。

  • 返回true表示页面自己处理返回逻辑, 不进行页面路由。
  • 返回false表示使用默认的返回逻辑。
  • 不返回值会作为false处理。

swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker

0.0.5

+

0.0.6

标准系统

@@ -65,7 +65,7 @@ OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完

swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard

0.0.5

+

0.0.7

HPM Docker环境

@@ -84,12 +84,15 @@ OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完 + + + ## 环境准备 在使用docker环境前需要先完成以下操作: 1. 安装Docker,Docker安装请参考[官方指导](https://docs.docker.com/engine/install/)。 -2. 获取OpenHarmony源码,请参考[获取源码](/pages/000102)。 +2. 获取OpenHarmony源码,请参考[获取源码](/pages/extra/00a0c5/)。 >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** >HPM Docker环境无需单独获取源码。 @@ -101,12 +104,10 @@ OpenHarmony的Docker镜像托管在[HuaweiCloud SWR](https://console.huaweicloud ### 搭建Docker环境-轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB) -**方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:** - 1. 获取Docker镜像。 ``` - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 + docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.6 ``` 2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 @@ -114,43 +115,13 @@ OpenHarmony的Docker镜像托管在[HuaweiCloud SWR](https://console.huaweicloud ubuntu下执行: ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - windows下执行(假设源码目录为D:\\OpenHarmony): - - ``` - docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - -**方式二:通过Dockerfile 构建本地Docker镜像进行构建** - -1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 - - ``` - git clone https://gitee.com/openharmony/docs.git - ``` - -2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。 - - ``` - cd docs/docker - ./build.sh - ``` - -3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ubuntu下执行: - - ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 + docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.6 ``` windows下执行(假设源码目录为D:\\OpenHarmony): ``` - docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 + docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.6 ``` @@ -193,35 +164,13 @@ hb set 1. 获取Docker镜像。 ``` - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 + docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 ``` 2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 - ``` - - -**方式二:通过Dockerfile 构建本地Docker镜像进行构建** - -1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 - - ``` - git clone https://gitee.com/openharmony/docs.git - ``` - -2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。 - - ``` - cd docs/docker/standard - ./build.sh - ``` - -3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ``` - docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.5 + docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.7 ``` @@ -230,10 +179,10 @@ hb set 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。 ``` -./build.sh --product-name {product_name} +./build.sh --product-name {product_name} --ccache ``` -\{product\_name\}为当前版本支持的平台。比如:Hi3516DV300等。 +\{product\_name\}为当前版本支持的平台。比如:Hi3516DV300和rk3568等。 编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在 out/{device_name}/packages/phone/images/ 目录下。 @@ -243,7 +192,7 @@ hb set ## 基于HPM的Docker环境 -docker\_dist是一个[HPM](https://hpm.harmonyos.com/)系统中的模板组件,能够帮助用户快速初始化HPM工程,利用docker镜像来快速编译OpenHarmony发行版,在很大程度上简化了编译前的环境配置。开发者在配置好Ubuntu和[hpm-cli](/pages/0005000101)开发环境后,可以通过以下步骤来使用我们提供的Docker环境。 +docker\_dist是一个[HPM](https://hpm.harmonyos.com/)系统中的模板组件,能够帮助用户快速初始化HPM工程,利用docker镜像来快速编译OpenHarmony发行版,在很大程度上简化了编译前的环境配置。开发者在配置好Ubuntu和[hpm-cli](/pages/0106010202)开发环境后,可以通过以下步骤来使用我们提供的Docker环境。 ### 搭建Docker环境 diff --git "a/website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" rename to "website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" index 1c3caffb9b0aba6ff5189d8fe45090d3e3d204b0..63b7dba58a80ad9fb76e18eeb7076e8824ce8cb0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" +++ "b/website/docs/01.OpenHarmony/11.\345\267\245\345\205\267/02.IDE\351\233\206\346\210\220\345\274\200\345\217\221\347\216\257\345\242\203.md" @@ -1,6 +1,6 @@ --- title: IDE集成开发环境 -permalink: /pages/000a01 +permalink: /pages/010b02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # IDE diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..1e91f87b8328cc679f704597d08e762d9129ead2 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" @@ -0,0 +1,692 @@ +--- +title: FeatureAbility模块 +permalink: /pages/010c010101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# FeatureAbility模块(JS端SDK接口) + +## 使用限制 + +FeatureAbility模块的接口只能在Page类型的Ability调用 + +## 导入模块 + +``` +import featureAbility from '@ohos.ability.featureAbility' +``` + +## featureAbility.startAbility + +startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\): void + +启动新的ability(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | --------------------- | ---- | ------------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 表示被启动的Ability。 | +| callback | AsyncCallback\ | 是 | 被指定的回调方法。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.startAbility( + { + want: + { + action: "", + entities: [""], + type: "", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: "", + bundleName: "com.example.startability", + abilityName: "com.example.startability.MainAbility", + uri: "" + }, + }, + ); +) +``` + + + +## featureAbility.startAbility + +startAbility(parameter: StartAbilityParameter): Promise\ + +启动新的ability(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ----------------------------------------------- | ---- | --------------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 表示被启动的Ability。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.startAbility( + { + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: deviceId, + bundleName: "com.example.startability", + abilityName: "com.example.startability.MainAbility", + uri: "" + }, + } + ).then((void) => { + console.info("==========================>startAbility=======================>"); +}); +``` + +## featureAbility.acquireDataAbilityHelper + +acquireDataAbilityHelper(uri: string): DataAbilityHelper + +获取dataAbilityHelper。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ------------------------ | +| uri | string | 是 | 指示要打开的文件的路径。 | + +**返回值:** + +| 类型 | 说明 | +| ----------------- | -------------------------------------------- | +| DataAbilityHelper | 用来协助其他Ability访问DataAbility的工具类。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.acquireDataAbilityHelper( + "dataability:///com.exmaple.DataAbility" +) +``` + +## featureAbility.startAbilityForResult + +startAbilityForResult(parameter: StartAbilityParameter, callback: AsyncCallback\): void + +启动一个ability,并在该ability被销毁时返回执行结果(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ----------------------------------------------- | ---- | --------------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 表示被启动的Ability。 | +| callback | AsyncCallback\<[AbilityResult](#abilityresult)> | 是 | 被指定的回调方法。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.startAbilityForResult( + { + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: "", + bundleName: "com.example.featureabilitytest", + abilityName: "com.example.featureabilitytest.MainAbility", + uri:"" + }, + }, +) +``` + +## featureAbility.startAbilityForResult + +startAbilityForResult(parameter: StartAbilityParameter): Promise\ + +启动一个ability,并在该ability被销毁时返回执行结果(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ----------------------------------------------- | ---- | ------------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 表示被启动的Ability | + +**返回值:** +| 类型 | 说明 | +| ----------------------------------------- | -------------- | +| Promise\<[AbilityResult](#abilityresult)> | 返回执行结果。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.startAbilityForResult( + { + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: "", + bundleName: "com.example.featureabilitytest", + abilityName: "com.example.featureabilitytest.MainAbility", + uri:"", + parameters: + { + mykey0: 1111, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "xxxxxxxxxxxxxxxxxxxxxx", + mykey4: [1, 15], + mykey5: [false, true, false], + mykey6: ["aaaaaa", "bbbbb", "ccccccccccc"], + mykey7: true, + }, + }, + requestCode: 2, + }, +).then((void) => { + console.info("==========================>startAbilityForResult=======================>"); +}); +``` + +## featureAbility.terminateSelfWithResult + +terminateSelfWithResult(parameter: AbilityResult, callback: AsyncCallback\): void + +设置此Page Ability将返回给调用者的结果代码和数据并破坏此Page Ability(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ------------- | ---- | ------------------- | +| parameter | [AbilityResult](#abilityresult) | 是 | 表示被启动的Ability。 | +| callback | AsyncCallback\ | 是 | 被指定的回调方法。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: "", + bundleName: "com.example.featureabilitytest", + abilityName: "com.example.featureabilitytest.MainAbility", + uri:"", + parameters: { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [1, 15], + mykey5: [false, true, false], + mykey6: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey7: true, + } + }, + }, +); +``` + +## featureAbility.terminateSelfWithResult + +terminateSelfWithResult(parameter: AbilityResult): Promise\ + +设置此Page Ability将返回给调用者的结果代码和数据并破坏此Page Ability(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ------------------------------- | ---- | ------------------- | +| parameter | [AbilityResult](#abilityresult) | 是 | 表示被启动的Ability | + +**返回值:** +| 类型 | 说明 | +| -------------- | ----------------------- | +| Promise\ | 以Promise形式返回结果。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION, + deviceId: "", + bundleName: "com.example.featureabilitytest", + abilityName: "com.example.featureabilitytest.MainAbility", + uri:"", + parameters: { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [1, 15], + mykey5: [false, true, false], + mykey6: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey7: true, + } + }, + } +).then((void) => { + console.info("==========================>terminateSelfWithResult=======================>"); +}); +``` + + + +## featureAbility.hasWindowFocus + +hasWindowFocus(callback: AsyncCallback\): void + +检查Ability的主窗口是否具有窗口焦点(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ----------------------- | ---- | ------------------------------------------------------------ | +| callback | AsyncCallback\ | 是 | 被指定的回调方法。
如果此Ability当前具有视窗焦点,则返回true;否则返回false。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.hasWindowFocus() +``` + + + +## featureAbility.hasWindowFocus + +hasWindowFocus(): Promise\ + +检查Ability的主窗口是否具有窗口焦点(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ----------------- | ---------------------------------------------------------- | +| Promise\ | 如果此Ability当前具有视窗焦点,则返回true;否则返回false。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.hasWindowFocus().then((void) => { + console.info("==========================>hasWindowFocus=======================>"); +}); +``` + + + +## featureAbility.getWant + +getWant(callback: AsyncCallback\): void + +获取从Ability发送的Want(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ----------------------------- | ---- | ------------------ | +| callback | AsyncCallback\<[Want](#want)> | 是 | 被指定的回调方法。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.getWant() +``` + + + +## featureAbility.getWant + +getWant(): Promise\ + +获取从Ability发送的Want(Promise形式)。 + +**返回值:** +| 类型 | 说明 | +| ----------------------- | ------------------------- | +| Promise\<[Want](#want)> | 以Promise的形式返回结果。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.getWant().then((void) => { + console.info("==========================>getWantCallBack=======================>"); +}); +``` + +## featureAbility.getContext + +getContext(): Context + +获取应用上下文。 + +**返回值:** +| 类型 | 说明 | +| ------- | -------------------- | +| Context | 返回应用程序上下文。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +var context = featureAbility.getContext() +context.getBundleName() +``` + + + +## featureAbility.terminateSelf + +terminateSelf(callback: AsyncCallback\): void + +设置Page Ability返回给被调用方的结果代码和数据,并销毁此Page Ability(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ---------------- | +| callback | AsyncCallback\ | 是 | 被指定的回调方法 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.terminateSelf() +``` + + + +## featureAbility.terminateSelf + +terminateSelf(): Promise\ + +设置Page Ability返回给被调用方的结果代码和数据,并销毁此Page Ability(Promise形式)。 + +**返回值:** +| 类型 | 说明 | +| -------------- | ------------------------- | +| Promise\ | 以Promise的形式返回结果。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureability'; +featureAbility.terminateSelf().then((void) => { console.info("==========================>terminateSelfCallBack=======================>"); +}); +``` + +## featureAbility.connectAbility + +connectAbility(request: Want, options:ConnectOptions): number + +将当前ability连接到指定ServiceAbility(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------- | -------------- | ---- | ---------------------------- | +| request | [Want](#want) | 是 | 表示被连接的ServiceAbility。 | +| options | ConnectOptions | 是 | 被指定的回调方法。 | + +**Want类型说明:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------ | -------- | -------- | ---- | ---------------------------------- | +| deviceId | 只读 | string | 否 | 表示被连接的ServiceAbility的设备id,缺省表示连接本地的ServiceAbility | +| bundleName | 只读 | string | 是 | 表示被连接的ServiceAbility的包名 | +| abilityName | 只读 | string | 是 | 表示被连接的ServiceAbility的类名 | + +**ConnectOptions类型说明:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------ | -------- | -------- | ---- | ---------------------------------- | +| onConnect | 只读 | function | 是 | 连接成功时的回调函数 | +| onDisconnect | 只读 | function | 是 | 连接失败时的回调函数 | +| onFailed | 只读 | function | 是 | ConnectAbility调用失败时的回调函数 | + +**返回值:** +| 类型 | 说明 | +| ------ | ------------------------ | +| number | 连接的ServiceAbilityID。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = featureAbility.connectAbility( + { + deviceId: deviceId, + bundleName: "com.ix.ServiceAbility", + abilityName: "ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +``` + +## featureAbility.disconnectAbility + +disconnectAbility(connection: number, callback:AsyncCallback\): void + +断开与指定ServiceAbility的连接(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------------- | ---- | ------------------------------ | +| connection | number | 是 | 指定断开连接的ServiceAbilityID | +| callback | AsyncCallback\ | 是 | 被指定的回调方法 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = featureAbility.connectAbility( + { + bundleName: "com.ix.ServiceAbility", + abilityName: "ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +var result = featureAbility.disconnectAbility(connId, + (error,data) => { + console.log('featureAbilityTest DisConnectJsSameBundleName result errCode : ' + error.code + " data: " + data) + }, +); +``` + +## featureAbility.disconnectAbility + +disconnectAbility(connection: number): Promise\ + +断开与指定ServiceAbility的连接(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------ | ---- | ------------------------------ | +| connection | number | 是 | 指定断开连接的ServiceAbilityID | + +**返回值:** +| 类型 | 说明 | +| -------------- | ----------------------- | +| Promise\ | 以Promise形式返回结果。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = featureAbility.connectAbility( + { + bundleName: "com.ix.ServiceAbility", + abilityName: "ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +var result = await featureAbility.disconnectAbility(connId); +``` + +## featureAbility.continueAbility + +continueAbility(options: ContinueAbilityOptions, callback: AsyncCallback\): void + +迁移一个ability到目标设备,并返回执行结果(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ------------------- | +| options | ContinueAbilityOptions | 是 | 表示被启动的Ability | +| callback | AsyncCallback\ | 是 | 被指定的回调方法 | + +**ContinueAbilityOptions类型说明:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | ------- | ---- | ------------------------------------------------------------ | +| deviceId | 只读 | string | 是 | 表示需要包含有关目标启动能力的信息。 | +| reversible | 只读 | boolean | 是 | 是否支持回迁的标志,目前不支持该功能,为保留字段,可填false。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' + +async StartContinueAbility(deviceId) { + let continueAbilityOptions = { + reversible: false, + deviceId: deviceId, + } + function ContinueAbilityCallback(err, data) { + console.info("[Demo] ContinueAbilityCallback, result err = " + JSON.stringify(err)); + console.info("[Demo] ContinueAbilityCallback, result data= " + JSON.stringify(data)); + } + await featureAbility.continueAbility(continueAbilityOptions, ContinueAbilityCallback); + console.info('[Demo] featureAbility.StartContinueAbility end'); +} +this.StartContinueAbility(remoteDeviceId); //remoteDeviceId is acquired from DeviceManager +``` + +## AbilityResult + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | --------------------- | ---- | ------------------------------------------------------------ | +| resultCode | 只读 | number | 是 | 指示销毁该能力后返回的结果代码。您可以定义结果代码来识别错误(暂不支持) | +| want | 只读 | [Want](#want) | 否 | 指示销毁该能力后返回的数据。您可以定义返回的数据。此参数可以为null。 | + +## StartAbilityParameter + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------------- | -------- | -------------------- | ---- | ------------------------------------------------------------ | +| want | 只读 | [Want](#want) | 是 | 表示需要包含有关目标启动能力的信息。 | +| abilityStartSetting | 只读 | {[key: string]: any} | 否 | 表示能力的特殊属性,当开发者启动能力时,该属性可以作为调用中的输入参数传递。 | + +## Want + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ | +| deviceId | 只读 | string | 否 | 表示运行指定Ability的设备ID。 | +| bundleName | 只读 | string | 否 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| abilityName | 只读 | string | 否 | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| uri | 只读 | string | 否 | 表示Uri描述。如果在Want中指定了Uri,则Want将匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | +| type | 只读 | string | 否 | 表示MIME type类型描述,比如:"text/plain" 、 "image/*"等。 | +| flags | 只读 | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](#flags说明)。 | +| action | 只读 | string | 否 | 表示action选项描述。 | +| parameters | 只读 | {[key: string]: any} | 否 | 表示WantParams描述。 | +| entities | 只读 | Array\ | 否 | 表示entities相关描述。 | + +## flags说明 + +| 名称 | 参数 | 描述 | +| ------------------------------------ | ---------- | ------------------------------------------------------------ | +| FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | +| FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | +| FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源能力 | +| FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | +| FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否属于OHOS | +| FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | +| FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | +| FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 指示对URI前缀进行授权的权限 | +| FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | +| FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | +| FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示迁移是可拉回的。 | +| FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | +| FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,使用后台模式安装该功能。 | +| FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Want}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | +| FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | +| FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..643015cb8ef8a9ad6745c55153c170b3ba86f671 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" @@ -0,0 +1,386 @@ +--- +title: ParticleAbility模块 +permalink: /pages/010c010102 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# particleAbility模块 + +## 使用限制 + +particleAbility模块用来对Data和Service类型的Ability进行操作。 + +## 导入模块 + +```js +import particleAbility from '@ohos.ability.particleAbility' +``` + +## particleAbility.startAbility + +startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\: void + +使用此方法启动指定的particleAbility(callback形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ----------------------------------------------- | ---- | ----------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 指示启动的ability | +| callback | AsyncCallback\ | 是 | 被指定的回调方法 | + +**示例:** + +```js +import particleAbility from '@ohos.ability.particleAbility' +particleAbility.startAbility( + { + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION; + deviceId: "", + bundleName: "com.example.Data", + abilityName: "com.example.Data.MainAbility", + uri:"" + }, + }, + (error, result) => { + console.log('particleAbility startAbility errCode:' + error + 'result:' + result) + }, +) +``` + + + +## particleAbility.startAbility + +startAbility(parameter: StartAbilityParameter): Promise\ +使用此方法启动指定的particleAbility(Promise形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ----------------------------------------------- | ---- | ----------------- | +| parameter | [StartAbilityParameter](#startabilityparameter) | 是 | 指示启动的ability | +**返回值:** +| 类型 | 说明 | +| -------------- | ------------------------- | +| Promise\ | 使用Promise形式返回结果。 | + +**示例:** + +```js +import particleAbility from '@ohos.ability.particleAbility' +particleAbility.startAbility( + { + want: + { + action: "action.system.home", + entities: ["entity.system.home"], + type: "MIMETYPE", + flags: FLAG_AUTH_READ_URI_PERMISSION; + deviceId: "", + bundleName: "com.example.Data", + abilityName: "com.example.Data.MainAbility", + uri:"" + }, + }, +).then((void) => { + console.info("particleAbility startAbility"); +}); +``` + + + +## particleAbility.terminateSelf + +terminateSelf(callback: AsyncCallback\): void + +终止particleAbility(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 表示被指定的回调方法 | + +**示例:** + +```js +import particleAbility from '@ohos.ability.particleAbility' +particleAbility.terminateSelf( + (error, result) => { + console.log('particleAbility terminateSelf errCode:' + error + 'result:' + result) + } +) +``` + + + +## particleAbility.terminateSelf + +terminateSelf(): Promise\ + +终止particleAbility(Promise形式)。 + +**返回值:** +| 类型 | 说明 | +| -------------- | ------------------------- | +| Promise\ | 使用Promise形式返回结果。 | + +**示例:** + +```js +import particleAbility from '@ohos.ability.particleAbility' +particleAbility.terminateSelf().then((void) => { + console.info("particleAbility terminateSelf"); +}); +``` + + + +## particleAbility.acquireDataAbilityHelper + +acquireDataAbilityHelper(uri: string): DataAbilityHelper + +获取dataAbilityHelper。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| :--- | ------ | ---- | ------------------------ | +| uri | string | 是 | 指示要打开的文件的路径。 | + +**返回值:** + +| 类型 | 说明 | +| ----------------- | -------------------------------------------- | +| DataAbilityHelper | 用来协助其他Ability访问DataAbility的工具类。 | + +**示例:** + +```js +import particleAbility from '@ohos.ability.particleAbility' +var uri = ""; +particleAbility.acquireDataAbilityHelper(uri) +``` + +## particleAbility.connectAbility + +connectAbility(request: Want, options:ConnectOptions): number + +将当前ability连接到指定ServiceAbility(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------- | -------------- | ---- | -------------------------- | +| request | [Want](#want) | 是 | 表示被连接的ServiceAbility | +| options | ConnectOptions | 是 | 被指定的回调方法 | + +**ConnectOptions类型说明:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------ | -------- | -------- | ---- | ---------------------------------- | +| onConnect | 只读 | function | 是 | 连接成功时的回调函数 | +| onDisconnect | 只读 | function | 是 | 断开连接时的回调函数 | +| onFailed | 只读 | function | 是 | ConnectAbility调用失败时的回调函数 | + +**返回值:** +| 类型 | 说明 | +| ------ | -------------------------- | +| number | 标识客户端与服务端的连接。 | + +**示例:** + +```javascript +import particleAbility from '@ohos.ability.particleAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = particleAbility.connectAbility( + { + bundleName: "com.ix.ServiceAbility", + abilityName: "com.ix.ServiceAbility.ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +``` + +## particleAbility.disconnectAbility + +disconnectAbility(connection: number, callback:AsyncCallback\): void + +断开与指定ServiceAbility的连接(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------------- | ---- | ------------------------------ | +| connection | number | 是 | 指定断开连接的ServiceAbilityID | +| callback | AsyncCallback\ | 是 | 被指定的回调方法 | + +**示例:** + +```javascript +import particleAbility from '@ohos.ability.particleAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = particleAbility.connectAbility( + { + bundleName: "com.ix.ServiceAbility", + abilityName: "com.ix.ServiceAbility.ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +var result = particleAbility.disconnectAbility(connId, + (error,data) => { + console.log('particleAbilityTest DisConnectAbility result errCode : ' + error.code + " data: " + data) + }, +); +``` + +## particleAbility.disconnectAbility + +disconnectAbility(connection: number): Promise\ + +断开与指定ServiceAbility的连接(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------ | ---- | ------------------------------ | +| connection | number | 是 | 指定断开连接的ServiceAbilityID | + +**返回值:** +| 类型 | 说明 | +| -------------- | ------------------------- | +| Promise\ | 使用Promise形式返回结果。 | + +**示例:** + +```javascript +import particleAbility from '@ohos.ability.particleAbility' +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); +} +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) +} +function onFailedCallback(code){ + console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) +} +var connId = particleAbility.connectAbility( + { + bundleName: "com.ix.ServiceAbility", + abilityName: "com.ix.ServiceAbility.ServiceAbilityA", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +var result = particleAbility.disconnectAbility(connId).then((void) => { + console.info("particleAbilityTest disconnectAbility"); +}); +``` + +## StartAbilityParameter + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------------- | -------- | --------------------- | ---- | ------------------------------------------------------------ | +| want | 只读 | [Want](#want) | 是 | 表示需要包含有关目标启动能力的信息。 | +| abilityStartSetting | 只读 | {[key: string]: any} | 否 | 表示能力的特殊属性,当开发者启动能力时,该属性可以作为调用中的输入参数传递。 | + +## Want + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ | +| deviceId | 只读 | string | 否 | 表示运行指定Ability的设备ID。 | +| bundleName | 只读 | string | 否 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| abilityName | 只读 | string | 否 | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| uri | 只读 | string | 否 | 表示Uri描述。如果在Want中指定了Uri,则Want将匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | +| type | 只读 | string | 否 | 表示MIME type类型描述,比如:"text/plain" 、 "image/*"等。 | +| flags | 只读 | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](#flags说明)。 | +| action | 只读 | string | 否 | 表示action选项描述。 | +| parameters | 只读 | {[key: string]: any} | 否 | 表示WantParams描述。 | +| entities | 只读 | Array\ | 否 | 表示entities相关描述。 | + +## flags说明 + +| 名称 | 参数 | 描述 | +| ------------------------------------ | ---------- | ------------------------------------------------------------ | +| FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | +| FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | +| FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源能力 | +| FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | +| FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否属于OHOS | +| FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | +| FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | +| FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力 | +| FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | +| FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | +| FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示迁移是可拉回的。 | +| FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | +| FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,使用后台模式安装该功能。 | +| FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Want}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | +| FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | +| FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | + +## AbilityStartSetting + +abilityStartSetting属性是一个定义为[key: string]: any的对象,key对应设定类型为:AbilityStartSetting枚举类型,value对应设定类型为:AbilityWindowConfiguration枚举类型。 + +使用时通过featureAbility.AbilityStartSetting获取,示例:featureAbility.AbilityStartSetting.BOUNDS_KEY。 + +| 名称 | 参数 | 描述 | +| --------------- | --------------- | -------------------------- | +| BOUNDS_KEY | "abilityBounds" | 窗口显示大小属性的名称。 | +| WINDOW_MODE_KEY | "windowMode" | 窗口显示模式属性的名称。 | +| DISPLAY_ID_KEY | "displayId" | 窗口显示设备ID属性的名称。 | + +## AbilityWindowConfiguration + +使用时通过featureAbility.AbilityWindowConfiguration获取,示例:featureAbility.AbilityWindowConfiguration.WINDOW_MODE_UNDEFINED。 + +| 名称 | 参数 | 描述 | +| --------------------------- | ---- | ---------- | +| WINDOW_MODE_UNDEFINED | 0 | 未定义。 | +| WINDOW_MODE_FULLSCREEN | 1 | 全屏。 | +| WINDOW_MODE_SPLIT_PRIMARY | 100 | 分屏主屏。 | +| WINDOW_MODE_SPLIT_SECONDARY | 101 | 分屏次屏。 | +| WINDOW_MODE_FLOATING | 102 | 悬浮窗。 | \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..a0083c85073b80ae47a0e20df6390bb6de40ba12 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" @@ -0,0 +1,812 @@ +--- +title: DataAbilityHelper模块 +permalink: /pages/010c010103 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# DataAbilityHelper模块(JS端SDK接口) + +## 导入模块 + +``` +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +import ohos_data_rdb from '@ohos.data.rdb' +``` + +## DataAbilityHelper + +### openFile + +openFile(uri: string, mode: string, callback: AsyncCallback\): void + +在指定的远程路径中打开文件(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ---------------------------------- | +| uri | string | 是 | 指示要打开的文件的路径。 | +| mode | string | 是 | 指示文件打开模式‘rwt’。 | +| callback | AsyncCallback\ | 是 | 被指定的回调方法,返回文件描述符。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var mode = "rwt"; +DAHelper.openFile( + "dataability:///com.example.DataAbility", + mode, + (err) => { + console.info("==========================>Called=======================>"); +}); +``` + +### openFile + +openFile(uri: string, mode: string): Promise\ + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ------------------------ | +| uri | string | 是 | 指示要打开的文件的路径。 | +| mode | string | 是 | 指示文件打开模式‘rwt’。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ---------------- | +| Promise\ | 返回文件描述符。 | + +**示例:** + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var mode = "rwt"; +DAHelper.openFile( + "dataability:///com.example.DataAbility", + mode).then((void) => { + console.info("==========================>openFileCallback=======================>"); +}); +``` + +### on('dataChange') + +on(type: 'dataChange', uri: string, callback: AsyncCallback\): void + +注册观察者以观察给定uri指定的数据callback通知。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ------------------------ | +| type | string | 是 | 数据更改。 | +| uri | string | 是 | 指示要操作的数据的路径。 | +| callback | AsyncCallback\ | 是 | 指示数据更改时的回调。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var helper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +function onChangeNotify() { + console.info("==========================>onChangeNotify=======================>"); +}; +helper.on( + "dataChange", + "dataability:///com.example.DataAbility", + onChangeNotify +) +``` + +### off('dataChange') + +off(type: 'dataChange', uri: string, callback?: AsyncCallback\): void + +注消观察者以停止观察给定uri指定的数据callback通知。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ------------------------ | +| type | string | 是 | 数据更改。 | +| uri | string | 是 | 指示要操作的数据的路径。 | +| callback | AsyncCallback\ | 否 | 指示已注册的回调。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var helper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +function onChangeNotify() { + console.info("==========================>onChangeNotify=======================>"); +}; +helper.off( + "dataChange", + "dataability:///com.example.DataAbility", +) +helper.off( + "dataChange", + "dataability:///com.example.DataAbility", + onChangeNotify +) +``` + +### getType + +getType(uri: string, callback: AsyncCallback\): void + +获取给定URI指定数据的MIME类型(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | --------------------------------------------- | +| uri | string | 是 | 指示要操作的数据的路径。 | +| callback | AsyncCallback\ | 是 | 回调方法,返回与uri指定的数据匹配的MIME类型。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.getType( + "dataability:///com.example.DataAbility", + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### getType + +getType(uri: string): Promise\ + +获取给定URI指定数据的MIME类型(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ------------------------ | +| uri | string | 是 | 指示要操作的数据的路径。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ----------------------------------- | +| Promise\ | 返回与uri指定的数据匹配的MIME类型。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.getType( + "dataability:///com.example.DataAbility" + ).then((data) => { + console.info("==========================>getTypeCallback=======================>"); +}); +``` + +### getFileTypes + +getFileTypes(uri: string, mimeTypeFilter: string, callback: AsyncCallback>): void + +获取支持的文件的MIME类型(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------------- | ------------------------------ | ---- | ---------------------------------- | +| uri | string | 是 | 指示要获取的文件的路径。 | +| mimeTypeFilter | string | 是 | 指示要获取的文件的MIME类型。 | +| callback | AsyncCallback\> | 是 | 回调方法,返回匹配的MIME类型数组。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.getFileTypes( + "dataability:///com.example.DataAbility", + "image/*", + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + + + +### getFileTypes + +getFileTypes(uri: string, mimeTypeFilter: string): Promise\> + +获取支持的文件的MIME类型(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------------- | ------ | ---- | ---------------------------- | +| uri | string | 是 | 指示要获取的文件的路径。 | +| mimeTypeFilter | string | 是 | 指示要获取的文件的MIME类型。 | + +**返回值:** +| 类型 | 说明 | +| ------------------------ | ------------------------ | +| Promise\> | 返回匹配的MIME类型数组。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.getFileTypes( + "dataability:///com.example.DataAbility", + "image/*" + ).then((data) => { + console.info("==========================>getFileTypesCallback=======================>"); +}); +``` + +### normalizeUri + +normalizeUri(uri: string, callback: AsyncCallback\): void + +将引用数据功能的给定uri转换为规范化uri(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ------------------------------------------------------------ | +| uri | string | 是 | 指示要规范化的uri对象。 | +| callback | AsyncCallback\ | 是 | 回调方法。如果数据功能支持uri规范化或null,则返回规范化uri对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.normalizeUri( + "dataability:///com.example.DataAbility", + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### normalizeUri + +normalizeUri(uri: string): Promise\ + +将引用数据功能的给定uri转换为规范化uri(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ----------------------- | +| uri | string | 是 | 指示要规范化的uri对象。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ------------------------------------------------------ | +| Promise\ | 如果数据功能支持uri规范化或null,则返回规范化uri对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.normalizeUri( + "dataability:///com.example.DataAbility", + ).then((data) => { + console.info("==========================>normalizeUriCallback=======================>"); +}); +``` + +### denormalizeUri + +denormalizeUri(uri: string, callback: AsyncCallback\): void + +将由normalizeUri(uri)生成的给定规范化uri转换为非规范化uri(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | --------------------------------------------------- | +| uri | string | 是 | 指示要规范化的uri对象。 | +| callback | AsyncCallback\ | 是 | 回调方法。如果反规范化成功,则返回反规范化uri对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.denormalizeUri( + "dataability:///com.example.DataAbility",, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + + + +### denormalizeUri + +denormalizeUri(uri: string): Promise\ + +将由normalizeUri(uri)生成的给定规范化uri转换为非规范化uri(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ----------------------- | +| uri | string | 是 | 指示要规范化的uri对象。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ----------------------------------------- | +| Promise\ | 如果反规范化成功,则返回反规范化uri对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.denormalizeUri( + "dataability:///com.example.DataAbility", + ).then((data) => { + console.info("==========================>denormalizeUriCallback=======================>"); +}); +``` + +### notifyChange + +notifyChange(uri: string, callback: AsyncCallback\): void + +通知已注册的观察者uri指定的数据资源的更改(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ------------------------ | +| uri | string | 是 | 指示要操作的数据的路径。 | +| callback | AsyncCallback\ | 是 | 回调方法。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var helper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +helper.notifyChange( + "dataability:///com.example.DataAbility",, + (err) => { + console.info("==========================>Called=======================>"); +}); +``` + +### notifyChange + +notifyChange(uri: string): Promise\ + +通知已注册的观察者uri指定的数据资源的更改(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ------------------------ | +| uri | string | 是 | 指示要操作的数据的路径。 | + +**返回值:** +| 类型 | 说明 | +| -------------- | --------------------- | +| Promise\ | 返回值为Promise对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +DAHelper.notifyChange( + "dataability:///com.example.DataAbility", + ).then((void) => { + console.info("==========================>notifyChangeCallback=======================>"); +}); +``` + +### insert + +insert(uri: string, valuesBucket: rdb.ValuesBucket, callback: AsyncCallback\): void + +将单个数据记录插入数据库(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | ---------------------- | ---- | ------------------------------------------------------ | +| uri | string | 是 | 指示要插入的数据的路径。 | +| valuesBucket | rdb.ValuesBucket | 是 | 指示要插入的数据记录。如果此参数为空,将插入一个空行。 | +| callback | AsyncCallback\ | 是 | 回调方法,返回插入数据记录的索引。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +const valueBucket = { + "name": "rose", + "age": 22, + "salary": 200.5, + "blobType": u8, +} +DAHelper.insert( + "dataability:///com.example.DataAbility", + valueBucket, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### insert + +insert(uri: string, valuesBucket: rdb.ValuesBucket): Promise\ + +将单个数据记录插入数据库(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | ---------------- | ---- | ------------------------------------------------------ | +| uri | string | 是 | 指示要插入的数据的路径。 | +| valuesBucket | rdb.ValuesBucket | 是 | 指示要插入的数据记录。如果此参数为空,将插入一个空行。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ------------------------ | +| Promise\ | 返回插入数据记录的索引。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +const valueBucket = { + "name": "rose1", + "age": 221, + "salary": 20.5, + "blobType": u8, +} +DAHelper.insert( + "dataability:///com.example.DataAbility", + valueBucket + ).then((data) => { + console.info("==========================>insertCallback=======================>"); +}); +``` + +### batchInsert + +batchInsert(uri: string, valuesBuckets: Array, callback: AsyncCallback\): void + +插入数据库(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | ----------------------- | ---- | -------------------------------- | +| uri | string | 是 | 指示要插入的数据的路径。 | +| valuesBucket | Array | 是 | 指示要插入的数据记录。 | +| callback | AsyncCallback\ | 是 | 回调方法。返回插入的数据记录数。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var cars = new Array({"name": "roe11", "age": 21, "salary": 20.5, "blobType": u8,}, + {"name": "roe12", "age": 21, "salary": 20.5, "blobType": u8,}, + {"name": "roe13", "age": 21, "salary": 20.5, "blobType": u8,}) +DAHelper.batchInsert( + "dataability:///com.example.DataAbility", + cars, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### batchInsert + +batchInsert(uri: string, valuesBuckets: Array): Promise\ + +将多个数据记录插入数据库(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | ----------------------- | ---- | ------------------------ | +| uri | string | 是 | 指示要插入的数据的路径。 | +| valuesBucket | Array | 是 | 指示要插入的数据记录。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ---------------------- | +| Promise\ | 返回插入的数据记录数。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var cars = new Array({"name": "roe11", "age": 21, "salary": 20.5, "blobType": u8,}, + {"name": "roe12", "age": 21, "salary": 20.5, "blobType": u8,}, + {"name": "roe13", "age": 21, "salary": 20.5, "blobType": u8,}) +DAHelper.batchInsert( + "dataability:///com.example.DataAbility", + cars + ).then((data) => { + console.info("==========================>batchInsertCallback=======================>"); +}); +``` + +### delete + +delete(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\): void + +从数据库中删除一个或多个数据记录(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要删除的数据的路径。 | +| valuesBucket | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | +| callback | AsyncCallback\ | 是 | 回调方法。返回已删除的数据记录数。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.delete( + "dataability:///com.example.DataAbility", + da, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### delete + +delete(uri: string, predicates: dataAbility.DataAbilityPredicates): Promise\ + +从数据库中删除一个或多个数据记录(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要删除的数据的路径。 | +| valuesBucket | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | ------------------------ | +| Promise\ | 返回已删除的数据记录数。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.delete( + "dataability:///com.example.DataAbility", + da + ).then((data) => { + console.info("==========================>deleteCallback=======================>"); +}); +``` + +### update + +update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\): void + +更新数据库中的数据记录(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要更新的数据的路径。 | +| valuesBucket | rdb.ValuesBucket | 是 | 指示要更新的数据。 | +| predicates | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | +| callback | AsyncCallback\ | 是 | 回调方法,返回更新的数据记录数。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +const va = { + "name": "roe1", + "age": 21, + "salary": 20.5, + "blobType": u8, +} +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.update( + "dataability:///com.example.DataAbility", + va, + da, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + +### update + +update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates): Promise\ + +更新数据库中的数据记录(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ------------ | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要更新的数据的路径。 | +| valuesBucket | rdb.ValuesBucket | 是 | 指示要更新的数据。 | +| predicates | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | + +**返回值:** +| 类型 | 说明 | +| ---------------- | -------------------------------------------- | +| Promise\ | 返回值为Promise对象,Promise中包含应用信息。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +const va = { + "name": "roe1", + "age": 21, + "salary": 20.5, + "blobType": u8, +} +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.update( + "dataability:///com.example.DataAbility", + va, + da + ).then((data) => { + console.info("==========================>updateCallback=======================>"); +}); +``` + +### query + +query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\): void + +查询数据库中的数据(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要查询的数据的路径。 | +| columns | rdb.ValuesBucket | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 | +| predicates | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | +| callback | AsyncCallback\ | 是 | 回调方法,返回查询结果。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var cars=new Array({"value1"}, {"value2"}, {"value3"}, {"value4"}); +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.query( + "dataability:///com.example.DataAbility", + cars, + da, + (err, data) => { + console.info("==========================>Called=======================>"); +}); +``` + + + +### query + +query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates): Promise\ + +查询数据库中的数据(Promise形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------------- | ---- | ------------------------------------------------ | +| uri | string | 是 | 指示要查询的数据的路径。 | +| columns | rdb.ValuesBucket | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 | +| predicates | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | + +**返回值:** +| 类型 | 说明 | +| ------------------- | -------------- | +| Promise\ | 返回查询结果。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import ohos_data_ability from '@ohos.data.dataability' +var DAHelper = featureAbility.acquireDataAbilityHelper( + "dataability:///com.example.DataAbility" +); +var cars=new Array({"value1"}, {"value2"}, {"value3"}, {"value4"}); +let da = new ohos_data_ability.DataAbilityPredicates() +DAHelper.query( + "dataability:///com.example.DataAbility", + cars, + da + ).then((data) => { + console.info("==========================>queryCallback=======================>"); +}); +``` \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..6baf1b6464d8ec0d67c8c6e23efc18d837cf81c5 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" @@ -0,0 +1,135 @@ +--- +title: DataUriUtils模块 +permalink: /pages/010c010104 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# DataUriUtils模块 + +## 导入模块 + +```js +import dataUriUtils from '@ohos.ability.dataUriUtils'; +``` + +## dataUriUtils.getId + +getId(uri: string): number + +获取附加到给定uri的路径组件末尾的ID。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | --------------------------- | +| uri | string | 是 | 指示要从中获取ID的uri对象。 | + +**返回值:** +| 类型 | 说明 | +| ------ | ------------------------ | +| number | 附加到路径组件末尾的ID。 | + +**示例:** + +```js +import dataUriUtils from '@ohos.ability.datauriutils' +dataUriUtils.getIdSync("com.example.dataUriUtils/1221") +``` + + + +## dataUriUtils.attachId + +attachId(uri: string, id: number): string + +将给定ID附加到给定uri的路径组件的末尾。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | --------------------------- | +| uri | string | 是 | 指示要从中获取ID的uri对象。 | +| id | number | 是 | 指示要附加的ID。 | + +**返回值:** +| 类型 | 说明 | +| ------ | --------------------- | +| string | 附加给定ID的uri对象。 | + +**示例:** + +```js +import dataUriUtils from '@ohos.ability.datauriutils' +var idint = 1122; +dataUriUtils.attachId( + "com.example.dataUriUtils" + idint, +) +``` + + + +## dataUriUtils.deleteId + +deleteId(uri: string): string + +从给定uri的路径组件的末尾删除ID。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | --------------------------- | +| uri | string | 是 | 指示要从中删除ID的uri对象。 | + +**返回值:** +| 类型 | 说明 | +| ------ | ------------------- | +| string | ID已删除的uri对象。 | + +**示例:** + +```js +import dataUriUtils from '@ohos.ability.datauriutils' +dataUriUtils.deleteId("com.example.dataUriUtils/1221") +``` + + + +## dataUriUtils.updateId + +updateId(uri: string, id: number): string + +更新指定uri中的ID。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---- | ------ | ---- | ------------------- | +| uri | string | 是 | 指示要更新的uri对象 | +| id | number | 是 | 指示新ID | + +**返回值:** +| 类型 | 说明 | +| ------ | --------------- | +| string | 更新的uri对象。 | + +**示例:** + +```js +import dataUriUtils from '@ohos.ability.datauriutils' +var idint = 1122; +dataUriUtils.updateId( + "com.example.dataUriUtils" + idint, +) +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" similarity index 58% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" index f43744be6dd2c111908f3b70f06e4c94ee7f4d4e..880e9b042e32551d65dc5f63e489f8b4352b16b1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/05.Bundle\346\250\241\345\235\227.md" @@ -1,6 +1,6 @@ --- title: Bundle模块 -permalink: /pages/000b000004 +permalink: /pages/010c010105 navbar: true sidebar: true prev: true @@ -9,1333 +9,1290 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- -# Bundle模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | 智慧视觉设备 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | ------------ | -| Bundle.getApplicationInfo(bundleName: string, bundleFlags: number, userId: number) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getApplicationInfo(bundleName: string, bundleFlags: number, userId: number, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllBundleInfo(bundlelFlag: BundleFlag) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllBundleInfo(bundlelFlag: BundleFlag, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleInfo(bundleName: string, bundleFlags: number) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleInfo(bundleName: string, bundleFlags: number, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllApplicationInfo(bundleFlags: number, userId: number) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllApplicationInfo(bundleFlags: number, userId: number, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.queryAbilityByWant(want: Want, bundleFlags: number, userId: number) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.queryAbilityByWant(want: Want, bundleFlags: number, userId: number, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getPermissionDef(permissionName: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getPermissionDef(permissionName: string, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleArchiveInfo(hapFilePath: string, flags: number) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleArchiveInfo(hapFilePath: string, flags: number, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleInstaller().install(bundleFilePaths: Array, param: InstallParam, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getBundleInstaller().uninstall(bundleName: string, param: InstallParam, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllShortcutInfo(bundleName: string): Promise> | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Bundle.getAllShortcutInfo(bundleName: string, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| getModuleUsageRecords(maxNum: number): Promise> | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| getModuleUsageRecords(maxNum: number, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| checkPermission(bundleName: string, permission: string): Promise | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| checkPermission(bundleName: string, permission: string, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | - -#### 权限列表 - -- - -#### 导入模块 - -``` -import bundle from '@ohos.bundle'; -``` - - - -#### getApplicationInfo(bundleName: string, bundleFlags: number, userId: number) - -* 功能说明 - - 根据给定的bundle名称获取ApplicationInfo - -* getApplicationInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------- | - | bundleName | 只读 | string | 是 | 应用名 | - | bundleFlags | 只读 | number | 是 | 0:返回默认app信息<
8:返回包含permissions的app信息 | - | userId | 只读 | number | 是 | 用户ID | - -* 返回值 - - Promise:返回值为Promise对象,Promise中包含应用信息。 - -* 示例 - -``` -bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0).then((data) => { - console.info("name: for begin"); - console.info("name:" + data.name); - console.info("bundleName:" + data.bundleName); - console.info("description:" + data.description); - console.info("descriptionId:" + data.descriptionId); - console.info("iconPath:" + data.iconPath); - console.info("iconId:" + data.iconId); - console.info("label:" + data.label); - console.info("labelId:" + data.labelId); - console.info("deviceId:" + data.deviceId); - console.info("signatureKey:" + data.signatureKey); - console.info("process:" + data.process); - console.info("isSystemApp:" + data.isSystemApp); - console.info("isLauncherApp:" + data.isLauncherApp); - console.info("supportedModes:" + data.supportedModes); - - console.info('getApplicationInfo permissions length [' + data.permissions.length + ']'); - for (var j = 0; j < data.permissions.length; j++) { - console.info("permissions[" + j + "]:" + data.permissions[j]); - } - console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']'); - for (var j = 0; j < data.moduleSourceDirs.length; j++) { - console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]); - } - console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']'); - for (var j = 0; j < data.moduleInfos.length; j++) { - console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName); - console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir); - } - console.info("entryDir:" + data.entryDir); - console.info("codePath:" + data.codePath); - console.info("dataDir:" + data.dataDir); - console.info("dataBaseDir:" + data.dataBaseDir); - console.info("cacheDir:" + data.cacheDir); -}) -``` - - - -#### getApplicationInfo(bundleName: string, bundleFlags: number, userId: number, callback: AsyncCallback) - -* 功能说明 - - 根据给定的bundle名称获取ApplicationInfo - -* getApplicationInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------------------------------ | ---- | ------------------------------------------------------- | - | bundleName | 只读 | string | 是 | 应用名 | - | bundleFlags | 只读 | number | 是 | 0:返回默认app信息<
8:返回包含permissions的app信息 | - | userId | 只读 | number | 是 | 用户ID | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info("name: for begin"); - console.info("name:" + data.name); - console.info("bundleName:" + data.bundleName); - console.info("description:" + data.description); - console.info("descriptionId:" + data.descriptionId); - console.info("iconPath:" + data.iconPath); - console.info("iconId:" + data.iconId); - console.info("label:" + data.label); - console.info("labelId:" + data.labelId); - console.info("deviceId:" + data.deviceId); - console.info("signatureKey:" + data.signatureKey); - console.info("process:" + data.process); - console.info("isSystemApp:" + data.isSystemApp); - console.info("isLauncherApp:" + data.isLauncherApp); - console.info("supportedModes:" + data.supportedModes); - - console.info('getApplicationInfo permissions length [' + data.permissions.length + ']'); - for (var j = 0; j < data.permissions.length; j++) { - console.info("permissions[" + j + "]:" + data.permissions[j]); - } - console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']'); - for (var j = 0; j < data.moduleSourceDirs.length; j++) { - console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]); - } - console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']'); - for (var j = 0; j < data.moduleInfos.length; j++) { - console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName); - console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir); - } - console.info("entryDir:" + data.entryDir); - console.info("codePath:" + data.codePath); - console.info("dataDir:" + data.dataDir); - console.info("dataBaseDir:" + data.dataBaseDir); - console.info("cacheDir:" + data.cacheDir); -} -``` - - - -#### getAllBundleInfo(bundleFlag: BundleFlag) - -* 功能说明 - - 获取系统中所有可用的包信息 - -* getAllBundleInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | ---------- | ---- | ----------------------------------------------------------- | - | bundleFlag | 只读 | BundleFlag | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - -* 返回值 - - Promise>:返回值为Promise对象,Promise中包含包信息列表。 - -* 示例 - -``` -bundle.getAllBundleInfo(0).then((data) => { - for (var i = 0; i < data.length; i++) { - console.info("index[" + i + "].name: for begin"); - console.info("index[" + i + "].name:" + data[i].name); - console.info("index[" + i + "].label:" + data[i].label); - console.info("index[" + i + "].description:" + data[i].description); - console.info("index[" + i + "].vendor:" + data[i].vendor); - console.info("index[" + i + "].versionCode:" + data[i].versionCode); - console.info("index[" + i + "].versionName:" + data[i].versionName); - console.info("index[" + i + "].jointUserId:" + data[i].jointUserId); - console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion); - console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion); - console.info("index[" + i + "].mainEntry:" + data[i].mainEntry); - console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi); - console.info("index[" + i + "].appId:" + data[i].appId); - console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion); - console.info("index[" + i + "].targetVersion:" + data[i].targetVersion); - console.info("index[" + i + "].releaseType:" + data[i].releaseType); - console.info("index[" + i + "].uid:" + data[i].uid); - console.info("index[" + i + "].gid:" + data[i].gid); - console.info("index[" + i + "].seInfo:" + data[i].seInfo); - console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName); - console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive); - console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp); - console.info("index[" + i + "].installTime:" + data[i].installTime); - console.info("index[" + i + "].updateTime:" + data[i].updateTime); - console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name); - console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName); - console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']'); - for (var j = 0; j < data[i].reqPermissions.length; j++) { - console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]); - } - console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']'); - for (var j = 0; j < data[i].defPermissions.length; j++) { - console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]); - } - - console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']'); - for (var j = 0; j < data[i].hapModuleNames.length; j++) { - console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]); - } - console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']'); - for (var j = 0; j < data[i].moduleNames.length; j++) { - console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]); - } - console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']'); - for (var j = 0; j < data[i].modulePublicDirs.length; j++) { - console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]); - } - console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']'); - for (var j = 0; j < data[i].moduleDirs.length; j++) { - console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]); - } - console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']'); - for (var j = 0; j < data[i].moduleResPaths.length; j++) { - console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]); - } - console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']'); - for (var j = 0; j < data[i].abilityInfos.length; j++) { - console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name); - console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package); - } - } -}) -``` - - - -#### getAllBundleInfo(bundleFlag: BundleFlag, callback: AsyncCallback>) - -* 功能说明 - - 获取系统中所有可用的包信息 - -* getAllBundleInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | -------------------------------- | ---- | ------------------------------------------------------------ | - | bundleFlag | 只读 | BundleFlag | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - | callback | 只读 | AsyncCallback> | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getAllBundleInfo(0, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info('xxx getAllBundleInfo data length [' + data.length + ']'); - for (var i = 0; i < data.length; i++) { - console.info("index[" + i + "].name: for begin"); - console.info("index[" + i + "].name:" + data[i].name); - console.info("index[" + i + "].label:" + data[i].label); - console.info("index[" + i + "].description:" + data[i].description); - console.info("index[" + i + "].vendor:" + data[i].vendor); - console.info("index[" + i + "].versionCode:" + data[i].versionCode); - console.info("index[" + i + "].versionName:" + data[i].versionName); - console.info("index[" + i + "].jointUserId:" + data[i].jointUserId); - console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion); - console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion); - console.info("index[" + i + "].mainEntry:" + data[i].mainEntry); - console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi); - console.info("index[" + i + "].appId:" + data[i].appId); - console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion); - console.info("index[" + i + "].targetVersion:" + data[i].targetVersion); - console.info("index[" + i + "].releaseType:" + data[i].releaseType); - console.info("index[" + i + "].uid:" + data[i].uid); - console.info("index[" + i + "].gid:" + data[i].gid); - console.info("index[" + i + "].seInfo:" + data[i].seInfo); - console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName); - console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive); - console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp); - console.info("index[" + i + "].installTime:" + data[i].installTime); - console.info("index[" + i + "].updateTime:" + data[i].updateTime); - console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name); - console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName); - console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']'); - for (var j = 0; j < data[i].reqPermissions.length; j++) { - console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]); - } - console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']'); - for (var j = 0; j < data[i].defPermissions.length; j++) { - console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]); - } - - console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']'); - for (var j = 0; j < data[i].hapModuleNames.length; j++) { - console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]); - } - console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']'); - for (var j = 0; j < data[i].moduleNames.length; j++) { - console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]); - } - console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']'); - for (var j = 0; j < data[i].modulePublicDirs.length; j++) { - console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]); - } - console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']'); - for (var j = 0; j < data[i].moduleDirs.length; j++) { - console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]); - } - console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']'); - for (var j = 0; j < data[i].moduleResPaths.length; j++) { - console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]); - } - console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']'); - for (var j = 0; j < data[i].abilityInfos.length; j++) { - console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name); - console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package); - } - } -} -``` - - - -#### getBundleInfo(bundleName: string, bundleFlags: number) - -* 功能说明 - - 根据bundle名称获取BundleInfo - -* getBundleInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | - | bundleName | 只读 | string | 是 | 包名 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - -* 返回值 - - Promise:返回值为Promise对象,Promise中包含包信息。 - -* 示例 - -``` -bundle.getBundleInfo('com.example.myapplicationInstall', 1).then((data) => { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("vendor:" + data.vendor); - console.info("versionCode:" + data.versionCode); - console.info("versionName:" + data.versionName); - console.info("jointUserId:" + data.jointUserId); - console.info("minSdkVersion:" + data.minSdkVersion); - console.info("maxSdkVersion:" + data.maxSdkVersion); - console.info("mainEntry:" + data.mainEntry); - console.info("cpuAbi:" + data.cpuAbi); - console.info("appId:" + data.appId); - console.info("compatibleVersion:" + data.compatibleVersion); - console.info("targetVersion:" + data.targetVersion); - console.info("releaseType:" + data.releaseType); - console.info("uid:" + data.uid); - console.info("gid:" + data.gid); - console.info("seInfo:" + data.seInfo); - console.info("entryModuleName:" + data.entryModuleName); - console.info("isKeepAlive:" + data.isKeepAlive); - console.info("isNativeApp:" + data.isNativeApp); - console.info("installTime:" + data.installTime); - console.info("updateTime:" + data.updateTime); - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']'); - for (var j = 0; j < data.reqPermissions.length; j++) { - console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); - } - console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']'); - for (var j = 0; j < data.defPermissions.length; j++) { - console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); - } - - console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); - for (var j = 0; j < data.hapModuleNames.length; j++) { - console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); - } - console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']'); - for (var j = 0; j < data.moduleNames.length; j++) { - console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); - } - console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); - for (var j = 0; j < data.modulePublicDirs.length; j++) { - console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); - } - console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']'); - for (var j = 0; j < data.moduleDirs.length; j++) { - console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); - } - console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); - for (var j = 0; j < data.moduleResPaths.length; j++) { - console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); - } - console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']'); - for (var j = 0; j < data.abilityInfos.length; j++) { - console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); - console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); - } -}) -``` - - - -#### getBundleInfo(bundleName: string, bundleFlags: number, callback: AsyncCallback) - -* 功能说明 - - 根据bundle名称获取BundleInfo - -* getBundleInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------------------------- | ---- | ------------------------------------------------------------ | - | bundleName | 只读 | string | 是 | 包名 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getBundleInfo('com.example.myapplicationInstall', 1, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("vendor:" + data.vendor); - console.info("versionCode:" + data.versionCode); - console.info("versionName:" + data.versionName); - console.info("jointUserId:" + data.jointUserId); - console.info("minSdkVersion:" + data.minSdkVersion); - console.info("maxSdkVersion:" + data.maxSdkVersion); - console.info("mainEntry:" + data.mainEntry); - console.info("cpuAbi:" + data.cpuAbi); - console.info("appId:" + data.appId); - console.info("compatibleVersion:" + data.compatibleVersion); - console.info("targetVersion:" + data.targetVersion); - console.info("releaseType:" + data.releaseType); - console.info("uid:" + data.uid); - console.info("gid:" + data.gid); - console.info("seInfo:" + data.seInfo); - console.info("entryModuleName:" + data.entryModuleName); - console.info("isKeepAlive:" + data.isKeepAlive); - console.info("isNativeApp:" + data.isNativeApp); - console.info("installTime:" + data.installTime); - console.info("updateTime:" + data.updateTime); - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']'); - for (var j = 0; j < data.reqPermissions.length; j++) { - console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); - } - console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']'); - for (var j = 0; j < data.defPermissions.length; j++) { - console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); - } - - console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); - for (var j = 0; j < data.hapModuleNames.length; j++) { - console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); - } - console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']'); - for (var j = 0; j < data.moduleNames.length; j++) { - console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); - } - console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); - for (var j = 0; j < data.modulePublicDirs.length; j++) { - console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); - } - console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']'); - for (var j = 0; j < data.moduleDirs.length; j++) { - console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); - } - console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); - for (var j = 0; j < data.moduleResPaths.length; j++) { - console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); - } - console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']'); - for (var j = 0; j < data.abilityInfos.length; j++) { - console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); - console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); - } -} -``` - - - -#### getAllApplicationInfo(bundleFlags: number, userId: number) - -* 功能说明 - - 获取指定用户下所有已安装的应用信息 - -* getAllApplicationInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------- | - | bundleFlags | 只读 | number | 是 | 0:返回默认app信息<
8:返回包含permissions的app信息 | - | userId | 只读 | number | 是 | 用户ID | - -* 返回值 - - Promise>:返回值为Promise对象,Promise中包含应用信息列表。 - -* 示例 - -``` -bundle.getAllApplicationInfo(8, 0).then((data) => { - console.info('xxx getAllApplicationInfo data length [' + data.length + ']'); - for (var i = 0; i < data.length; i++) { - console.info("index[" + i + "].name: for begin"); - console.info("index[" + i + "].name:" + data[i].name); - console.info("index[" + i + "].bundleName:" + data[i].bundleName); - console.info("index[" + i + "].description:" + data[i].description); - console.info("index[" + i + "].descriptionId:" + data[i].descriptionId); - console.info("index[" + i + "].iconPath:" + data[i].iconPath); - console.info("index[" + i + "].iconId:" + data[i].iconId); - console.info("index[" + i + "].label:" + data[i].label); - console.info("index[" + i + "].labelId:" + data[i].labelId); - console.info("index[" + i + "].deviceId:" + data[i].deviceId); - console.info("index[" + i + "].signatureKey:" + data[i].signatureKey); - console.info("index[" + i + "].process:" + data[i].process); - console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp); - console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp); - console.info("index[" + i + "].supportedModes:" + data[i].supportedModes); - - console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']'); - for (var j = 0; j < data[i].permissions.length; j++) { - console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]); - } - console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']'); - for (var j = 0; j < data[i].moduleSourceDirs.length; j++) { - console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]); - } - console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']'); - for (var j = 0; j < data[i].moduleInfos.length; j++) { - console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName); - console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir); - } - console.info("index[" + i + "].entryDir:" + data[i].entryDir); - console.info("index[" + i + "].codePath:" + data[i].codePath); - console.info("index[" + i + "].dataDir:" + data[i].dataDir); - console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir); - console.info("index[" + i + "].cacheDir:" + data[i].cacheDir); - } -}) -``` - - - -#### getAllApplicationInfo(bundleFlags: number, userId: number, callback: AsyncCallback>) - -* 功能说明 - - 获取指定用户下所有已安装的应用信息 - -* getAllApplicationInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------------------------------------- | ---- | ------------------------------------------------------- | - | bundleFlags | 只读 | number | 是 | 0:返回默认app信息<
8:返回包含permissions的app信息 | - | userId | 只读 | number | 是 | 用户ID | - | callback | 只读 | AsyncCallback> | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getAllApplicationInfo(8, 0, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info('xxx getAllApplicationInfo data length [' + data.length + ']'); - for (var i = 0; i < data.length; i++) { - console.info("index[" + i + "].name: for begin"); - console.info("index[" + i + "].name:" + data[i].name); - console.info("index[" + i + "].bundleName:" + data[i].bundleName); - console.info("index[" + i + "].description:" + data[i].description); - console.info("index[" + i + "].descriptionId:" + data[i].descriptionId); - console.info("index[" + i + "].iconPath:" + data[i].iconPath); - console.info("index[" + i + "].iconId:" + data[i].iconId); - console.info("index[" + i + "].label:" + data[i].label); - console.info("index[" + i + "].labelId:" + data[i].labelId); - console.info("index[" + i + "].deviceId:" + data[i].deviceId); - console.info("index[" + i + "].signatureKey:" + data[i].signatureKey); - console.info("index[" + i + "].process:" + data[i].process); - console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp); - console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp); - console.info("index[" + i + "].supportedModes:" + data[i].supportedModes); - - console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']'); - for (var j = 0; j < data[i].permissions.length; j++) { - console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]); - } - console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']'); - for (var j = 0; j < data[i].moduleSourceDirs.length; j++) { - console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]); - } - console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']'); - for (var j = 0; j < data[i].moduleInfos.length; j++) { - console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName); - console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir); - } - console.info("index[" + i + "].entryDir:" + data[i].entryDir); - console.info("index[" + i + "].codePath:" + data[i].codePath); - console.info("index[" + i + "].dataDir:" + data[i].dataDir); - console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir); - console.info("index[" + i + "].cacheDir:" + data[i].cacheDir); - } -} -``` - - - -#### queryAbilityByWant(want: Want, bundleFlags: number, userId: number) - -* 功能说明 - - 通过Want获取对应的Ability信息 - -* queryAbilityInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | - | want | 只读 | Want | 是 | 指定Want信息 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - | userId | 只读 | number | 是 | 用户ID | - -* Want类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ | - | elementName | 只读 | ElementName | 是 | 表示运行指定Ability的ElementName。 | - | uri | 只读 | string | 否 | 表示Uri描述。 | - | flags | 只读 | int | 否 | Ability的flag,表示处理Want的方式。 | - | type | 只读 | string | 否 | Want中的type属性是指由Want的URI所指示的资源的MIME类型。 | - | action | 只读 | string | 否 | 表示动作,通常使用系统预置Action,应用也可以自定义Action。 | - | want_param | 只读 | {[key: string]: any} | 否 | want_param是一种支持自定义的数据结构,开发者可以通过want_param传递某些请求所需的额外信息。 | - | entities | 只读 | Array | 否 | 表示类别,通常使用系统预置Entity,应用也可以自定义Entity。 | - -* ElementName类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | - | deviceId | 只读 | string | 否 | 表示运行指定Ability的设备ID。 | - | bundleName | 只读 | string | 是 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | - | abilityName | 只读 | string | 是 | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | - -* 返回值 - - Promise>:返回值为Promise对象,Promise中包含Ability信息。 - -* 示例 - -``` -bundle.queryAbilityByWant({ - want: { - action: "action.system.home", - entities: ["entity.system.home"], - elementName: { - deviceId: "0", - bundleName: "com.example.myapplicationInstall", - abilityName: "com.example.myapplication.MainAbility", - }, - } -}, 1, 0, -}).then((data) => { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("iconPath:" + data.iconPath); - console.info("visible:" + data.visible); - console.info("kind:" + data.kind); - console.info("uri:" + data.uri); - console.info("process:" + data.process); - console.info("package:" + data.package); - console.info("bundleName:" + data.bundleName); - console.info("moduleName:" + data.moduleName); - console.info("applicationName:" + data.applicationName); - console.info("deviceId:" + data.deviceId); - console.info("codePath:" + data.codePath); - console.info("resourcePath:" + data.resourcePath); - console.info("libPath:" + data.libPath); - - console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']'); - for (var j = 0; j < data.permissions.length; j++) { - console.info("permissions[" + j + "]:" + data.permissions[j]); - } - console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']'); - for (var j = 0; j < data.deviceTypes.length; j++) { - console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]); - } - console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']'); - for (var j = 0; j < data.deviceCapabilities.length; j++) { - console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]); - } - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA - console.info("type:" + data.type); - // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT, - console.info("orientation:" + data.orientation); - // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD - console.info("launchMode:" + data.launchMode); - - // the enum of AbilityType - console.info("AbilityType:" + bundle.AbilityType.UNKNOWN); - console.info("AbilityType:" + bundle.AbilityType.PAGE); - console.info("AbilityType:" + bundle.AbilityType.SERVICE); - console.info("AbilityType:" + bundle.AbilityType.DATA); - if (data.type == bundle.AbilityType.PAGE) { - console.info("this AbilityType is PAGE"); - } - // the enum of DisplayOrientation - console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT); - if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) { - console.info("this DisplayOrientation is UNSPECIFIED"); - } - // the enum of LaunchMode - console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON); - console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP); - console.info("LaunchMode:" + bundle.LaunchMode.STANDARD); - if (data.launchMode == bundle.LaunchMode.STANDARD) { - console.info("this LaunchMode is STANDARD"); - } - -}) -``` - - - -#### queryAbilityByWant(want: Want, bundleFlags: number, userId: number, callback: AsyncCallback>) - -* 功能说明 - - 通过Want获取对应的Ability信息 - -* queryAbilityInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | --------------------------------- | ---- | ------------------------------------------------------------ | - | want | 只读 | Want | 是 | 指定Want信息 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - | userId | 只读 | number | 是 | 用户ID | - | callback | 只读 | AsyncCallback> | 是 | 回调方法 | - -* Want类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | -------------------- | ---- | ------------------------------------------------------------ | - | elementName | 只读 | ElementName | 是 | 表示运行指定Ability的ElementName。 | - | uri | 只读 | string | 否 | 表示Uri描述。 | - | flags | 只读 | int | 否 | Ability的flag,表示处理Want的方式。 | - | type | 只读 | string | 否 | Want中的type属性是指由Want的URI所指示的资源的MIME类型。 | - | action | 只读 | string | 否 | 表示动作,通常使用系统预置Action,应用也可以自定义Action。 | - | want_param | 只读 | {[key: string]: any} | 否 | want_param是一种支持自定义的数据结构,开发者可以通过want_param传递某些请求所需的额外信息。 | - | entities | 只读 | Array | 否 | 表示类别,通常使用系统预置Entity,应用也可以自定义Entity。 | - -* ElementName类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | - | deviceId | 只读 | string | 否 | 表示运行指定Ability的设备ID。 | - | bundleName | 只读 | string | 是 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | - | abilityName | 只读 | string | 是 | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | - -* 返回值 - - void - -* 示例 - -``` -bundle.queryAbilityByWant( - { - want: { - action: "action.system.home", - entities: ["entity.system.home"], - elementName: { - deviceId: "0", - bundleName: "com.example.myapplicationInstall", - abilityName: "com.example.myapplication.MainAbility", - }, - } - }, 1, 0, - }, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("iconPath:" + data.iconPath); - console.info("visible:" + data.visible); - console.info("kind:" + data.kind); - console.info("uri:" + data.uri); - console.info("process:" + data.process); - console.info("package:" + data.package); - console.info("bundleName:" + data.bundleName); - console.info("moduleName:" + data.moduleName); - console.info("applicationName:" + data.applicationName); - console.info("deviceId:" + data.deviceId); - console.info("codePath:" + data.codePath); - console.info("resourcePath:" + data.resourcePath); - console.info("libPath:" + data.libPath); - - console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']'); - for (var j = 0; j < data.permissions.length; j++) { - console.info("permissions[" + j + "]:" + data.permissions[j]); - } - console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']'); - for (var j = 0; j < data.deviceTypes.length; j++) { - console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]); - } - console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']'); - for (var j = 0; j < data.deviceCapabilities.length; j++) { - console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]); - } - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA - console.info("type:" + data.type); - // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT, - console.info("orientation:" + data.orientation); - // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD - console.info("launchMode:" + data.launchMode); - - // the enum of AbilityType - console.info("AbilityType:" + bundle.AbilityType.UNKNOWN); - console.info("AbilityType:" + bundle.AbilityType.PAGE); - console.info("AbilityType:" + bundle.AbilityType.SERVICE); - console.info("AbilityType:" + bundle.AbilityType.DATA); - if (data.type == bundle.AbilityType.PAGE) { - console.info("this AbilityType is PAGE"); - } - // the enum of DisplayOrientation - console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT); - console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT); - if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) { - console.info("this DisplayOrientation is UNSPECIFIED"); - } - // the enum of LaunchMode - console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON); - console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP); - console.info("LaunchMode:" + bundle.LaunchMode.STANDARD); - if (data.launchMode == bundle.LaunchMode.STANDARD) { - console.info("this LaunchMode is STANDARD"); - } -} -``` - - - -#### getPermissionDef(permissionName: string) - -* 功能说明 - - 获取指定权限的详细信息 - -* getPermissionDef参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------------- | -------- | ------ | ---- | ------ | - | permissionName | 只读 | string | 是 | 权限名 | - -* 返回值 - - Promise:返回值为bundle信息。 - -* 示例 - -``` -bundle.getPermissionDef('com.permission.CAMERA').then((data) => { - console.info("permissionName:" + data.permissionName); - console.info("bundleName:" + data.bundleName); - console.info("grantMode:" + data.grantMode); - console.info("availableScope:" + data.availableScope); - console.info("label:" + data.label); - console.info("labelId:" + data.labelId); -}) -``` - - - -#### getPermissionDef(permissionName: string, callback: AsyncCallback) - -* 功能说明 - - 获取指定权限的详细信息 - -* getPermissionDef参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------------- | -------- | ---------------------------- | ---- | -------- | - | permissionName | 只读 | string | 是 | 权限名 | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getBundleInstaller().then((data) => { - data.getPermissionDef('com.permission.CAMERA', OnReceiveEvent); - - function OnReceiveEvent(err, data) { - console.info("permissionName:" + data.permissionName); - console.info("bundleName:" + data.bundleName); - console.info("grantMode:" + data.grantMode); - console.info("availableScope:" + data.availableScope); - console.info("label:" + data.label); - console.info("labelId:" + data.labelId); - } -}) -``` - - - -#### getBundleArchiveInfo(hapFilePath: string, bundleFlags: number) - -* 功能说明 - - 获取HAP包含的应用包信息 - -* getBundleArchiveInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | - | hapFilePath | 只读 | string | 是 | hap包文件路径 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - -* 返回值 - - Promise:返回值为bundle信息。 - -* 示例 - -``` -bundle.getBundleArchiveInfo('/data/test.hap', 1).then((data) => { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("vendor:" + data.vendor); - console.info("versionCode:" + data.versionCode); - console.info("versionName:" + data.versionName); - console.info("jointUserId:" + data.jointUserId); - console.info("minSdkVersion:" + data.minSdkVersion); - console.info("maxSdkVersion:" + data.maxSdkVersion); - console.info("mainEntry:" + data.mainEntry); - console.info("cpuAbi:" + data.cpuAbi); - console.info("appId:" + data.appId); - console.info("compatibleVersion:" + data.compatibleVersion); - console.info("targetVersion:" + data.targetVersion); - console.info("releaseType:" + data.releaseType); - console.info("uid:" + data.uid); - console.info("gid:" + data.gid); - console.info("seInfo:" + data.seInfo); - console.info("entryModuleName:" + data.entryModuleName); - console.info("isKeepAlive:" + data.isKeepAlive); - console.info("isNativeApp:" + data.isNativeApp); - console.info("installTime:" + data.installTime); - console.info("updateTime:" + data.updateTime); - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - console.info('getBundleArchiveInfo reqPermissions length [' + data.reqPermissions.length + ']'); - for (var j = 0; j < data.reqPermissions.length; j++) { - console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); - } - console.info('getBundleArchiveInfo defPermissions length [' + data.defPermissions.length + ']'); - for (var j = 0; j < data.defPermissions.length; j++) { - console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); - } - console.info('getBundleArchiveInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); - for (var j = 0; j < data.hapModuleNames.length; j++) { - console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); - } - console.info('getBundleArchiveInfo moduleNames length [' + data.moduleNames.length + ']'); - for (var j = 0; j < data.moduleNames.length; j++) { - console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); - } - console.info('getBundleArchiveInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); - for (var j = 0; j < data.modulePublicDirs.length; j++) { - console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); - } - console.info('getBundleArchiveInfo moduleDirs length [' + data.moduleDirs.length + ']'); - for (var j = 0; j < data.moduleDirs.length; j++) { - console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); - } - console.info('getBundleArchiveInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); - for (var j = 0; j < data.moduleResPaths.length; j++) { - console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); - } - console.info('getBundleArchiveInfo abilityInfo length [' + data.abilityInfos.length + ']'); - for (var j = 0; j < data.abilityInfos.length; j++) { - console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); - console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); - } -}) -``` - - - -#### getBundleArchiveInfo(hapFilePath: string, bundleFlags: number, callback: AsyncCallback) - -* 功能说明 - - 获取HAP包含的应用包信息 - -* getBundleArchiveInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ----------- | -------- | ------------------------- | ---- | ------------------------------------------------------------ | - | hapFilePath | 只读 | string | 是 | hap包文件路径 | - | bundleFlags | 只读 | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getBundleArchiveInfo('/data/test.hap', 1, OnReceiveEvent); - -function OnReceiveEvent(err, data) { - console.info("name:" + data.name); - console.info("label:" + data.label); - console.info("description:" + data.description); - console.info("vendor:" + data.vendor); - console.info("versionCode:" + data.versionCode); - console.info("versionName:" + data.versionName); - console.info("jointUserId:" + data.jointUserId); - console.info("minSdkVersion:" + data.minSdkVersion); - console.info("maxSdkVersion:" + data.maxSdkVersion); - console.info("mainEntry:" + data.mainEntry); - console.info("cpuAbi:" + data.cpuAbi); - console.info("appId:" + data.appId); - console.info("compatibleVersion:" + data.compatibleVersion); - console.info("targetVersion:" + data.targetVersion); - console.info("releaseType:" + data.releaseType); - console.info("uid:" + data.uid); - console.info("gid:" + data.gid); - console.info("seInfo:" + data.seInfo); - console.info("entryModuleName:" + data.entryModuleName); - console.info("isKeepAlive:" + data.isKeepAlive); - console.info("isNativeApp:" + data.isNativeApp); - console.info("installTime:" + data.installTime); - console.info("updateTime:" + data.updateTime); - console.info("appInfo.name:" + data.applicationInfo.name); - console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); - console.info('getBundleArchiveInfo reqPermissions length [' + data.reqPermissions.length + ']'); - for (var j = 0; j < data.reqPermissions.length; j++) { - console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); - } - console.info('getBundleArchiveInfo defPermissions length [' + data.defPermissions.length + ']'); - for (var j = 0; j < data.defPermissions.length; j++) { - console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); - } - console.info('getBundleArchiveInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); - for (var j = 0; j < data.hapModuleNames.length; j++) { - console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); - } - console.info('getBundleArchiveInfo moduleNames length [' + data.moduleNames.length + ']'); - for (var j = 0; j < data.moduleNames.length; j++) { - console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); - } - console.info('getBundleArchiveInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); - for (var j = 0; j < data.modulePublicDirs.length; j++) { - console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); - } - console.info('getBundleArchiveInfo moduleDirs length [' + data.moduleDirs.length + ']'); - for (var j = 0; j < data.moduleDirs.length; j++) { - console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); - } - console.info('getBundleArchiveInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); - for (var j = 0; j < data.moduleResPaths.length; j++) { - console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); - } - console.info('getBundleArchiveInfo abilityInfo length [' + data.abilityInfos.length + ']'); - for (var j = 0; j < data.abilityInfos.length; j++) { - console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); - console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); - } -} -``` - - - -#### install(bundleFilePaths: Array, param: InstallParam, callback: AsyncCallback) - -* 功能说明 - - 安装hap包 - -* install参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | --------------- | -------- | ---------------------------- | ---- | ------------------------------------------------------------ | - | bundleFilePaths | 只读 | Array | 是 | 安装用包路径 | - | param | 只读 | InstallParam | 是 | userId:用户ID
installFlag:安装标识。
NORMAL:安装/卸载
REPLACE_EXISTING:更新
isKeepData:卸载时是否保留运行时数据 | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* InstallStatus类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------- | -------- | ---------------- | ---- | ------------------------------------------------------------ | - | status | 只读 | InstallErrorCode | 是 | 安装结果code
SUCCESS = 0
STATUS_INSTALL_FAILURE = 1
STATUS_INSTALL_FAILURE_ABORTED = 2,
STATUS_INSTALL_FAILURE_INVALID = 3
STATUS_INSTALL_FAILURE_CONFLICT = 4
STATUS_INSTALL_FAILURE_STORAGE = 5
STATUS_INSTALL_FAILURE_INCOMPATIBLE = 6
STATUS_INSTALL_FAILURE_DOWNLOAD_TIMEOUT = 0x0B
STATUS_INSTALL_FAILURE_DOWNLOAD_FAILED = 0x0C
STATUS_ABILITY_NOT_FOUND = 0x40
STATUS_BMS_SERVICE_ERROR = 0x41 | - | statusMessage | 只读 | string | 是 | 安装结果Message | - -* 示例 - -``` -bundle.getBundleInstaller().then((data) => { - data.install(['/data/test.hap'], { - param: { - userId: 0, - isKeepData: false - } - }, OnReceiveinstallEvent); - - function OnReceiveinstallEvent(err, data) { - console.info("name: for begin"); - console.info("install result code:" + data.status); - console.info("install result msg:" + data.statusMessage); - } -}) -``` - - - -#### uninstall(bundleName: string, param: InstallParam, callback: AsyncCallback) - -* 功能说明 - - 卸载hap包 - -* uninstall参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | ---------------------------- | ---- | ------------------------------------------------------------ | - | bundleName | 只读 | string | 是 | 卸载用包名 | - | param | 只读 | InstallParam | 是 | userId:用户ID
installFlag:安装标识。
NORMAL:安装/卸载
REPLACE_EXISTING:更新
isKeepData:卸载时是否保留运行时数据 | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* InstallStatus类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------- | -------- | ---------------- | ---- | ------------------------------------------------------------ | - | status | 只读 | InstallErrorCode | 是 | 卸载结果code
SUCCESS = 0
STATUS_UNINSTALL_FAILURE = 7
STATUS_UNINSTALL_FAILURE_BLOCKED = 8
STATUS_UNINSTALL_FAILURE_ABORTED = 9,
STATUS_UNINSTALL_FAILURE_CONFLICT = 10
STATUS_ABILITY_NOT_FOUND = 0x40
STATUS_BMS_SERVICE_ERROR = 0x41 | - | statusMessage | 只读 | string | 是 | 卸载结果Message | - -* 示例 - -``` -bundle.getBundleInstaller().then((data) => { - data.uninstall('com.example.myapplication', { - param: { - userId: 0, - isKeepData: false - } - }, OnReceiveinstallEvent); - - function OnReceiveinstallEvent(err, data) { - console.info("name: for begin"); - console.info("uninstall result code:" + data.status); - console.info("uninstall result msg:" + data.statusMessage); - } -}) -``` - - - -#### getAllShortcutInfo(bundleName: string) - -* 功能说明 - - 获取指定bundle名的shortcut信息 - -* getAllShortcutInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | ------ | ---- | -------- | - | bundleName | 只读 | string | 是 | bundle名 | - -* 返回值 - - Promise:返回值为bundle信息。 - -* 示例 - -``` -bundle.getAllShortcutInfo('com.example.third1').then((data) => { - ... -}); -``` - - - -#### getAllShortcutInfo(bundleName: string, callback: AsyncCallback>) - -* 功能说明 - - 获取指定bundle名的shortcut信息 - -* getAllShortcutInfo参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | --------------------------- | ---- | -------- | - | bundleName | 只读 | string | 是 | bundle名 | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.getAllShortcutInfo('com.example.third1', OnReceiveEvent); - -function OnReceiveEvent(err, data) { - ... -} -``` - - - -#### checkPermission(bundleName: string, permission: string) - -* 功能说明 - - 获取指定最大记录数的Usage信息 - -* checkPermission参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | ------ | ---- | -------- | - | bundleName | 只读 | string | 是 | bundle名 | - | permission | 只读 | string | 是 | 权限名 | - -* 返回值 - - Promise:返回值为bundle信息。 - -* 示例 - -``` -bundle.getModuleUsageRecords('com.example.actsbmscheckpermissiontest', 'com.permission.CAMERA').then((data) => { - ... -}); -``` - - - -#### checkPermission(bundleName: string, permission: string, callback: AsyncCallback) - -* 功能说明 - - 获取指定最大记录数的Usage信息 - -* checkPermission参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | -------------------------- | ---- | -------- | - | bundleName | 只读 | string | 是 | bundle名 | - | permission | 只读 | string | 是 | 权限名 | - | callback | 只读 | AsyncCallback | 是 | 回调方法 | - -* 返回值 - - void - -* 示例 - -``` -bundle.checkPermission('com.example.actsbmscheckpermissiontest', 'com.permission.CAMERA', OnReceiveEvent); - -function OnReceiveEvent(err, data) { - ... -} -``` +# Bundle模块(JS端SDK接口) + +## 导入模块 + +``` +import bundle from '@ohos.bundle'; +``` + +## 系统能力 + +SystemCapability.BundleManager.BundleFramework + +## 权限列表 + +无 + +## bundle.getApplicationInfo + +getApplicationInfo(bundleName: string, bundleFlags: number, userId: number): Promise\ + +以异步方法根据给定的包名获取ApplicationInfo,使用Promise形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------ | ---- | ------------------------------------------------------------ | +| bundleName | string | 是 | 要查询的应用程序包名称。 | +| bundleFlags | number | 是 | 用于指定返回的应用信息对象中包含信息的标记。默认值:0,取值范围:大于等于0 | +| userId | number | 是 | 用户ID | + +**返回值:** + +| 类型 | 说明 | +| ----------- | -------- | +| Promise\ | Promise形式返回应用程序信息。 | + +**示例:** + +```js +bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0).then((data) => { + console.info("name: for begin"); + console.info("name:" + data.name); + console.info("bundleName:" + data.bundleName); + console.info("description:" + data.description); + console.info("descriptionId:" + data.descriptionId); + console.info("iconPath:" + data.iconPath); + console.info("iconId:" + data.iconId); + console.info("label:" + data.label); + console.info("labelId:" + data.labelId); + console.info("deviceId:" + data.deviceId); + console.info("signatureKey:" + data.signatureKey); + console.info("process:" + data.process); + console.info("isSystemApp:" + data.isSystemApp); + console.info("isLauncherApp:" + data.isLauncherApp); + console.info("supportedModes:" + data.supportedModes); + + console.info('getApplicationInfo permissions length [' + data.permissions.length + ']'); + for (var j = 0; j < data.permissions.length; j++) { + console.info("permissions[" + j + "]:" + data.permissions[j]); + } + console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']'); + for (var j = 0; j < data.moduleSourceDirs.length; j++) { + console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]); + } + console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']'); + for (var j = 0; j < data.moduleInfos.length; j++) { + console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName); + console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir); + } + console.info("entryDir:" + data.entryDir); + console.info("codePath:" + data.codePath); + console.info("dataDir:" + data.dataDir); + console.info("dataBaseDir:" + data.dataBaseDir); + console.info("cacheDir:" + data.cacheDir); +}) +``` + + + +## bundle.getApplicationInfo + +getApplicationInfo(bundleName: string, bundleFlags: number, userId: number, callback: AsyncCallback\): void + +以异步方法根据给定的包名获取ApplicationInfo,使用callback形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------------------------------- | ---- | ------------------------------------------------------------ | +| bundleName | string | 是 | 要查询的应用程序包名称。 | +| bundleFlags | number | 是 | 用于指定返回的应用信息对象中包含信息的标记。默认值:0,取值范围:大于等于0 | +| userId | number | 是 | 用户ID | +| callback | AsyncCallback\ | 是 | 程序启动作为入参的回调函数,返回应用程序信息。 | + +**示例:** + +```js +bundle.getApplicationInfo('com.example.myapplicationInstall', 8, 0, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info("name: for begin"); + console.info("name:" + data.name); + console.info("bundleName:" + data.bundleName); + console.info("description:" + data.description); + console.info("descriptionId:" + data.descriptionId); + console.info("iconPath:" + data.iconPath); + console.info("iconId:" + data.iconId); + console.info("label:" + data.label); + console.info("labelId:" + data.labelId); + console.info("deviceId:" + data.deviceId); + console.info("signatureKey:" + data.signatureKey); + console.info("process:" + data.process); + console.info("isSystemApp:" + data.isSystemApp); + console.info("isLauncherApp:" + data.isLauncherApp); + console.info("supportedModes:" + data.supportedModes); + + console.info('getApplicationInfo permissions length [' + data.permissions.length + ']'); + for (var j = 0; j < data.permissions.length; j++) { + console.info("permissions[" + j + "]:" + data.permissions[j]); + } + console.info('getApplicationInfo moduleSourceDirs length [' + data.moduleSourceDirs.length + ']'); + for (var j = 0; j < data.moduleSourceDirs.length; j++) { + console.info("moduleSourceDirs[" + j + "]:" + data.moduleSourceDirs[j]); + } + console.info('getApplicationInfo moduleInfos length [' + data.moduleInfos.length + ']'); + for (var j = 0; j < data.moduleInfos.length; j++) { + console.info("moduleInfos[" + j + "]moduleName:" + data.moduleInfos[j].moduleName); + console.info("moduleInfos[" + j + "]moduleSourceDir:" + data.moduleInfos[j].moduleSourceDir); + } + console.info("entryDir:" + data.entryDir); + console.info("codePath:" + data.codePath); + console.info("dataDir:" + data.dataDir); + console.info("dataBaseDir:" + data.dataBaseDir); + console.info("cacheDir:" + data.cacheDir); +} +``` + + + +## bundle.getAllBundleInfo + +getAllBundleInfo(bundleFlag: BundleFlag): Promise> + +以异步方法获取系统中所有可用的BundleInfo,使用Promise形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ---------- | ---- | ----------------------------------------------------------- | +| bundleFlag | BundleFlag | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | + +**返回值:** + +| 类型 | 说明 | +| --------------------------- | ----------------------------------- | +| Promise> | Promise形式返回所有可用的BundleInfo | + +**示例:** + +```js +bundle.getAllBundleInfo(0).then((data) => { + for (var i = 0; i < data.length; i++) { + console.info("index[" + i + "].name: for begin"); + console.info("index[" + i + "].name:" + data[i].name); + console.info("index[" + i + "].label:" + data[i].label); + console.info("index[" + i + "].description:" + data[i].description); + console.info("index[" + i + "].vendor:" + data[i].vendor); + console.info("index[" + i + "].versionCode:" + data[i].versionCode); + console.info("index[" + i + "].versionName:" + data[i].versionName); + console.info("index[" + i + "].jointUserId:" + data[i].jointUserId); + console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion); + console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion); + console.info("index[" + i + "].mainEntry:" + data[i].mainEntry); + console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi); + console.info("index[" + i + "].appId:" + data[i].appId); + console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion); + console.info("index[" + i + "].targetVersion:" + data[i].targetVersion); + console.info("index[" + i + "].releaseType:" + data[i].releaseType); + console.info("index[" + i + "].uid:" + data[i].uid); + console.info("index[" + i + "].gid:" + data[i].gid); + console.info("index[" + i + "].seInfo:" + data[i].seInfo); + console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName); + console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive); + console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp); + console.info("index[" + i + "].installTime:" + data[i].installTime); + console.info("index[" + i + "].updateTime:" + data[i].updateTime); + console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name); + console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName); + console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']'); + for (var j = 0; j < data[i].reqPermissions.length; j++) { + console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]); + } + console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']'); + for (var j = 0; j < data[i].defPermissions.length; j++) { + console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]); + } + + console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']'); + for (var j = 0; j < data[i].hapModuleNames.length; j++) { + console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]); + } + console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']'); + for (var j = 0; j < data[i].moduleNames.length; j++) { + console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]); + } + console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']'); + for (var j = 0; j < data[i].modulePublicDirs.length; j++) { + console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]); + } + console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']'); + for (var j = 0; j < data[i].moduleDirs.length; j++) { + console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]); + } + console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']'); + for (var j = 0; j < data[i].moduleResPaths.length; j++) { + console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]); + } + console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']'); + for (var j = 0; j < data[i].abilityInfos.length; j++) { + console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name); + console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package); + } + } +}) +``` + + + +## bundle.getAllBundleInfo + +getAllBundleInfo(bundleFlag: BundleFlag, callback: AsyncCallback>): void + +以异步方法获取系统中所有可用的BundleInfo,使用callback形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------------- | ---- | ------------------------------------------------------------ | +| bundleFlag | BundleFlag | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | +| callback | AsyncCallback> | 是 | 程序启动作为入参的回调函数,返回所有可用的BundleInfo。 | + +**示例:** + +```js +bundle.getAllBundleInfo(0, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info('xxx getAllBundleInfo data length [' + data.length + ']'); + for (var i = 0; i < data.length; i++) { + console.info("index[" + i + "].name: for begin"); + console.info("index[" + i + "].name:" + data[i].name); + console.info("index[" + i + "].label:" + data[i].label); + console.info("index[" + i + "].description:" + data[i].description); + console.info("index[" + i + "].vendor:" + data[i].vendor); + console.info("index[" + i + "].versionCode:" + data[i].versionCode); + console.info("index[" + i + "].versionName:" + data[i].versionName); + console.info("index[" + i + "].jointUserId:" + data[i].jointUserId); + console.info("index[" + i + "].minSdkVersion:" + data[i].minSdkVersion); + console.info("index[" + i + "].maxSdkVersion:" + data[i].maxSdkVersion); + console.info("index[" + i + "].mainEntry:" + data[i].mainEntry); + console.info("index[" + i + "].cpuAbi:" + data[i].cpuAbi); + console.info("index[" + i + "].appId:" + data[i].appId); + console.info("index[" + i + "].compatibleVersion:" + data[i].compatibleVersion); + console.info("index[" + i + "].targetVersion:" + data[i].targetVersion); + console.info("index[" + i + "].releaseType:" + data[i].releaseType); + console.info("index[" + i + "].uid:" + data[i].uid); + console.info("index[" + i + "].gid:" + data[i].gid); + console.info("index[" + i + "].seInfo:" + data[i].seInfo); + console.info("index[" + i + "].entryModuleName:" + data[i].entryModuleName); + console.info("index[" + i + "].isKeepAlive:" + data[i].isKeepAlive); + console.info("index[" + i + "].isNativeApp:" + data[i].isNativeApp); + console.info("index[" + i + "].installTime:" + data[i].installTime); + console.info("index[" + i + "].updateTime:" + data[i].updateTime); + console.info("index[" + i + "].appInfo.name:" + data[i].applicationInfo.name); + console.info("index[" + i + "].appInfo.bundleName:" + data[i].applicationInfo.bundleName); + console.info('getAllBundleInfo reqPermissions length [' + data[i].reqPermissions.length + ']'); + for (var j = 0; j < data[i].reqPermissions.length; j++) { + console.info("index[" + i + "]reqPermissions[" + j + "]:" + data[i].reqPermissions[j]); + } + console.info('getAllBundleInfo defPermissions length [' + data[i].defPermissions.length + ']'); + for (var j = 0; j < data[i].defPermissions.length; j++) { + console.info("index[" + i + "]defPermissions[" + j + "]:" + data[i].defPermissions[j]); + } + + console.info('getAllBundleInfo hapModuleNames length [' + data[i].hapModuleNames.length + ']'); + for (var j = 0; j < data[i].hapModuleNames.length; j++) { + console.info("index[" + i + "]hapModuleNames[" + j + "]:" + data[i].hapModuleNames[j]); + } + console.info('getAllBundleInfo moduleNames length [' + data[i].moduleNames.length + ']'); + for (var j = 0; j < data[i].moduleNames.length; j++) { + console.info("index[" + i + "]moduleNames[" + j + "]:" + data[i].moduleNames[j]); + } + console.info('getAllBundleInfo modulePublicDirs length [' + data[i].modulePublicDirs.length + ']'); + for (var j = 0; j < data[i].modulePublicDirs.length; j++) { + console.info("index[" + i + "]modulePublicDirs[" + j + "]:" + data[i].modulePublicDirs[j]); + } + console.info('getAllBundleInfo moduleDirs length [' + data[i].moduleDirs.length + ']'); + for (var j = 0; j < data[i].moduleDirs.length; j++) { + console.info("index[" + i + "]moduleDirs[" + j + "]:" + data[i].moduleDirs[j]); + } + console.info('getAllBundleInfo moduleResPaths length [' + data[i].moduleResPaths.length + ']'); + for (var j = 0; j < data[i].moduleResPaths.length; j++) { + console.info("index[" + i + "]moduleResPaths[" + j + "]:" + data[i].moduleResPaths[j]); + } + console.info('getAllBundleInfo abilityInfo length [' + data[i].abilityInfos.length + ']'); + for (var j = 0; j < data[i].abilityInfos.length; j++) { + console.info("index[" + i + "]abilityInfos[" + j + "]name:" + data[i].abilityInfos[j].name); + console.info("index[" + i + "]abilityInfos[" + j + "]package:" + data[i].abilityInfos[j].package); + } + } +} +``` + + + +## bundle.getBundleInfo + +getBundleInfo(bundleName: string, bundleFlags: number): Promise\ + +以异步方法根据给定的包名获取BundleInfo,使用Promise形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------ | ---- | ------------------------------------------------------------ | +| bundleName | string | 是 | 包名 | +| bundleFlags | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | + +**返回值:** + +| 类型 | 说明 | +| -------------------- | ------------------------------------------ | +| Promise\ | 返回值为Promise对象,Promise中包含包信息。 | + +**示例:** + +```js +bundle.getBundleInfo('com.example.myapplicationInstall', 1).then((data) => { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("vendor:" + data.vendor); + console.info("versionCode:" + data.versionCode); + console.info("versionName:" + data.versionName); + console.info("jointUserId:" + data.jointUserId); + console.info("minSdkVersion:" + data.minSdkVersion); + console.info("maxSdkVersion:" + data.maxSdkVersion); + console.info("mainEntry:" + data.mainEntry); + console.info("cpuAbi:" + data.cpuAbi); + console.info("appId:" + data.appId); + console.info("compatibleVersion:" + data.compatibleVersion); + console.info("targetVersion:" + data.targetVersion); + console.info("releaseType:" + data.releaseType); + console.info("uid:" + data.uid); + console.info("gid:" + data.gid); + console.info("seInfo:" + data.seInfo); + console.info("entryModuleName:" + data.entryModuleName); + console.info("isKeepAlive:" + data.isKeepAlive); + console.info("isNativeApp:" + data.isNativeApp); + console.info("installTime:" + data.installTime); + console.info("updateTime:" + data.updateTime); + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']'); + for (var j = 0; j < data.reqPermissions.length; j++) { + console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); + } + console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']'); + for (var j = 0; j < data.defPermissions.length; j++) { + console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); + } + + console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); + for (var j = 0; j < data.hapModuleNames.length; j++) { + console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); + } + console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']'); + for (var j = 0; j < data.moduleNames.length; j++) { + console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); + } + console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); + for (var j = 0; j < data.modulePublicDirs.length; j++) { + console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); + } + console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']'); + for (var j = 0; j < data.moduleDirs.length; j++) { + console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); + } + console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); + for (var j = 0; j < data.moduleResPaths.length; j++) { + console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); + } + console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']'); + for (var j = 0; j < data.abilityInfos.length; j++) { + console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); + console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); + } +}) +``` + + + +## bundle.getBundleInfo + +getBundleInfo(bundleName: string, bundleFlags: number, callback: AsyncCallback\): void + +以异步方法根据给定的包名获取BundleInfo,使用callback形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | -------------------------- | ---- | ------------------------------------------------------------ | +| bundleName | string | 是 | 包名 | +| bundleFlags | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | +| callback | AsyncCallback\ | 是 | 程序启动作为入参的回调函数,返回包信息。 | + +**示例:** + +```js +bundle.getBundleInfo('com.example.myapplicationInstall', 1, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("vendor:" + data.vendor); + console.info("versionCode:" + data.versionCode); + console.info("versionName:" + data.versionName); + console.info("jointUserId:" + data.jointUserId); + console.info("minSdkVersion:" + data.minSdkVersion); + console.info("maxSdkVersion:" + data.maxSdkVersion); + console.info("mainEntry:" + data.mainEntry); + console.info("cpuAbi:" + data.cpuAbi); + console.info("appId:" + data.appId); + console.info("compatibleVersion:" + data.compatibleVersion); + console.info("targetVersion:" + data.targetVersion); + console.info("releaseType:" + data.releaseType); + console.info("uid:" + data.uid); + console.info("gid:" + data.gid); + console.info("seInfo:" + data.seInfo); + console.info("entryModuleName:" + data.entryModuleName); + console.info("isKeepAlive:" + data.isKeepAlive); + console.info("isNativeApp:" + data.isNativeApp); + console.info("installTime:" + data.installTime); + console.info("updateTime:" + data.updateTime); + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + console.info('getBundleInfo reqPermissions length [' + data.reqPermissions.length + ']'); + for (var j = 0; j < data.reqPermissions.length; j++) { + console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); + } + console.info('getBundleInfo defPermissions length [' + data.defPermissions.length + ']'); + for (var j = 0; j < data.defPermissions.length; j++) { + console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); + } + + console.info('getBundleInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); + for (var j = 0; j < data.hapModuleNames.length; j++) { + console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); + } + console.info('getBundleInfo moduleNames length [' + data.moduleNames.length + ']'); + for (var j = 0; j < data.moduleNames.length; j++) { + console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); + } + console.info('getBundleInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); + for (var j = 0; j < data.modulePublicDirs.length; j++) { + console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); + } + console.info('getBundleInfo moduleDirs length [' + data.moduleDirs.length + ']'); + for (var j = 0; j < data.moduleDirs.length; j++) { + console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); + } + console.info('getBundleInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); + for (var j = 0; j < data.moduleResPaths.length; j++) { + console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); + } + console.info('getBundleInfo abilityInfo length [' + data.abilityInfos.length + ']'); + for (var j = 0; j < data.abilityInfos.length; j++) { + console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); + console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); + } +} +``` + + + +## bundle.getAllApplicationInfo + +getAllApplicationInfo(bundleFlags: number, userId: number): Promise> + +获取指定用户下所有已安装的应用信息,通过Promise获取返回值。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------ | ---- | ------------------------------------------------------ | +| bundleFlags | number | 是 | 0:返回默认应用信息<
8:返回包含权限信息的应用信息 | +| userId | number | 是 | 用户ID | + +**返回值:** + +| 类型 | 说明 | +| -------------------------------- | ------------------------------------------------ | +| Promise> | 返回值为Promise对象,Promise中包含应用信息列表。 | + +**示例:** + +```js +bundle.getAllApplicationInfo(8, 0).then((data) => { + console.info('xxx getAllApplicationInfo data length [' + data.length + ']'); + for (var i = 0; i < data.length; i++) { + console.info("index[" + i + "].name: for begin"); + console.info("index[" + i + "].name:" + data[i].name); + console.info("index[" + i + "].bundleName:" + data[i].bundleName); + console.info("index[" + i + "].description:" + data[i].description); + console.info("index[" + i + "].descriptionId:" + data[i].descriptionId); + console.info("index[" + i + "].iconPath:" + data[i].iconPath); + console.info("index[" + i + "].iconId:" + data[i].iconId); + console.info("index[" + i + "].label:" + data[i].label); + console.info("index[" + i + "].labelId:" + data[i].labelId); + console.info("index[" + i + "].deviceId:" + data[i].deviceId); + console.info("index[" + i + "].signatureKey:" + data[i].signatureKey); + console.info("index[" + i + "].process:" + data[i].process); + console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp); + console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp); + console.info("index[" + i + "].supportedModes:" + data[i].supportedModes); + + console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']'); + for (var j = 0; j < data[i].permissions.length; j++) { + console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]); + } + console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']'); + for (var j = 0; j < data[i].moduleSourceDirs.length; j++) { + console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]); + } + console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']'); + for (var j = 0; j < data[i].moduleInfos.length; j++) { + console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName); + console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir); + } + console.info("index[" + i + "].entryDir:" + data[i].entryDir); + console.info("index[" + i + "].codePath:" + data[i].codePath); + console.info("index[" + i + "].dataDir:" + data[i].dataDir); + console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir); + console.info("index[" + i + "].cacheDir:" + data[i].cacheDir); + } +}) +``` + + + +## bundle.getAllApplicationInfo + +getAllApplicationInfo(bundleFlags: number, userId: number, callback: AsyncCallback>): void + +获取指定用户下所有已安装的应用信息,通过回调函数获取返回值。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | -------------------------------------- | ---- | ------------------------------------------------------ | +| bundleFlags | number | 是 | 0:返回默认应用信息<
8:返回包含权限信息的应用信息 | +| userId | number | 是 | 用户ID | +| callback | AsyncCallback> | 是 | 程序启动作为入参的回调函数,返回应用信息列表。 | + +**示例:** + +```js +bundle.getAllApplicationInfo(8, 0, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info('xxx getAllApplicationInfo data length [' + data.length + ']'); + for (var i = 0; i < data.length; i++) { + console.info("index[" + i + "].name: for begin"); + console.info("index[" + i + "].name:" + data[i].name); + console.info("index[" + i + "].bundleName:" + data[i].bundleName); + console.info("index[" + i + "].description:" + data[i].description); + console.info("index[" + i + "].descriptionId:" + data[i].descriptionId); + console.info("index[" + i + "].iconPath:" + data[i].iconPath); + console.info("index[" + i + "].iconId:" + data[i].iconId); + console.info("index[" + i + "].label:" + data[i].label); + console.info("index[" + i + "].labelId:" + data[i].labelId); + console.info("index[" + i + "].deviceId:" + data[i].deviceId); + console.info("index[" + i + "].signatureKey:" + data[i].signatureKey); + console.info("index[" + i + "].process:" + data[i].process); + console.info("index[" + i + "].isSystemApp:" + data[i].isSystemApp); + console.info("index[" + i + "].isLauncherApp:" + data[i].isLauncherApp); + console.info("index[" + i + "].supportedModes:" + data[i].supportedModes); + + console.info('getAllApplicationInfo Async permissions length [' + data[i].permissions.length + ']'); + for (var j = 0; j < data[i].permissions.length; j++) { + console.info("index[" + i + "]permissions[" + j + "]:" + data[i].permissions[j]); + } + console.info('getAllApplicationInfo Async moduleSourceDirs length [' + data[i].moduleSourceDirs.length + ']'); + for (var j = 0; j < data[i].moduleSourceDirs.length; j++) { + console.info("index[" + i + "]moduleSourceDirs[" + j + "]:" + data[i].moduleSourceDirs[j]); + } + console.info('getAllApplicationInfo Async moduleInfos length [' + data[i].moduleInfos.length + ']'); + for (var j = 0; j < data[i].moduleInfos.length; j++) { + console.info("index[" + i + "]moduleInfos[" + j + "]moduleName:" + data[i].moduleInfos[j].moduleName); + console.info("index[" + i + "]moduleInfos[" + j + "]moduleSourceDir:" + data[i].moduleInfos[j].moduleSourceDir); + } + console.info("index[" + i + "].entryDir:" + data[i].entryDir); + console.info("index[" + i + "].codePath:" + data[i].codePath); + console.info("index[" + i + "].dataDir:" + data[i].dataDir); + console.info("index[" + i + "].dataBaseDir:" + data[i].dataBaseDir); + console.info("index[" + i + "].cacheDir:" + data[i].cacheDir); + } +} +``` + + + +## bundle.queryAbilityByWant + +queryAbilityByWant(want: Want, bundleFlags: number, userId?: number): Promise> + +以异步方法根据给定的意图获取Ability信息,使用Promise形式返回结果。 + +**需要权限:** + +ohos.permission.GET_BUNDLE_INFO_PRIVILEGED,ohos.permission.GET_BUNDLE_INFO + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------ | ---- | ------------------------------------------------------------ | +| want | Want | 是 | 包含要查询的应用程序包名称的意图。 | +| bundleFlags | number | 是 | 0:返回默认AbilityInfo
2:返回包含权限信息的AbilityInfo
4:返回包含应用信息的AbilityInfo | +| userId | number | 否 | 用户ID。默认值:调用方所在用户,取值范围:大于等于0 | + +**返回值:** + +| 类型 | 说明 | +| ---------------------------- | ---------------------------- | +| Promise> | Promise形式返回Ability信息。 | + +**示例:** + +```js +bundle.queryAbilityByWant({ + want: { + action: "action.system.home", + entities: ["entity.system.home"], + elementName: { + deviceId: "0", + bundleName: "com.example.myapplicationInstall", + abilityName: "com.example.myapplication.MainAbility", + }, + } +}, 1, 0, +}).then((data) => { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("iconPath:" + data.iconPath); + console.info("visible:" + data.visible); + console.info("kind:" + data.kind); + console.info("uri:" + data.uri); + console.info("process:" + data.process); + console.info("package:" + data.package); + console.info("bundleName:" + data.bundleName); + console.info("moduleName:" + data.moduleName); + console.info("applicationName:" + data.applicationName); + console.info("deviceId:" + data.deviceId); + console.info("codePath:" + data.codePath); + console.info("resourcePath:" + data.resourcePath); + console.info("libPath:" + data.libPath); + + console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']'); + for (var j = 0; j < data.permissions.length; j++) { + console.info("permissions[" + j + "]:" + data.permissions[j]); + } + console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']'); + for (var j = 0; j < data.deviceTypes.length; j++) { + console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]); + } + console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']'); + for (var j = 0; j < data.deviceCapabilities.length; j++) { + console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]); + } + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA + console.info("type:" + data.type); + // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT, + console.info("orientation:" + data.orientation); + // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD + console.info("launchMode:" + data.launchMode); + + // the enum of AbilityType + console.info("AbilityType:" + bundle.AbilityType.UNKNOWN); + console.info("AbilityType:" + bundle.AbilityType.PAGE); + console.info("AbilityType:" + bundle.AbilityType.SERVICE); + console.info("AbilityType:" + bundle.AbilityType.DATA); + if (data.type == bundle.AbilityType.PAGE) { + console.info("this AbilityType is PAGE"); + } + // the enum of DisplayOrientation + console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT); + if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) { + console.info("this DisplayOrientation is UNSPECIFIED"); + } + // the enum of LaunchMode + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON); + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP); + console.info("LaunchMode:" + bundle.LaunchMode.STANDARD); + if (data.launchMode == bundle.LaunchMode.STANDARD) { + console.info("this LaunchMode is STANDARD"); + } + +}) +``` + + + +## bundle.queryAbilityByWant + +queryAbilityByWant(want: Want, bundleFlags: number, userId: number, callback: AsyncCallback>): void + +以异步方法根据给定的意图获取Ability信息,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ---------------------------------- | ---- | ------------------------------------------------------------ | +| want | Want | 是 | 指示包含要查询的应用程序包名称的意图。 | +| bundleFlags | number | 是 | 0:返回默认AbilityInfo
2:返回包含权限信息的AbilityInfo
4:返回包含应用信息的AbilityInfo | +| userId | number | 是 | 用户ID | +| callback | AsyncCallback> | 是 | 程序启动作为入参的回调函数,返回Ability信息。 | + +**示例:** + +```js +bundle.queryAbilityByWant( + { + want: { + action: "action.system.home", + entities: ["entity.system.home"], + elementName: { + deviceId: "0", + bundleName: "com.example.myapplicationInstall", + abilityName: "com.example.myapplication.MainAbility", + }, + } + }, 1, 0, + }, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("iconPath:" + data.iconPath); + console.info("visible:" + data.visible); + console.info("kind:" + data.kind); + console.info("uri:" + data.uri); + console.info("process:" + data.process); + console.info("package:" + data.package); + console.info("bundleName:" + data.bundleName); + console.info("moduleName:" + data.moduleName); + console.info("applicationName:" + data.applicationName); + console.info("deviceId:" + data.deviceId); + console.info("codePath:" + data.codePath); + console.info("resourcePath:" + data.resourcePath); + console.info("libPath:" + data.libPath); + + console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']'); + for (var j = 0; j < data.permissions.length; j++) { + console.info("permissions[" + j + "]:" + data.permissions[j]); + } + console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']'); + for (var j = 0; j < data.deviceTypes.length; j++) { + console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]); + } + console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']'); + for (var j = 0; j < data.deviceCapabilities.length; j++) { + console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]); + } + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA + console.info("type:" + data.type); + // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT, + console.info("orientation:" + data.orientation); + // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD + console.info("launchMode:" + data.launchMode); + + // the enum of AbilityType + console.info("AbilityType:" + bundle.AbilityType.UNKNOWN); + console.info("AbilityType:" + bundle.AbilityType.PAGE); + console.info("AbilityType:" + bundle.AbilityType.SERVICE); + console.info("AbilityType:" + bundle.AbilityType.DATA); + if (data.type == bundle.AbilityType.PAGE) { + console.info("this AbilityType is PAGE"); + } + // the enum of DisplayOrientation + console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT); + if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) { + console.info("this DisplayOrientation is UNSPECIFIED"); + } + // the enum of LaunchMode + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON); + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP); + console.info("LaunchMode:" + bundle.LaunchMode.STANDARD); + if (data.launchMode == bundle.LaunchMode.STANDARD) { + console.info("this LaunchMode is STANDARD"); + } +} +``` + +## bundle.queryAbilityByWant + +queryAbilityByWant(want: Want, bundleFlags: number, callback: AsyncCallback>): void + +以异步方法根据给定的意图获取Ability信息,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ---------------------------------- | ---- | ------------------------------------------------------------ | +| want | Want | 是 | 指示包含要查询的应用程序包名称的意图。 | +| bundleFlags | number | 是 | 0:返回默认AbilityInfo
2:返回包含权限信息的AbilityInfo
4:返回包含应用信息的AbilityInfo | +| callback | AsyncCallback> | 是 | 程序启动作为入参的回调函数,返回Ability信息。 | + +**示例:** + +```js +bundle.queryAbilityByWant( + { + want: { + action: "action.system.home", + entities: ["entity.system.home"], + elementName: { + deviceId: "0", + bundleName: "com.example.myapplicationInstall", + abilityName: "com.example.myapplication.MainAbility", + }, + } + }, 1, + }, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("iconPath:" + data.iconPath); + console.info("visible:" + data.visible); + console.info("kind:" + data.kind); + console.info("uri:" + data.uri); + console.info("process:" + data.process); + console.info("package:" + data.package); + console.info("bundleName:" + data.bundleName); + console.info("moduleName:" + data.moduleName); + console.info("applicationName:" + data.applicationName); + console.info("deviceId:" + data.deviceId); + console.info("codePath:" + data.codePath); + console.info("resourcePath:" + data.resourcePath); + console.info("libPath:" + data.libPath); + + console.info('queryAbilityInfo permissions length [' + data.permissions.length + ']'); + for (var j = 0; j < data.permissions.length; j++) { + console.info("permissions[" + j + "]:" + data.permissions[j]); + } + console.info('queryAbilityInfo deviceTypes length [' + data.deviceTypes.length + ']'); + for (var j = 0; j < data.deviceTypes.length; j++) { + console.info("deviceTypes[" + j + "]:" + data.deviceTypes[j]); + } + console.info('queryAbilityInfo deviceCapabilities length [' + data.deviceCapabilities.length + ']'); + for (var j = 0; j < data.deviceCapabilities.length; j++) { + console.info("deviceCapabilities[" + j + "]:" + data.deviceCapabilities[j]); + } + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + // ability type: 0:UNKNOWN, 1:PAGE, 2:SERVICE, 3:DATA + console.info("type:" + data.type); + // orientation: 0:UNSPECIFIED, 1:LANDSCAPE, 2:PORTRAIT, 3:FOLLOWRECENT, + console.info("orientation:" + data.orientation); + // launchMode: 0:SINGLETON, 1:SINGLETOP, 2:STANDARD + console.info("launchMode:" + data.launchMode); + + // the enum of AbilityType + console.info("AbilityType:" + bundle.AbilityType.UNKNOWN); + console.info("AbilityType:" + bundle.AbilityType.PAGE); + console.info("AbilityType:" + bundle.AbilityType.SERVICE); + console.info("AbilityType:" + bundle.AbilityType.DATA); + if (data.type == bundle.AbilityType.PAGE) { + console.info("this AbilityType is PAGE"); + } + // the enum of DisplayOrientation + console.info("DisplayOrientation:" + bundle.DisplayOrientation.UNSPECIFIED); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.LANDSCAPE); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.PORTRAIT); + console.info("DisplayOrientation:" + bundle.DisplayOrientation.FOLLOWRECENT); + if (data.orientation == bundle.DisplayOrientation.UNSPECIFIED) { + console.info("this DisplayOrientation is UNSPECIFIED"); + } + // the enum of LaunchMode + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETON); + console.info("LaunchMode:" + bundle.LaunchMode.SINGLETOP); + console.info("LaunchMode:" + bundle.LaunchMode.STANDARD); + if (data.launchMode == bundle.LaunchMode.STANDARD) { + console.info("this LaunchMode is STANDARD"); + } +} +``` + +## bundle.getBundleArchiveInfo + +getBundleArchiveInfo(hapFilePath: string, bundleFlags: number): Promise\ + +以异步方法从给定的HAP中获取BundleInfo,使用Promise形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------ | ---- | ------------------------------------------------------------ | +| hapFilePath | string | 是 | HAP文件路径 | +| bundleFlags | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | + +**返回值:** + +| 类型 | 说明 | +| -------------------- | ------------------------------------------ | +| Promise\ | 返回值为Promise对象,Promise中包含包信息。 | + +**示例:** + +```js +bundle.getBundleArchiveInfo('/data/test.hap', 1).then((data) => { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("vendor:" + data.vendor); + console.info("versionCode:" + data.versionCode); + console.info("versionName:" + data.versionName); + console.info("jointUserId:" + data.jointUserId); + console.info("minSdkVersion:" + data.minSdkVersion); + console.info("maxSdkVersion:" + data.maxSdkVersion); + console.info("mainEntry:" + data.mainEntry); + console.info("cpuAbi:" + data.cpuAbi); + console.info("appId:" + data.appId); + console.info("compatibleVersion:" + data.compatibleVersion); + console.info("targetVersion:" + data.targetVersion); + console.info("releaseType:" + data.releaseType); + console.info("uid:" + data.uid); + console.info("gid:" + data.gid); + console.info("seInfo:" + data.seInfo); + console.info("entryModuleName:" + data.entryModuleName); + console.info("isKeepAlive:" + data.isKeepAlive); + console.info("isNativeApp:" + data.isNativeApp); + console.info("installTime:" + data.installTime); + console.info("updateTime:" + data.updateTime); + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + console.info('getBundleArchiveInfo reqPermissions length [' + data.reqPermissions.length + ']'); + for (var j = 0; j < data.reqPermissions.length; j++) { + console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); + } + console.info('getBundleArchiveInfo defPermissions length [' + data.defPermissions.length + ']'); + for (var j = 0; j < data.defPermissions.length; j++) { + console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); + } + console.info('getBundleArchiveInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); + for (var j = 0; j < data.hapModuleNames.length; j++) { + console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); + } + console.info('getBundleArchiveInfo moduleNames length [' + data.moduleNames.length + ']'); + for (var j = 0; j < data.moduleNames.length; j++) { + console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); + } + console.info('getBundleArchiveInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); + for (var j = 0; j < data.modulePublicDirs.length; j++) { + console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); + } + console.info('getBundleArchiveInfo moduleDirs length [' + data.moduleDirs.length + ']'); + for (var j = 0; j < data.moduleDirs.length; j++) { + console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); + } + console.info('getBundleArchiveInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); + for (var j = 0; j < data.moduleResPaths.length; j++) { + console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); + } + console.info('getBundleArchiveInfo abilityInfo length [' + data.abilityInfos.length + ']'); + for (var j = 0; j < data.abilityInfos.length; j++) { + console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); + console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); + } +}) +``` + +## bundle.getBundleArchiveInfo + +getBundleArchiveInfo(hapFilePath: string, bundleFlags: number, callback: AsyncCallback\): void + +以异步方法从给定的HAP中获取BundleInfo,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ----------- | ------------------------- | ---- | ------------------------------------------------------------ | +| hapFilePath | string | 是 | HAP文件路径 | +| bundleFlags | number | 是 | 0:返回默认BundleInfo
1:返回包含abilityInfo的BundleInfo | +| callback | AsyncCallback | 是 | 程序启动作为入参的回调函数,返回包信息。 | + +**示例:** + +```js +bundle.getBundleArchiveInfo('/data/test.hap', 1, OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.info("name:" + data.name); + console.info("label:" + data.label); + console.info("description:" + data.description); + console.info("vendor:" + data.vendor); + console.info("versionCode:" + data.versionCode); + console.info("versionName:" + data.versionName); + console.info("jointUserId:" + data.jointUserId); + console.info("minSdkVersion:" + data.minSdkVersion); + console.info("maxSdkVersion:" + data.maxSdkVersion); + console.info("mainEntry:" + data.mainEntry); + console.info("cpuAbi:" + data.cpuAbi); + console.info("appId:" + data.appId); + console.info("compatibleVersion:" + data.compatibleVersion); + console.info("targetVersion:" + data.targetVersion); + console.info("releaseType:" + data.releaseType); + console.info("uid:" + data.uid); + console.info("gid:" + data.gid); + console.info("seInfo:" + data.seInfo); + console.info("entryModuleName:" + data.entryModuleName); + console.info("isKeepAlive:" + data.isKeepAlive); + console.info("isNativeApp:" + data.isNativeApp); + console.info("installTime:" + data.installTime); + console.info("updateTime:" + data.updateTime); + console.info("appInfo.name:" + data.applicationInfo.name); + console.info("appInfo.bundleName:" + data.applicationInfo.bundleName); + console.info('getBundleArchiveInfo reqPermissions length [' + data.reqPermissions.length + ']'); + for (var j = 0; j < data.reqPermissions.length; j++) { + console.info("reqPermissions[" + j + "]:" + data.reqPermissions[j]); + } + console.info('getBundleArchiveInfo defPermissions length [' + data.defPermissions.length + ']'); + for (var j = 0; j < data.defPermissions.length; j++) { + console.info("defPermissions[" + j + "]:" + data.defPermissions[j]); + } + console.info('getBundleArchiveInfo hapModuleNames length [' + data.hapModuleNames.length + ']'); + for (var j = 0; j < data.hapModuleNames.length; j++) { + console.info("hapModuleNames[" + j + "]:" + data.hapModuleNames[j]); + } + console.info('getBundleArchiveInfo moduleNames length [' + data.moduleNames.length + ']'); + for (var j = 0; j < data.moduleNames.length; j++) { + console.info("moduleNames[" + j + "]:" + data.moduleNames[j]); + } + console.info('getBundleArchiveInfo modulePublicDirs length [' + data.modulePublicDirs.length + ']'); + for (var j = 0; j < data.modulePublicDirs.length; j++) { + console.info("modulePublicDirs[" + j + "]:" + data.modulePublicDirs[j]); + } + console.info('getBundleArchiveInfo moduleDirs length [' + data.moduleDirs.length + ']'); + for (var j = 0; j < data.moduleDirs.length; j++) { + console.info("moduleDirs[" + j + "]:" + data.moduleDirs[j]); + } + console.info('getBundleArchiveInfo moduleResPaths length [' + data.moduleResPaths.length + ']'); + for (var j = 0; j < data.moduleResPaths.length; j++) { + console.info("moduleResPaths[" + j + "]:" + data.moduleResPaths[j]); + } + console.info('getBundleArchiveInfo abilityInfo length [' + data.abilityInfos.length + ']'); + for (var j = 0; j < data.abilityInfos.length; j++) { + console.info("abilityInfos[" + j + "]name:" + data.abilityInfos[j].name); + console.info("abilityInfos[" + j + "]package:" + data.abilityInfos[j].package); + } +} +``` + +## bundle.getBundleInstaller + +getBundleInstaller(): Promise + +以异步方法获取BundleInstaller,使用Promise形式返回结果。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------ | --------------------------------------------------- | +| Promise | 返回值为Promise对象,Promise中包含BundleInstaller。 | + +**示例:** + +```js +bundle.getBundleInstaller().then((data) => { + data.install(['/data/test.hap'], { + param: { + userId: 0, + installFlag: 1, + isKeepData: false + } + }, OnReceiveinstallEvent); + + function OnReceiveinstallEvent(err, data) { + console.info("name: for begin"); + console.info("install result code:" + data.status); + console.info("install result msg:" + data.statusMessage); + } +}) +``` + +## bundle.getBundleInstaller + +getBundleInstaller(callback: AsyncCallback): void; + +以异步方法从给定的HAP中获取BundleInstaller,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ------------------------------ | ---- | ------------------------------------------------- | +| callback | AsyncCallback | 是 | 程序启动作为入参的回调函数,返回BundleInstaller。 | + +**示例:** + +```js +bundle.getBundleInstaller((err, data)=>{ + data.uninstall('com.example.myapplication', { + userId: 0, + installFlag: 1, + isKeepData: false + }, OnReceiveinstallEvent); + + function OnReceiveinstallEvent(err, data) { + console.info("name: for begin"); + console.info("uninstall result code:" + data.status); + console.info("uninstall result msg:" + data.statusMessage); + } +}) +``` + +## bundle.getAllShortcutInfo + +getAllShortcutInfo(bundleName: string): Promise> + +以异步方法获取指定bundle的Shortcut信息,使用Promise形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------ | ---- | -------- | +| bundleName | string | 是 | bundle名 | + +**返回值:** +| 类型 | 说明 | +| ----------------------------- | ---------------------------------------------------- | +| Promise\> | 返回值为Promise对象,Promise中包含Shortcut信息列表。 | + +**示例:** + +```js +bundle.getAllShortcutInfo('com.example.third1').then((data) => { + console.log("getAllShortcutInfo data:" + data); +}); +``` + + + +## bundle.getAllShortcutInfo + +getAllShortcutInfo(bundleName: string, callback: AsyncCallback>): void + +以异步方法获取指定bundle的Shortcut信息,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------------------------------------ | ---- | -------------------------------------------------- | +| bundleName | string | 是 | bundle名 | +| callback | AsyncCallback<> | 是 | 程序启动作为入参的回调函数,返回Shortcut信息列表。 | + +**示例:** + +```js +bundle.getAllShortcutInfo('com.example.third1', OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.log("getAllShortcutInfo data:" + data); +} +``` + +## bundle.checkPermission + +checkPermission(bundleName: string, permission: string): Promise\ + +以异步方法校验指定bundle是否具有指定权限,使用Promise形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ------ | ---- | -------- | +| bundleName | string | 是 | bundle名 | +| permission | string | 是 | 权限名 | + +**返回值:** +| 类型 | 说明 | +| --------------------- | ------------------------------------------------------------ | +| Promise\ | 返回值为Promise对象,Promise中包含校验结果。
-1: 未授权
0: 已授权 | + +**示例:** + +```js +bundle.checkPermission('com.example.actsbmscheckpermissiontest', 'com.permission.CAMERA').then((data) => { + console.log("checkPermission data:" + data); +}); +``` + +## bundle.checkPermission + +checkPermission(bundleName: string, permission: string, callback: AsyncCallback\): void + +以异步方法校验指定bundle是否具有指定权限,使用callback形式返回结果。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------- | ---- | ------------------------------------------------------------ | +| bundleName | string | 是 | bundle名 | +| permission | string | 是 | 权限名 | +| callback | AsyncCallback\ | 是 | 程序启动作为入参的回调函数,返回校验结果。
-1: 未授权
0: 已授权 | + +**示例:** + +```js +bundle.checkPermission('com.example.actsbmscheckpermissiontest', 'com.permission.CAMERA', OnReceiveEvent); + +function OnReceiveEvent(err, data) { + console.log("checkPermission data:" + data); +} +``` + +## ElementName + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | ------ | ---- | ------------------------------------------------------------ | +| deviceId | 只读 | string | 否 | 表示运行指定Ability的设备ID。 | +| bundleName | 只读 | string | 是 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| abilityName | 只读 | string | 是 | 表示待启动的Ability名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | + +## InstallStatus + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------- | -------- | ---------------- | ---- | ------------------------------------------------------------ | +| status | 只读 | InstallErrorCode | 是 | 安装结果code
SUCCESS = 0
STATUS_INSTALL_FAILURE = 1
STATUS_INSTALL_FAILURE_ABORTED = 2,
STATUS_INSTALL_FAILURE_INVALID = 3
STATUS_INSTALL_FAILURE_CONFLICT = 4
STATUS_INSTALL_FAILURE_STORAGE = 5
STATUS_INSTALL_FAILURE_INCOMPATIBLE = 6
STATUS_INSTALL_FAILURE_DOWNLOAD_TIMEOUT = 0x0B
STATUS_INSTALL_FAILURE_DOWNLOAD_FAILED = 0x0C
STATUS_ABILITY_NOT_FOUND = 0x40
STATUS_BMS_SERVICE_ERROR = 0x41 | +| statusMessage | 只读 | string | 是 | 安装结果Message | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" similarity index 45% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" index 878bcc2e171748f446f3eeadc044cc963de059d6..7ceb2671e738123b79d66906d425c5ce12c4b562 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/06.CommonEvent\346\250\241\345\235\227.md" @@ -1,6 +1,6 @@ --- title: CommonEvent模块 -permalink: /pages/000b000005 +permalink: /pages/010c010106 navbar: true sidebar: true prev: true @@ -9,513 +9,867 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- -# CommonEvent模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | -| CommonEvent.publish(event: string, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | -| CommonEvent.publish(event: string, options: CommonEventPublishData, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | -| CommonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | -| CommonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo) | 支持 | 支持 | 支持 | 支持 | 不支持 | -| CommonEvent.subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | -| CommonEvent.unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | - -#### 权限列表 - -| 系统公共事件宏 | 系统公共事件名称 | 订阅者所需权限 | -| ------------------------------------------------------------ | ----------------------------------------------------------- | ------------------------------------------------------------ | -| COMMON_EVENT_BOOT_COMPLETED | usual.event.BOOT_COMPLETED | ohos.permission.RECEIVER_STARTUP_COMPLETED | -| COMMON_EVENT_LOCKED_BOOT_COMPLETED | usual.event.LOCKED_BOOT_COMPLETED | ohos.permission.RECEIVER_STARTUP_COMPLETED | -| COMMON_EVENT_SHUTDOWN | usual.event.SHUTDOWN | 无 | -| COMMON_EVENT_BATTERY_CHANGED | usual.event.BATTERY_CHANGED | 无 | -| COMMON_EVENT_BATTERY_LOW | usual.event.BATTERY_LOW | 无 | -| COMMON_EVENT_BATTERY_OKAY | usual.event.BATTERY_OKAY | 无 | -| COMMON_EVENT_POWER_CONNECTED | usual.event.POWER_CONNECTED | 无 | -| COMMON_EVENT_POWER_DISCONNECTED | usual.event.POWER_DISCONNECTED | 无 | -| COMMON_EVENT_SCREEN_OFF | usual.event.SCREEN_OFF | 无 | -| COMMON_EVENT_SCREEN_ON | usual.event.SCREEN_ON | 无 | -| COMMON_EVENT_USER_PRESENT | usual.event.USER_PRESENT | 无 | -| COMMON_EVENT_TIME_TICK | usual.event.TIME_TICK | 无 | -| COMMON_EVENT_TIME_CHANGED | usual.event.TIME_CHANGED | 无 | -| COMMON_EVENT_DATE_CHANGED | usual.event.DATE_CHANGED | 无 | -| COMMON_EVENT_TIMEZONE_CHANGED | usual.event.TIMEZONE_CHANGED | 无 | -| COMMON_EVENT_CLOSE_SYSTEM_DIALOGS | usual.event.CLOSE_SYSTEM_DIALOGS | 无 | -| COMMON_EVENT_PACKAGE_ADDED | usual.event.PACKAGE_ADDED | 无 | -| COMMON_EVENT_PACKAGE_REPLACED | usual.event.PACKAGE_REPLACED | 无 | -| COMMON_EVENT_MY_PACKAGE_REPLACED | usual.event.MY_PACKAGE_REPLACED | 无 | -| COMMON_EVENT_PACKAGE_REMOVED | usual.event.PACKAGE_REMOVED | 无 | -| COMMON_EVENT_PACKAGE_FULLY_REMOVED | usual.event.PACKAGE_FULLY_REMOVED | 无 | -| COMMON_EVENT_PACKAGE_CHANGED | usual.event.PACKAGE_CHANGED | 无 | -| COMMON_EVENT_PACKAGE_RESTARTED | usual.event.PACKAGE_RESTARTED | 无 | -| COMMON_EVENT_PACKAGE_DATA_CLEARED | usual.event.PACKAGE_DATA_CLEARED | 无 | -| COMMON_EVENT_PACKAGES_SUSPENDED | usual.event.PACKAGES_SUSPENDED | 无 | -| COMMON_EVENT_PACKAGES_UNSUSPENDED | usual.event.PACKAGES_UNSUSPENDED | 无 | -| COMMON_EVENT_MY_PACKAGE_SUSPENDED | usual.event.MY_PACKAGE_SUSPENDED | 无 | -| COMMON_EVENT_MY_PACKAGE_UNSUSPENDED | usual.event.MY_PACKAGE_UNSUSPENDED | 无 | -| COMMON_EVENT_UID_REMOVED | usual.event.UID_REMOVED | 无 | -| COMMON_EVENT_PACKAGE_FIRST_LAUNCH | usual.event.PACKAGE_FIRST_LAUNCH | 无 | -| COMMON_EVENT_PACKAGE_NEEDS_VERIFICATION | usual.event.PACKAGE_NEEDS_VERIFICATION | 无 | -| COMMON_EVENT_PACKAGE_VERIFIED | usual.event.PACKAGE_VERIFIED | 无 | -| COMMON_EVENT_EXTERNAL_APPLICATIONS_AVAILABLE | usual.event.EXTERNAL_APPLICATIONS_AVAILABLE | 无 | -| COMMON_EVENT_EXTERNAL_APPLICATIONS_UNAVAILABLE | usual.event.EXTERNAL_APPLICATIONS_UNAVAILABLE | 无 | -| COMMON_EVENT_CONFIGURATION_CHANGED | usual.event.CONFIGURATION_CHANGED | 无 | -| COMMON_EVENT_LOCALE_CHANGED | usual.event.LOCALE_CHANGED | 无 | -| COMMON_EVENT_MANAGE_PACKAGE_STORAGE | usual.event.MANAGE_PACKAGE_STORAGE | 无 | -| COMMON_EVENT_DRIVE_MODE | common.event.DRIVE_MODE | 无 | -| COMMON_EVENT_HOME_MODE | common.event.HOME_MODE | 无 | -| COMMON_EVENT_OFFICE_MODE | common.event.OFFICE_MODE | 无 | -| COMMON_EVENT_USER_STARTED | usual.event.USER_STARTED | 无 | -| COMMON_EVENT_USER_BACKGROUND | usual.event.USER_BACKGROUND | 无 | -| COMMON_EVENT_USER_FOREGROUND | usual.event.USER_FOREGROUND | 无 | -| COMMON_EVENT_USER_SWITCHED | usual.event.USER_SWITCHED | ohos.permission.MANAGE_USERS | -| COMMON_EVENT_USER_STARTING | usual.event.USER_STARTING | ohos.permission.INTERACT_ACROSS_USERS | -| COMMON_EVENT_USER_UNLOCKED | usual.event.USER_UNLOCKED | 无 | -| COMMON_EVENT_USER_STOPPING | usual.event.USER_STOPPING | ohos.permission.INTERACT_ACROSS_USERS | -| COMMON_EVENT_USER_STOPPED | usual.event.USER_STOPPED | 无 | -| COMMON_EVENT_HWID_LOGIN | common.event.HWID_LOGIN | 无 | -| COMMON_EVENT_HWID_LOGOUT | common.event.HWID_LOGOUT | 无 | -| COMMON_EVENT_HWID_TOKEN_INVALID | common.event.HWID_TOKEN_INVALID | 无 | -| COMMON_EVENT_HWID_LOGOFF | common.event.HWID_LOGOFF | 无 | -| COMMON_EVENT_WIFI_POWER_STATE | usual.event.wifi.POWER_STATE | 无 | -| COMMON_EVENT_WIFI_SCAN_FINISHED | usual.event.wifi.SCAN_FINISHED | ohos.permission.LOCATION | -| COMMON_EVENT_WIFI_RSSI_VALUE | usual.event.wifi.RSSI_VALUE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_CONN_STATE | usual.event.wifi.CONN_STATE | 无 | -| COMMON_EVENT_WIFI_HOTSPOT_STATE | usual.event.wifi.HOTSPOT_STATE | 无 | -| COMMON_EVENT_WIFI_AP_STA_JOIN | usual.event.wifi.WIFI_HS_STA_JOIN | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_AP_STA_LEAVE | usual.event.wifi.WIFI_HS_STA_LEAVE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_MPLINK_STATE_CHANGE | usual.event.wifi.mplink.STATE_CHANGE | ohos.permission.MPLINK_CHANGE_STATE | -| COMMON_EVENT_WIFI_P2P_CONN_STATE | usual.event.wifi.p2p.CONN_STATE_CHANGE | ohos.permission.GET_WIFI_INFO and ohos.permission.LOCATION | -| COMMON_EVENT_WIFI_P2P_STATE_CHANGED | usual.event.wifi.p2p.STATE_CHANGE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_P2P_PEERS_STATE_CHANGED | usual.event.wifi.p2p.DEVICES_CHANGE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_P2P_PEERS_DISCOVERY_STATE_CHANGED | usual.event.wifi.p2p.PEER_DISCOVERY_STATE_CHANGE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_P2P_CURRENT_DEVICE_STATE_CHANGED | usual.event.wifi.p2p.CURRENT_DEVICE_CHANGE | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_WIFI_P2P_GROUP_STATE_CHANGED | usual.event.wifi.p2p.GROUP_STATE_CHANGED | ohos.permission.GET_WIFI_INFO | -| COMMON_EVENT_BLUETOOTH_HANDSFREE_AG_CONNECT_STATE_UPDATE | usual.event.bluetooth.handsfree.ag.CONNECT_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HANDSFREE_AG_CURRENT_DEVICE_UPDATE | usual.event.bluetooth.handsfree.ag.CURRENT_DEVICE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HANDSFREE_AG_AUDIO_STATE_UPDATE | usual.event.bluetooth.handsfree.ag.AUDIO_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_CONNECT_STATE_UPDATE | usual.event.bluetooth.a2dpsource.CONNECT_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_CURRENT_DEVICE_UPDATE | usual.event.bluetooth.a2dpsource.CURRENT_DEVICE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_PLAYING_STATE_UPDATE | usual.event.bluetooth.a2dpsource.PLAYING_STATE_UPDATE" | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_AVRCP_CONNECT_STATE_UPDATE | usual.event.bluetooth.a2dpsource.AVRCP_CONNECT_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_CODEC_VALUE_UPDATE | usual.event.bluetooth.a2dpsource.CODEC_VALUE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_DISCOVERED | usual.event.bluetooth.remotedevice.DISCOVERED | ohos.permission.USE_BLUETOOTH and ohos.permission.LOCATION | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CLASS_VALUE_UPDATE | usual.event.bluetooth.remotedevice.CLASS_VALUE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_ACL_CONNECTED | usual.event.bluetooth.remotedevice.ACL_CONNECTED | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_ACL_DISCONNECTED | usual.event.bluetooth.remotedevice.ACL_DISCONNECTED | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_NAME_UPDATE | usual.event.bluetooth.remotedevice.NAME_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_PAIR_STATE | usual.event.bluetooth.remotedevice.PAIR_STATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_BATTERY_VALUE_UPDATE | usual.event.bluetooth.remotedevice.BATTERY_VALUE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_SDP_RESULT | usual.event.bluetooth.remotedevice.SDP_RESULT | 无 | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_UUID_VALUE | usual.event.bluetooth.remotedevice.UUID_VALUE | ohos.permission.DISCOVER_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_PAIRING_REQ | usual.event.bluetooth.remotedevice.PAIRING_REQ | ohos.permission.DISCOVER_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_PAIRING_CANCEL | usual.event.bluetooth.remotedevice.PAIRING_CANCEL | 无 | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_REQ | usual.event.bluetooth.remotedevice.CONNECT_REQ | 无 | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_REPLY | usual.event.bluetooth.remotedevice.CONNECT_REPLY | 无 | -| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_CANCEL | usual.event.bluetooth.remotedevice.CONNECT_CANCEL | 无 | -| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_CONNECT_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.CONNECT_STATE_UPDATE | 无 | -| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AUDIO_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.AUDIO_STATE_UPDATE | 无 | -| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AG_COMMON_EVENT | usual.event.bluetooth.handsfreeunit.AG_COMMON_EVENT | 无 | -| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AG_CALL_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.AG_CALL_STATE_UPDATE | 无 | -| COMMON_EVENT_BLUETOOTH_HOST_STATE_UPDATE | usual.event.bluetooth.host.STATE_UPDATE | 无 | -| COMMON_EVENT_BLUETOOTH_HOST_REQ_DISCOVERABLE | usual.event.bluetooth.host.REQ_DISCOVERABLE | 无 | -| COMMON_EVENT_BLUETOOTH_HOST_REQ_ENABLE | usual.event.bluetooth.host.REQ_ENABLE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HOST_REQ_DISABLE | usual.event.bluetooth.host.REQ_DISABLE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HOST_SCAN_MODE_UPDATE | usual.event.bluetooth.host.SCAN_MODE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HOST_DISCOVERY_STARTED | usual.event.bluetooth.host.DISCOVERY_STARTED | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HOST_DISCOVERY_FINISHED | usual.event.bluetooth.host.DISCOVERY_FINISHED | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_HOST_NAME_UPDATE | usual.event.bluetooth.host.NAME_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSINK_CONNECT_STATE_UPDATE | usual.event.bluetooth.a2dpsink.CONNECT_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSINK_PLAYING_STATE_UPDATE | usual.event.bluetooth.a2dpsink.PLAYING_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_BLUETOOTH_A2DPSINK_AUDIO_STATE_UPDATE | usual.event.bluetooth.a2dpsink.AUDIO_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | -| COMMON_EVENT_NFC_ACTION_ADAPTER_STATE_CHANGED | usual.event.nfc.action.ADAPTER_STATE_CHANGED | 无 | -| COMMON_EVENT_NFC_ACTION_RF_FIELD_ON_DETECTED | usual.event.nfc.action.RF_FIELD_ON_DETECTED | ohos.permission.MANAGE_SECURE_SETTINGS | -| COMMON_EVENT_NFC_ACTION_RF_FIELD_OFF_DETECTED | usual.event.nfc.action.RF_FIELD_OFF_DETECTED | ohos.permission.MANAGE_SECURE_SETTINGS | -| COMMON_EVENT_DISCHARGING | usual.event.DISCHARGING | 无 | -| COMMON_EVENT_CHARGING | usual.event.CHARGING | 无 | -| COMMON_EVENT_DEVICE_IDLE_MODE_CHANGED | usual.event.DEVICE_IDLE_MODE_CHANGED | 无 | -| COMMON_EVENT_POWER_SAVE_MODE_CHANGED | usual.event.POWER_SAVE_MODE_CHANGED | 无 | -| COMMON_EVENT_USER_ADDED | usual.event.USER_ADDED | ohos.permission.MANAGE_USERS | -| COMMON_EVENT_USER_REMOVED | usual.event.USER_REMOVED | ohos.permission.MANAGE_USERS | -| COMMON_EVENT_ABILITY_ADDED | common.event.ABILITY_ADDED | ohos.permission.LISTEN_BUNDLE_CHANGE | -| COMMON_EVENT_ABILITY_REMOVED | common.event.ABILITY_REMOVED | ohos.permission.LISTEN_BUNDLE_CHANGE | -| COMMON_EVENT_ABILITY_UPDATED | common.event.ABILITY_UPDATED | ohos.permission.LISTEN_BUNDLE_CHANGE | -| COMMON_EVENT_LOCATION_MODE_STATE_CHANGED | usual.event.location.MODE_STATE_CHANGED | 无 | -| COMMON_EVENT_IVI_SLEEP | common.event.IVI_SLEEP | 无 | -| COMMON_EVENT_IVI_PAUSE | common.event.IVI_PAUSE | 无 | -| COMMON_EVENT_IVI_STANDBY | common.event.IVI_STANDBY | 无 | -| COMMON_EVENT_IVI_LASTMODE_SAVE | common.event.IVI_LASTMODE_SAVE | 无 | -| COMMON_EVENT_IVI_VOLTAGE_ABNORMAL | common.event.IVI_VOLTAGE_ABNORMAL | 无 | -| COMMON_EVENT_IVI_HIGH_TEMPERATURE | common.event.IVI_HIGH_TEMPERATURE | 无 | -| COMMON_EVENT_IVI_EXTREME_TEMPERATURE | common.event.IVI_EXTREME_TEMPERATURE | 无 | -| COMMON_EVENT_IVI_TEMPERATURE_ABNORMAL | common.event.IVI_TEMPERATURE_ABNORMAL | 无 | -| COMMON_EVENT_IVI_VOLTAGE_RECOVERY | common.event.IVI_VOLTAGE_RECOVERY | 无 | -| COMMON_EVENT_IVI_TEMPERATURE_RECOVERY | common.event.IVI_TEMPERATURE_RECOVERY | 无 | -| COMMON_EVENT_IVI_ACTIVE | common.event.IVI_ACTIVE | 无 | -| COMMON_EVENT_USB_DEVICE_ATTACHED | usual.event.hardware.usb.action.USB_DEVICE_ATTACHED | 无 | -| COMMON_EVENT_USB_DEVICE_DETACHED | usual.event.hardware.usb.action.USB_DEVICE_DETACHED | 无 | -| COMMON_EVENT_USB_ACCESSORY_ATTACHED | usual.event.hardware.usb.action.USB_ACCESSORY_ATTACHED | 无 | -| COMMON_EVENT_USB_ACCESSORY_DETACHED | usual.event.hardware.usb.action.USB_ACCESSORY_DETACHED | 无 | -| COMMON_EVENT_DISK_REMOVED | usual.event.data.DISK_REMOVED | ohos.permission.WRITE_USER_STORAGE or ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_DISK_UNMOUNTED | usual.event.data.DISK_UNMOUNTED | ohos.permission.WRITE_USER_STORAGEor ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_DISK_MOUNTED | usual.event.data.DISK_MOUNTED | ohos.permission.WRITE_USER_STORAGEor ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_DISK_BAD_REMOVAL | usual.event.data.DISK_BAD_REMOVAL | ohos.permission.WRITE_USER_STORAGEor ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_DISK_UNMOUNTABLE | usual.event.data.DISK_UNMOUNTABLE | ohos.permission.WRITE_USER_STORAGEor ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_DISK_EJECT | usual.event.data.DISK_EJECT | ohos.permission.WRITE_USER_STORAGEor ohos.permission.READ_USER_STORAGE | -| COMMON_EVENT_VISIBLE_ACCOUNTS_UPDATED | usual.event.data.VISIBLE_ACCOUNTS_UPDATED | ohos.permission.GET_APP_ACCOUNTS | -| COMMON_EVENT_ACCOUNT_DELETED | usual.event.data.ACCOUNT_DELETED | ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS | -| COMMON_EVENT_FOUNDATION_READY | common.event.FOUNDATION_READY | ohos.permission.RECEIVER_STARTUP_COMPLETED | -| COMMON_EVENT_AIRPLANE_MODE_CHANGED | usual.event.AIRPLANE_MODE | 无 | - -#### 导入模块 - -```js -import CommonEvent from '@ohos.commonevent'; -``` - - - -#### CommonEvent.publish(event: string, callback: AsyncCallback) - -- 接口说明 - - 发布公共事件(callback形式) - -* publish参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ------------------- | ---- | -------------------- | - | event | 只读 | string | 是 | 表示要发送的公共事件 | - | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | - -* 返回值 - - void - -* 示例 - -```js -//发布公共事件回调 -function PublishCallBack(err) { - console.info("==========================>PublishCallBack=======================>"); - console.info("==========================>err:=======================>", err.code); -} -//发布公共事件 -CommonEvent.publish("publish_event", PublishCallBack); -``` - - - -#### CommonEvent.publish(event: string, options: CommonEventPublishData, callback: AsyncCallback) - -- 接口说明 - - 发布公共事件指定发布信息(callback形式) - -- publish参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | ---------------------- | - | event | 只读 | string | 是 | 表示要发布的公共事件 | - | options | 只读 | CommonEventPublishData | 是 | 表示发布公共事件的属性 | - | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | - -- CommonEventPublishData类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | --------------------- | -------- | -------------------- | ---- | ---------------------------- | - | bundleName | 只读 | string | 否 | 表示包名称 | - | code | 只读 | int | 否 | 表示公共事件的结果代码 | - | data | 只读 | string | 否 | 表示公共事件的自定义结果数据 | - | subscriberPermissions | 只读 | Array | 否 | 表示订阅者的权限 | - | isOrdered | 只读 | bool | 否 | 表示是否是有序事件 | - | parameters | 只读 | {[key: string]: any} | 否 | 表示公共事件的附加信息 | - -- 返回值 - - void - -- 示例 - -```js -//公共事件相关信息 -var options = { - code: 0; //公共事件的初始代码 - data: "initial data";//公共事件的初始数据 - isOrdered: true; //有序公共事件 -} -//发布公共事件回调 -function PublishCallBack(err) { - console.info("==========================>PublishCallBack=======================>"); -} -//发布公共事件 -CommonEvent.publish("publish_event", options, PublishCallBack); -``` - - - -#### CommonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback) - -- 接口说明 - - 创建订阅者(callback形式) - -- createSubscriber参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------- | -------- | ------------------------------------ | ---- | ------------------------ | - | subscribeInfo | 只读 | CommonEventSubscribeInfo | 是 | 表示订阅信息 | - | callback | 只读 | AsyncCallback | 是 | 表示创建订阅者的回调方法 | - -- CommonEventSubscriber 类说明 - - | 名称 | 参数 | 返回值 | 描述 | - | --------------------- | --------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------ | - | getCode | callback: AsyncCallback | void | 获取公共事件的结果代码(callback形式) | - | getCode | void | Promise | 获取公共事件的结果代码(Promise形式) | - | setCode | code: number, callback: AsyncCallback | void | 设置公共事件的结果代码(callback形式) | - | setCode | code: number | Promise | 设置公共事件的结果代码(Promise形式) | - | getData | callback: AsyncCallback | void | 获取公共事件的结果数据(callback形式) | - | getData | void | Promise | 获取公共事件的结果数据(Promise形式) | - | setData | data: string, callback: AsyncCallback | void | 设置公共事件的结果数据(callback形式) | - | setData | data: string | Promise | 设置公共事件的结果数据(Promise形式) | - | setCodeAndData | code: number, data: string, callback: AsyncCallback | void | 设置公共事件的结果代码和结果数据(callback形式) | - | setCodeAndData | code: number, data: string | Promise | 设置公共事件的结果代码和结果数据(Promise形式) | - | isOrderedCommonEvent | callback: AsyncCallback | void | 查询当前公共事件的是否为有序公共事件,返回true代表是有序公共事件,false代表不是有序公共事件(callback形式) | - | isOrderedCommonEvent | void | Promise | 查询当前公共事件的是否为有序公共事件,返回true代表是有序公共事件,false代表不是有序公共事件(Promise形式) | - | abortCommonEvent | callback: AsyncCallback | void | 取消当前的公共事件,仅对有序公共事件有效,取消后,公共事件不再向下一个订阅者传递(callback形式) | - | abortCommonEvent | void | Promise | 取消当前的公共事件,仅对有序公共事件有效,取消后,公共事件不再向下一个订阅者传递(Promise形式) | - | clearAbortCommonEvent | callback: AsyncCallback | void | 清除当前有序公共事件abort状态(callback形式) | - | clearAbortCommonEvent | void | Promise | 清除当前有序公共事件abort状态(Promise形式) | - | getAbortCommonEvent | callback: AsyncCallback | void | 获取当前有序公共事件是否取消的状态(callback形式) | - | getAbortCommonEvent | void | Promise | 获取当前有序公共事件是否取消的状态Promise形式) | - | getSubscribeInfo | callback: AsyncCallback | void | 获取订阅者的订阅信息(callback形式) | - | getSubscribeInfo | void | Promise | 获取订阅者的订阅信息(Promise形式) | - -- CommonEventSubscribeInfo类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------------- | -------- | ------------- | ---- | ------------------------------------------------------------ | - | events | 只读 | Array | 是 | 表示要订阅的公共事件 | - | publisherPermission | 只读 | string | 否 | 表示发布者的权限 | - | publisherDeviceId | 只读 | int | 否 | 表示设备ID,该值必须是同一ohos网络上的现有设备ID | - | userId | 只读 | int | 否 | 表示用户ID。此参数是可选的,默认值当前用户的ID。如果指定了此参数,则该值必须是系统中现有的用户ID。 | - | priority | 只读 | int | 否 | 表示订阅者的优先级,范围为-100~1000。 | - -- 返回值 - - void - -- 示例 - -```js -var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 -//订阅者信息 -var subscribeInfo = { - events: ["event"] -}; -//创建订阅者回调 -function CreateSubscriberCallBack(err, data) { - console.info("==========================>CreateSubscriberCallBack=======================>"); - subscriber = data; -} -//创建订阅者 -CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); -``` - - - -#### CommonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo) - -- 接口说明 - - 创建订阅者(Promise形式) - -- createSubscriber参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------- | -------- | ------------------------ | ---- | ------------ | - | subscribeInfo | 只读 | CommonEventSubscribeInfo | 是 | 表示订阅信息 | - -- CommonEventSubscribeInfo类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------------- | -------- | ------------- | ---- | ------------------------------------------------------------ | - | events | 只读 | Array | 是 | 表示要发送的公共事件 | - | publisherPermission | 只读 | string | 否 | 表示发布者的权限 | - | publisherDeviceId | 只读 | int | 否 | 表示设备ID,该值必须是同一ohos网络上的现有设备ID | - | userId | 只读 | int | 否 | 表示用户ID。此参数是可选的,默认值当前用户的ID。如果指定了此参数,则该值必须是系统中现有的用户ID。 | - | priority | 只读 | int | 否 | 表示订阅者的优先级。值的范围是-100到1000 | - -- 返回值 - - Promise - -- 示例 - -```js -var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 -//订阅者信息 -var subscribeInfo = { - events: ["event"] -}; -//创建订阅者 -CommonEvent.createSubscriber(subscribeInfo).then((data) => { - console.info("==========================>createSubscriberPromise=======================>"); - subscriber = data; -}); -``` - - - -#### CommonEvent.subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback) - -- 接口说明 - - 订阅公共事件(callback形式) - -- subscribe参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | ------------------------------ | ---- | ------------------------------ | - | subscriber | 只读 | CommonEventSubscriber | 是 | 表示订阅者对象 | - | callback | 只读 | AsyncCallback | 是 | 表示接收公共事件数据的回调函数 | - -- CommonEventData类型说明 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | -------------------- | ---- | ------------------------------------------------------- | - | event | 只读 | string | 是 | 表示当前接收的公共事件名称 | - | bundleName | 只读 | string | 否 | 表示包名称 | - | code | 只读 | int | 否 | 表示公共事件的结果代码,用于传递int类型的数据 | - | data | 只读 | string | 否 | 表示公共事件的自定义结果数据,用于传递string 类型的数据 | - | parameters | 只读 | {[key: string]: any} | 否 | 表示公共事件的附加信息 | - -- 返回值 - - void - -- 示例 - - * 无序事件: - - ```js - var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 - //订阅者信息 - var subscribeInfo = { - events: ["event"] - }; - //订阅公共事件回调 - function SubscribeCallBack(err, data) { - console.info("==========================>SubscribeCallBack=======================>"); - } - //创建订阅者回调 - function CreateSubscriberCallBack(err, data) { - console.info("==========================>CreateSubscriberCallBack=======================>"); - subscriber = data; - //订阅公共事件 - CommonEvent.subscribe(subscriber, SubscribeCallBack); - } - //创建订阅者 - CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); - ``` - - * 有序事件 - - ```js - var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 - //订阅者信息 - var subscribeInfo = { - events: ["event"] - }; - - //设置有序公共事件的结果代码回调 - function SetCodeCallBack(err) { - console.info("==========================>SetCodeCallBack=======================>"); - } - //设置有序公共事件的结果数据回调 - function SetDataCallBack(err) { - console.info("==========================>SetDataCallBack=======================>"); - } - //完成本次有序公共事件处理回调 - function FinishCommonEventCallBack(err) { - console.info("==========================>FinishCommonEventCallBack=======================>"); - } - //订阅公共事件回调 - function SubscribeCallBack(err, data) { - console.info("==========================>SubscribeCallBack=======================>"); - //设置有序公共事件的结果代码 - subscriber.setCode(0, SetCodeCallBack); - //设置有序公共事件的结果数据 - subscriber.setData("publish_data_changed", SetDataCallBack); - //完成本次有序公共事件处理 - subscriber.finishCommonEvent(FinishCommonEventCallBack) - } - - //创建订阅者回调 - function CreateSubscriberCallBack(err, data) { - console.info("==========================>CreateSubscriberCallBack=======================>"); - subscriber = data; - //订阅公共事件 - CommonEvent.subscribe(subscriber, SubscribeCallBack); - } - - //创建订阅者 - CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); - ``` - - - -#### CommonEvent.unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback) - -- 接口说明 - - 取消订阅公共事件(callback形式) - -- unsubscribe参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | --------------------- | ---- | ---------------------- | - | subscriber | 只读 | CommonEventSubscriber | 是 | 表示订阅者对象 | - | callback | 只读 | AsyncCallback | 是 | 表示取消订阅的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 -//订阅者信息 -var subscribeInfo = { - events: ["event"] -}; -//订阅公共事件回调 -function SubscribeCallBack(err, data) { - console.info("==========================>SubscribeCallBack=======================>"); -} -//创建订阅者回调 -function CreateSubscriberCallBack(err, data) { - console.info("==========================>CreateSubscriberCallBack=======================>"); - subscriber = data; - //订阅公共事件 - CommonEvent.subscribe(subscriber, SubscribeCallBack); -} -//取消订阅公共事件回调 -function UnsubscribeCallBack(err) { - console.info("==========================>UnsubscribeCallBack=======================>"); -} -//创建订阅者 -CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); -//取消订阅公共事件 -CommonEvent.unsubscribe(subscriber, UnsubscribeCallBack); -``` - - - - - +# 公共事件模块 + +> **说明:** +> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 权限列表 + +| 系统公共事件宏 | 系统公共事件名称 | 订阅者所需权限 | +| ------------ | ------------------ | ---------------------- | +| COMMON_EVENT_BOOT_COMPLETED | usual.event.BOOT_COMPLETED | ohos.permission.RECEIVER_STARTUP_COMPLETED | +| COMMON_EVENT_SHUTDOWN | usual.event.SHUTDOWN | 无 | +| COMMON_EVENT_BATTERY_CHANGED | usual.event.BATTERY_CHANGED | 无 | +| COMMON_EVENT_BATTERY_LOW | usual.event.BATTERY_LOW | 无 | +| COMMON_EVENT_BATTERY_OKAY | usual.event.BATTERY_OKAY | 无 | +| COMMON_EVENT_POWER_CONNECTED | usual.event.POWER_CONNECTED | 无 | +| COMMON_EVENT_POWER_DISCONNECTED | usual.event.POWER_DISCONNECTED | 无 | +| COMMON_EVENT_SCREEN_OFF | usual.event.SCREEN_OFF | 无 | +| COMMON_EVENT_SCREEN_ON | usual.event.SCREEN_ON | 无 | +| COMMON_EVENT_USER_PRESENT | usual.event.USER_PRESENT | 无 | +| COMMON_EVENT_TIME_TICK | usual.event.TIME_TICK | 无 | +| COMMON_EVENT_TIME_CHANGED | usual.event.TIME_CHANGED | 无 | +| COMMON_EVENT_DATE_CHANGED | usual.event.DATE_CHANGED | 无 | +| COMMON_EVENT_TIMEZONE_CHANGED | usual.event.TIMEZONE_CHANGED | 无 | +| COMMON_EVENT_CLOSE_SYSTEM_DIALOGS | usual.event.CLOSE_SYSTEM_DIALOGS | 无 | +| COMMON_EVENT_PACKAGE_ADDED | usual.event.PACKAGE_ADDED | 无 | +| COMMON_EVENT_PACKAGE_REPLACED | usual.event.PACKAGE_REPLACED | 无 | +| COMMON_EVENT_MY_PACKAGE_REPLACED | usual.event.MY_PACKAGE_REPLACED | 无 | +| COMMON_EVENT_PACKAGE_REMOVED | usual.event.PACKAGE_REMOVED | 无 | +| COMMON_EVENT_PACKAGE_FULLY_REMOVED | usual.event.PACKAGE_FULLY_REMOVED | 无 | +| COMMON_EVENT_PACKAGE_CHANGED | usual.event.PACKAGE_CHANGED | 无 | +| COMMON_EVENT_PACKAGE_RESTARTED | usual.event.PACKAGE_RESTARTED | 无 | +| COMMON_EVENT_PACKAGE_DATA_CLEARED | usual.event.PACKAGE_DATA_CLEARED | 无 | +| COMMON_EVENT_PACKAGES_SUSPENDED | usual.event.PACKAGES_SUSPENDED | 无 | +| COMMON_EVENT_PACKAGES_UNSUSPENDED | usual.event.PACKAGES_UNSUSPENDED | 无 | +| COMMON_EVENT_MY_PACKAGE_SUSPENDED | usual.event.MY_PACKAGE_SUSPENDED | 无 | +| COMMON_EVENT_MY_PACKAGE_UNSUSPENDED | usual.event.MY_PACKAGE_UNSUSPENDED | 无 | +| COMMON_EVENT_UID_REMOVED | usual.event.UID_REMOVED | 无 | +| COMMON_EVENT_PACKAGE_FIRST_LAUNCH | usual.event.PACKAGE_FIRST_LAUNCH | 无 | +| COMMON_EVENT_PACKAGE_NEEDS_VERIFICATION | usual.event.PACKAGE_NEEDS_VERIFICATION | 无 | +| COMMON_EVENT_PACKAGE_VERIFIED | usual.event.PACKAGE_VERIFIED | 无 | +| COMMON_EVENT_EXTERNAL_APPLICATIONS_AVAILABLE | usual.event.EXTERNAL_APPLICATIONS_AVAILABLE | 无 | +| COMMON_EVENT_EXTERNAL_APPLICATIONS_UNAVAILABLE | usual.event.EXTERNAL_APPLICATIONS_UNAVAILABLE | 无 | +| COMMON_EVENT_CONFIGURATION_CHANGED | usual.event.CONFIGURATION_CHANGED | 无 | +| COMMON_EVENT_LOCALE_CHANGED | usual.event.LOCALE_CHANGED | 无 | +| COMMON_EVENT_MANAGE_PACKAGE_STORAGE | usual.event.MANAGE_PACKAGE_STORAGE | 无 | +| COMMON_EVENT_DRIVE_MODE | common.event.DRIVE_MODE | 无 | +| COMMON_EVENT_HOME_MODE | common.event.HOME_MODE | 无 | +| COMMON_EVENT_OFFICE_MODE | common.event.OFFICE_MODE | 无 | +| COMMON_EVENT_USER_STARTED | usual.event.USER_STARTED | 无 | +| COMMON_EVENT_USER_BACKGROUND | usual.event.USER_BACKGROUND | 无 | +| COMMON_EVENT_USER_FOREGROUND | usual.event.USER_FOREGROUND | 无 | +| COMMON_EVENT_USER_SWITCHED | usual.event.USER_SWITCHED | ohos.permission.MANAGE_USERS | +| COMMON_EVENT_USER_UNLOCKED | usual.event.USER_UNLOCKED | 无 | +| COMMON_EVENT_USER_STOPPED | usual.event.USER_STOPPED | 无 | +| COMMON_EVENT_HWID_LOGIN | common.event.HWID_LOGIN | 无 | +| COMMON_EVENT_HWID_LOGOUT | common.event.HWID_LOGOUT | 无 | +| COMMON_EVENT_HWID_TOKEN_INVALID | common.event.HWID_TOKEN_INVALID | 无 | +| COMMON_EVENT_HWID_LOGOFF | common.event.HWID_LOGOFF | 无 | +| COMMON_EVENT_WIFI_POWER_STATE | usual.event.wifi.POWER_STATE | 无 | +| COMMON_EVENT_WIFI_SCAN_FINISHED | usual.event.wifi.SCAN_FINISHED | ohos.permission.LOCATION | +| COMMON_EVENT_WIFI_RSSI_VALUE | usual.event.wifi.RSSI_VALUE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_CONN_STATE | usual.event.wifi.CONN_STATE | 无 | +| COMMON_EVENT_WIFI_HOTSPOT_STATE | usual.event.wifi.HOTSPOT_STATE | 无 | +| COMMON_EVENT_WIFI_AP_STA_JOIN | usual.event.wifi.WIFI_HS_STA_JOIN | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_AP_STA_LEAVE | usual.event.wifi.WIFI_HS_STA_LEAVE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_P2P_CONN_STATE | usual.event.wifi.p2p.CONN_STATE_CHANGE | ohos.permission.GET_WIFI_INFO and ohos.permission.LOCATION | +| COMMON_EVENT_WIFI_P2P_STATE_CHANGED | usual.event.wifi.p2p.STATE_CHANGE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_P2P_PEERS_STATE_CHANGED | usual.event.wifi.p2p.DEVICES_CHANGE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_P2P_PEERS_DISCOVERY_STATE_CHANGED | usual.event.wifi.p2p.PEER_DISCOVERY_STATE_CHANGE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_P2P_CURRENT_DEVICE_STATE_CHANGED | usual.event.wifi.p2p.CURRENT_DEVICE_CHANGE | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_WIFI_P2P_GROUP_STATE_CHANGED | usual.event.wifi.p2p.GROUP_STATE_CHANGED | ohos.permission.GET_WIFI_INFO | +| COMMON_EVENT_BLUETOOTH_A2DPSOURCE_AVRCP_CONNECT_STATE_UPDATE | usual.event.bluetooth.a2dpsource.AVRCP_CONNECT_STATE_UPDATE | ohos.permission.USE_BLUETOOTH | +| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_SDP_RESULT | usual.event.bluetooth.remotedevice.SDP_RESULT | 无 | +| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_PAIRING_CANCEL | usual.event.bluetooth.remotedevice.PAIRING_CANCEL | 无 | +| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_REQ | usual.event.bluetooth.remotedevice.CONNECT_REQ | 无 | +| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_REPLY | usual.event.bluetooth.remotedevice.CONNECT_REPLY | 无 | +| COMMON_EVENT_BLUETOOTH_REMOTEDEVICE_CONNECT_CANCEL | usual.event.bluetooth.remotedevice.CONNECT_CANCEL | 无 | +| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_CONNECT_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.CONNECT_STATE_UPDATE | 无 | +| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AUDIO_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.AUDIO_STATE_UPDATE | 无 | +| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AG_COMMON_EVENT | usual.event.bluetooth.handsfreeunit.AG_COMMON_EVENT | 无 | +| COMMON_EVENT_BLUETOOTH_HANDSFREEUNIT_AG_CALL_STATE_UPDATE | usual.event.bluetooth.handsfreeunit.AG_CALL_STATE_UPDATE | 无 | +| COMMON_EVENT_BLUETOOTH_HOST_REQ_DISCOVERABLE | usual.event.bluetooth.host.REQ_DISCOVERABLE | 无 | +| COMMON_EVENT_NFC_ACTION_ADAPTER_STATE_CHANGED | usual.event.nfc.action.ADAPTER_STATE_CHANGED | 无 | +| COMMON_EVENT_DISCHARGING | usual.event.DISCHARGING | 无 | +| COMMON_EVENT_CHARGING | usual.event.CHARGING | 无 | +| COMMON_EVENT_DEVICE_IDLE_MODE_CHANGED | usual.event.DEVICE_IDLE_MODE_CHANGED | 无 | +| COMMON_EVENT_POWER_SAVE_MODE_CHANGED | usual.event.POWER_SAVE_MODE_CHANGED | 无 | +| COMMON_EVENT_USER_ADDED | usual.event.USER_ADDED | ohos.permission.MANAGE_USERS | +| COMMON_EVENT_USER_REMOVED | usual.event.USER_REMOVED | ohos.permission.MANAGE_USERS | +| COMMON_EVENT_LOCATION_MODE_STATE_CHANGED | usual.event.location.MODE_STATE_CHANGED | 无 | +| COMMON_EVENT_IVI_SLEEP | common.event.IVI_SLEEP | 无 | +| COMMON_EVENT_IVI_PAUSE | common.event.IVI_PAUSE | 无 | +| COMMON_EVENT_IVI_STANDBY | common.event.IVI_STANDBY | 无 | +| COMMON_EVENT_IVI_LASTMODE_SAVE | common.event.IVI_LASTMODE_SAVE | 无 | +| COMMON_EVENT_IVI_VOLTAGE_ABNORMAL | common.event.IVI_VOLTAGE_ABNORMAL | 无 | +| COMMON_EVENT_IVI_HIGH_TEMPERATURE | common.event.IVI_HIGH_TEMPERATURE | 无 | +| COMMON_EVENT_IVI_EXTREME_TEMPERATURE | common.event.IVI_EXTREME_TEMPERATURE | 无 | +| COMMON_EVENT_IVI_TEMPERATURE_ABNORMAL | common.event.IVI_TEMPERATURE_ABNORMAL | 无 | +| COMMON_EVENT_IVI_VOLTAGE_RECOVERY | common.event.IVI_VOLTAGE_RECOVERY | 无 | +| COMMON_EVENT_IVI_TEMPERATURE_RECOVERY | common.event.IVI_TEMPERATURE_RECOVERY | 无 | +| COMMON_EVENT_IVI_ACTIVE | common.event.IVI_ACTIVE | 无 | +| COMMON_EVENT_USB_DEVICE_ATTACHED | usual.event.hardware.usb.action.USB_DEVICE_ATTACHED | 无 | +| COMMON_EVENT_USB_DEVICE_DETACHED | usual.event.hardware.usb.action.USB_DEVICE_DETACHED | 无 | +| COMMON_EVENT_USB_ACCESSORY_ATTACHED | usual.event.hardware.usb.action.USB_ACCESSORY_ATTACHED | 无 | +| COMMON_EVENT_USB_ACCESSORY_DETACHED | usual.event.hardware.usb.action.USB_ACCESSORY_DETACHED | 无 | +| COMMON_EVENT_DISK_REMOVED | usual.event.data.DISK_REMOVED | ohos.permission.WRITE_USER_STORAGE 或 ohos.permission.READ_USER_STORAGE | +| COMMON_EVENT_DISK_UNMOUNTED | usual.event.data.DISK_UNMOUNTED | ohos.permission.WRITE_USER_STORAGE 或 ohos.permission.READ_USER_STORAGE | +| COMMON_EVENT_DISK_MOUNTED | usual.event.data.DISK_MOUNTED | ohos.permission.WRITE_USER_STORAGE 或 ohos.permission.READ_USER_STORAGE | +| COMMON_EVENT_DISK_BAD_REMOVAL | usual.event.data.DISK_BAD_REMOVAL | ohos.permission.WRITE_USER_STORAGE 或 ohos.permission.READ_USER_STORAGE | +| COMMON_EVENT_DISK_EJECT | usual.event.data.DISK_EJECT | ohos.permission.WRITE_USER_STORAGE 或 ohos.permission.READ_USER_STORAGE | +| COMMON_EVENT_AIRPLANE_MODE_CHANGED | usual.event.AIRPLANE_MODE | 无 | + +## 导入模块 + +```js +import CommonEvent from '@ohos.commonevent'; +``` + + + +## CommonEvent.publish + +publish(event: string, callback: AsyncCallback\): void + +发布公共事件(callback形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------- | -------- | -------------------- | ---- | ---------------------- | +| event | 只读 | string | 是 | 表示要发送的公共事件。 | +| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法。 | + +**示例:** + +```js +//发布公共事件回调 +function PublishCallBack(err) { + console.info("==========================>PublishCallBack=======================>"); + console.info("==========================>err:=======================>", err.code); +} +//发布公共事件 +CommonEvent.publish("publish_event", PublishCallBack); +``` + + + +## CommonEvent.publish + +publish(event: string, options: CommonEventPublishData, callback: AsyncCallback\): void + +发布公共事件指定发布信息(callback形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------- | -------- | ---------------------- | ---- | ---------------------- | +| event | 只读 | string | 是 | 表示要发布的公共事件。 | +| options | 只读 | [CommonEventPublishData](#commoneventpublishdata) | 是 | 表示发布公共事件的属性。 | +| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法。 | + +**示例:** + + +```js +//公共事件相关信息 +var options = { + code: 0; //公共事件的初始代码 + data: "initial data";//公共事件的初始数据 + isOrdered: true; //有序公共事件 +} +//发布公共事件回调 +function PublishCallBack(err) { + console.info("==========================>PublishCallBack=======================>"); +} +//发布公共事件 +CommonEvent.publish("publish_event", options, PublishCallBack); +``` + + + +## CommonEvent.createSubscriber + +createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback\): void + +创建订阅者(callback形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------- | -------- | ------------------------------------------------------------ | ---- | -------------------------- | +| subscribeInfo | 只读 | [CommonEventSubscribeInfo](#commoneventsubscribeinfo) | 是 | 表示订阅信息。 | +| callback | 只读 | AsyncCallback\<[CommonEventSubscriber](#commoneventsubscriber)> | 是 | 表示创建订阅者的回调方法。 | + +**示例:** + + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//订阅者信息 +var subscribeInfo = { + events: ["event"] +}; +//创建订阅者回调 +function CreateSubscriberCallBack(err, data) { + console.info("==========================>CreateSubscriberCallBack=======================>"); + subscriber = data; +} +//创建订阅者 +CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); +``` + + + +## CommonEvent.createSubscriber + +createSubscriber(subscribeInfo: CommonEventSubscribeInfo): Promise\ + +创建订阅者(Promise形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------- | -------- | ----------------------------------------------------- | ---- | -------------- | +| subscribeInfo | 只读 | [CommonEventSubscribeInfo](#commoneventsubscribeinfo) | 是 | 表示订阅信息。 | + +**返回值:** +| 类型 | 说明 | +| --------------------------------------------------------- | ---------------- | +| Promise\<[CommonEventSubscriber](#commoneventsubscriber)> | 返回订阅者对象。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//订阅者信息 +var subscribeInfo = { + events: ["event"] +}; +//创建订阅者 +CommonEvent.createSubscriber(subscribeInfo).then((data) => { + console.info("==========================>createSubscriberPromise=======================>"); + subscriber = data; +}); +``` + + + +## CommonEvent.subscribe + +subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback\): void + +订阅公共事件(callback形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | --------------------------------------------------- | ---- | -------------------------------- | +| subscriber | 只读 | [CommonEventSubscriber](#commoneventsubscriber) | 是 | 表示订阅者对象。 | +| callback | 只读 | AsyncCallback\<[CommonEventData](#commoneventdata)> | 是 | 表示接收公共事件数据的回调函数。 | + +**示例:** + +无序事件: + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//订阅者信息 +var subscribeInfo = { + events: ["event"] +}; +//订阅公共事件回调 +function SubscribeCallBack(err, data) { + console.info("==========================>SubscribeCallBack=======================>"); +} +//创建订阅者回调 +function CreateSubscriberCallBack(err, data) { + console.info("==========================>CreateSubscriberCallBack=======================>"); + subscriber = data; + //订阅公共事件 + CommonEvent.subscribe(subscriber, SubscribeCallBack); +} +//创建订阅者 +CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); +``` + + 有序事件: + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//订阅者信息 +var subscribeInfo = { + events: ["event"] +}; + +//设置有序公共事件的结果代码回调 +function SetCodeCallBack(err) { + console.info("==========================>SetCodeCallBack=======================>"); +} +//设置有序公共事件的结果数据回调 +function SetDataCallBack(err) { + console.info("==========================>SetDataCallBack=======================>"); +} +//完成本次有序公共事件处理回调 +function FinishCommonEventCallBack(err) { + console.info("==========================>FinishCommonEventCallBack=======================>"); +} +//订阅公共事件回调 +function SubscribeCallBack(err, data) { + console.info("==========================>SubscribeCallBack=======================>"); + //设置有序公共事件的结果代码 + subscriber.setCode(0, SetCodeCallBack); + //设置有序公共事件的结果数据 + subscriber.setData("publish_data_changed", SetDataCallBack); + //完成本次有序公共事件处理 + subscriber.finishCommonEvent(FinishCommonEventCallBack) +} + +//创建订阅者回调 +function CreateSubscriberCallBack(err, data) { + console.info("==========================>CreateSubscriberCallBack=======================>"); + subscriber = data; + //订阅公共事件 + CommonEvent.subscribe(subscriber, SubscribeCallBack); +} + +//创建订阅者 +CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); +``` + + + +## CommonEvent.unsubscribe + +unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback\): void + +取消订阅公共事件(callback形式)。 + +**参数:** + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | --------------------- | ---- | ------------------------ | +| subscriber | 只读 | CommonEventSubscriber | 是 | 表示订阅者对象。 | +| callback | 只读 | AsyncCallback\ | 是 | 表示取消订阅的回调方法。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//订阅者信息 +var subscribeInfo = { + events: ["event"] +}; +//订阅公共事件回调 +function SubscribeCallBack(err, data) { + console.info("==========================>SubscribeCallBack=======================>"); +} +//创建订阅者回调 +function CreateSubscriberCallBack(err, data) { + console.info("==========================>CreateSubscriberCallBack=======================>"); + subscriber = data; + //订阅公共事件 + CommonEvent.subscribe(subscriber, SubscribeCallBack); +} +//取消订阅公共事件回调 +function UnsubscribeCallBack(err) { + console.info("==========================>UnsubscribeCallBack=======================>"); +} +//创建订阅者 +CommonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); +//取消订阅公共事件 +CommonEvent.unsubscribe(subscriber, UnsubscribeCallBack); +``` + +## CommonEventPublishData + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| --------------------- | -------- | -------------------- | ---- | ---------------------------- | +| bundleName | 只读 | string | 否 | 表示包名称 | +| code | 只读 | number | 否 | 表示公共事件的结果代码 | +| data | 只读 | string | 否 | 表示公共事件的自定义结果数据 | +| subscriberPermissions | 只读 | Array\ | 否 | 表示订阅者的权限 | +| isOrdered | 只读 | boolean | 否 | 表示是否是有序事件 | +| parameters | 只读 | {[key: string]: any} | 否 | 表示公共事件的附加信息 | + +## CommonEventSubscribeInfo + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------------- | -------- | -------------- | ---- | ------------------------------------------------------------ | +| events | 只读 | Array\ | 是 | 表示要发送的公共事件 | +| publisherPermission | 只读 | string | 否 | 表示发布者的权限 | +| publisherDeviceId | 只读 | string | 否 | 表示设备ID,该值必须是同一ohos网络上的现有设备ID | +| userId | 只读 | number | 否 | 表示用户ID。此参数是可选的,默认值当前用户的ID。如果指定了此参数,则该值必须是系统中现有的用户ID。 | +| priority | 只读 | number | 否 | 表示订阅者的优先级。值的范围是-100到1000 | + +## CommonEventData + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | -------------------- | ---- | ------------------------------------------------------ | +| event | 只读 | string | 是 | 表示当前接收的公共事件名称 | +| bundleName | 只读 | string | 否 | 表示包名称 | +| code | 只读 | number | 否 | 表示公共事件的结果代码,用于传递int类型的数据 | +| data | 只读 | string | 否 | 表示公共事件的自定义结果数据,用于传递string类型的数据 | +| parameters | 只读 | {[key: string]: any} | 否 | 表示公共事件的附加信息 | + +## CommonEventSubscriber + +### getCode + +getCode(callback: AsyncCallback\): void + +获取公共事件的结果代码(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ------------------ | +| callback | AsyncCallback\ | 是 | 公共事件的结果代码 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function getCodeCallback(err, data) { + console.info("==========================>getCodeCallback=======================>"); + console.info("==========================>err:=======================>", err.code); + console.info("==========================>code:=======================>", data); +} +subscriber.getCode(getCodeCallback); +``` + +### getCode + +getCode(): Promise\ + +获取公共事件的结果代码(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ---------------- | -------------------- | +| Promise\ | 公共事件的结果代码。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.getCode().then((data) => { + console.info("==========================>getCodePromise=======================>"); + console.info("==========================>code:=======================>", data); +}); +``` + +### setCode + +setCode(code: number, callback: AsyncCallback\): void + +设置公共事件的结果代码(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ---------------------- | +| code | number | 是 | 公共事件的结果代码。 | +| callback | AsyncCallback\ | 是 | 表示被指定的回调方法。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function setCodeCallback(err) { + console.info("==========================>setCodeCallback=======================>"); + console.info("==========================>err:=======================>", err.code); +} +subscriber.setCode(1, setCodeCallback); +``` + +### setCode + +setCode(code: number): Promise\ + +设置公共事件的结果代码(Promise形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| ------ | ------ | ---- | ------------------ | +| code | number | 是 | 公共事件的结果代码 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.setCode(1).then(() => { + console.info("==========================>setCodePromise=======================>"); +}); +``` + +### getData + +getData(callback: AsyncCallback\): void + +获取公共事件的结果数据(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 公共事件的结果数据。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function getDataCallback(err, data) { + console.info("==========================>getDataCallback=======================>"); + console.info("==========================>err:=======================>", err.code); + console.info("==========================>data:=======================>", data); +} +subscriber.getData(getDataCallback); +``` + +### getData + +getData(): Promise\ + +获取公共事件的结果数据(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ---------------- | ------------------ | +| Promise\ | 公共事件的结果数据 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.getData().then((data) => { + console.info("==========================>getDataPromise=======================>"); + console.info("==========================>data:=======================>", data); +}); +``` + +### setData + +setData(data: string, callback: AsyncCallback\): void + +设置公共事件的结果数据(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | -------------------- | +| data | string | 是 | 公共事件的结果数据 | +| callback | AsyncCallback\ | 是 | 表示被指定的回调方法 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function setDataCallback(err) { + console.info("==========================>setDataCallback=======================>"); + console.info("==========================>err:=======================>", err.code); +} +subscriber.setData("publish_data_changed", setDataCallback); +``` + +### setData + +setData(data: string): Promise\ + +设置公共事件的结果数据(Promise形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| ------ | ------ | ---- | -------------------- | +| data | string | 是 | 公共事件的结果数据。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.setData("publish_data_changed").then(() => { + console.info("==========================>setDataPromise=======================>"); +}); +``` + +### setCodeAndData + +setCodeAndData(code: number, data: string, callback:AsyncCallback\): void + +设置公共事件的结果代码和结果数据(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | ---------------------- | +| code | number | 是 | 公共事件的结果代码。 | +| data | string | 是 | 公共事件的结果数据。 | +| callback | AsyncCallback\ | 是 | 表示被指定的回调方法。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function setCodeDataCallback(err) { + console.info("==========================>setCodeDataCallback=======================>"); + console.info("==========================>err:=======================>", err.code); +} +subscriber.setCodeAndData(1, "publish_data_changed", setCodeDataCallback); +``` + +### setCodeAndData + +setCodeAndData(code: number, data: string): Promise\ + +设置公共事件的结果代码和结果数据(Promise形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| ------ | ------ | ---- | -------------------- | +| code | number | 是 | 公共事件的结果代码。 | +| data | string | 是 | 公共事件的结果数据。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.setCodeAndData(1, "publish_data_changed").then(() => { + console.info("==========================>setCodeAndData=======================>"); +}); +``` + +### isOrderedCommonEvent + +isOrderedCommonEvent(callback: AsyncCallback\): void + +查询当前公共事件的是否为有序公共事件(callback形式)。 + +返回true代表是有序公共事件,false代表不是有序公共事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | ----------------------- | ---- | ---------------------------------- | +| callback | AsyncCallback\ | 是 | 当前公共事件的是否为有序公共事件。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function isOrderedCallback(err, data) { + console.info("==========================>isOrderedCallback=======================>"); + console.info("==========================>err:=======================>", err.code); + console.info("==========================>isOrdered:=======================>", data); +} +subscriber.isOrderedCommonEvent(isOrderedCallback); +``` + +### isOrderedCommonEvent + +isOrderedCommonEvent(): Promise\ + +查询当前公共事件的是否为有序公共事件(Promise形式)。 + +返回true代表是有序公共事件,false代表不是有序公共事件。 + +**返回值:** + +| 类型 | 说明 | +| ----------------- | -------------------------------- | +| Promise\ | 当前公共事件的是否为有序公共事件 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.isOrderedCommonEvent().then((data) => { + console.info("==========================>isOrdered:=======================>", data); +}); +``` + +### abortCommonEvent + +abortCommonEvent(callback: AsyncCallback\): void + +取消当前的公共事件,仅对有序公共事件有效,取消后,公共事件不再向下一个订阅者传递(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 取消当前的公共事件。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function abortCallback(err) { + console.info("==========================>abortCallback=======================>"); + console.info("==========================>err:=======================>", err.code); +} +subscriber.abortCommonEvent(abortCallback); +``` + +### abortCommonEvent + +abortCommonEvent(): Promise\ + +取消当前的公共事件,仅对有序公共事件有效,取消后,公共事件不再向下一个订阅者传递(Promise形式)。 + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.abortCommonEvent().then(() => { + console.info("==========================>abortCommonEvent:=======================>"); +}); +``` + +### clearAbortCommonEvent + +clearAbortCommonEvent(callback: AsyncCallback\): void + +清除当前公共事件的取消状态,仅对有序公共事件有效(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 表示被指定的回调方法 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function clearAbortCallback(err) { + console.info("==========================>clearAbortCallback=======================>"); + console.info("==========================>err:=======================>", err.code); +} +subscriber.clearAbortCommonEvent(clearAbortCallback); +``` + +### clearAbortCommonEvent + +clearAbortCommonEvent(): Promise\ + +清除当前公共事件的取消状态,仅对有序公共事件有效(Promise形式)。 + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.clearAbortCommonEvent().then(() => { + console.info("==========================>clearAbortCommonEvent:=======================>"); +}); +``` + +### getAbortCommonEvent + +getAbortCommonEvent(callback: AsyncCallback\): void + +获取当前有序公共事件是否取消的状态(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | ----------------------- | ---- | ---------------------------------- | +| callback | AsyncCallback\ | 是 | 表示当前有序公共事件是否取消的状态 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function getAbortCallback(err, data) { + console.info("==========================>getAbortCallback=======================>"); + console.info("==========================>err:=======================>", err.code); + console.info("==========================>abort:=======================>", data); +} +subscriber.getAbortCommonEvent(getAbortCallback); +``` + +### getAbortCommonEvent + +getAbortCommonEvent(): Promise\ + +获取当前有序公共事件是否取消的状态(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ----------------- | ---------------------------------- | +| Promise\ | 表示当前有序公共事件是否取消的状态 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.getAbortCommonEvent().then((data) => { + console.info("==========================>getAbortCommonEvent:=======================>"); + console.info("==========================>abort:=======================>", data); +}); +``` + +### getSubscribeInfo + +getSubscribeInfo(callback: AsyncCallback\): void + +获取订阅者的订阅信息(callback形式)。 + +**参数:** + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | ------------------------------------------------------------ | ---- | ---------------------- | +| callback | AsyncCallback\<[CommonEventSubscribeInfo](#commoneventsubscribeinfo)> | 是 | 表示订阅者的订阅信息。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +//设置有序公共事件的结果数据回调 +function getSubscribeInfoCallback(err, data) { + console.info("==========================>getSubscribeInfoCallback=======================>"); + console.info("==========================>err:=======================>", err.code); + console.info("==========================>priority:=======================>", data.priority); +} +subscriber.getSubscribeInfo(getSubscribeInfoCallback); +``` + +### getSubscribeInfo + +getSubscribeInfo(): Promise\ + +获取订阅者的订阅信息(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------------------------------------------ | ---------------------- | +| Promise\<[CommonEventSubscribeInfo](#commoneventsubscribeinfo)> | 表示订阅者的订阅信息。 | + +**示例:** + +```js +var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作 +subscriber.getSubscribeInfo().then((data) => { + console.info("==========================>getSubscribeInfo:=======================>"); + console.info("==========================>priority:=======================>", data.priority); +}); +``` \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" similarity index 72% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" index ce1ebc51ad00e1277219eebb5976ee5d9ecae43b..bcba138a20486b2d09d5dcf673d142c6fe16dced 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/07.Notification\346\250\241\345\235\227.md" @@ -1,6 +1,6 @@ --- title: Notification模块 -permalink: /pages/000b000006 +permalink: /pages/010c010107 navbar: true sidebar: true prev: true @@ -9,106 +9,17 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- -# Notification模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -| Notification.publish(request: NotificationRequest, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.publish(request: NotificationRequest) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancel(id: number, label: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancel(id:number, label?:string) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancel(id: number, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancelAll(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancelAll() | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlot(slot: NotificationSlot, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlot(slot: NotificationSlot) | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlot(type: SlotType, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlot(type: SlotType) | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlots(slots: Array\, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.addSlots(slots: Array\) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlot(slotType: SlotType, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlot(slotType: SlotType) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlots(callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlots() | 支持 | 支持 | 支持 | 支持 | -| Notification.removeSlot(slotType: SlotType, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeSlot(slotType: SlotType) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeAllSlots(callback: AsyncCallback\): void | 支持 | 支持 | 支持 | 支持 | -| Notification.removeAllSlots(): Promise\ | 支持 | 支持 | 支持 | 支持 | -| Notification.subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.subscribe(subscriber: NotificationSubscriber, info?: NotificationSubscribeInfo) | 支持 | 支持 | 支持 | 支持 | -| Notification.unsubscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.unsubscribe(subscriber: NotificationSubscriber) | 支持 | 支持 | 支持 | 支持 | -| Notification.enableNotification(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.enableNotification(bundle: BundleOption, enable: boolean) | 支持 | 支持 | 支持 | 支持 | -| Notification.isNotificationEnabled(bundle: BundleOption, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.isNotificationEnabled(bundle: BundleOption) | 支持 | 支持 | 支持 | 支持 | -| Notification.isNotificationEnabled(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.isNotificationEnabled() | 支持 | 支持 | 支持 | 支持 | -| Notification.displayBadge(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.displayBadge(bundle: BundleOption, enable: boolean) | 支持 | 支持 | 支持 | 支持 | -| Notification.isBadgeDisplayed(bundle: BundleOption, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.isBadgeDisplayed(bundle: BundleOption) | 支持 | 支持 | 支持 | 支持 | -| Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlotsByBundle(bundle: BundleOption, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlotsByBundle(bundle: BundleOption) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlotNumByBundle(bundle: BundleOption, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.getSlotNumByBundle(bundle: BundleOption) | 支持 | 支持 | 支持 | 支持 | -| Notification.remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.remove(bundle: BundleOption, notificationKey: NotificationKey) | 支持 | 支持 | 支持 | 支持 | -| Notification.remove(hashCode: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.remove(hashCode: string) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeAll(bundle: BundleOption, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeAll(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeAll(bundle?: BundleOption) | 支持 | 支持 | 支持 | 支持 | -| Notification.getAllActiveNotifications(callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | -| Notification.getAllActiveNotifications() | 支持 | 支持 | 支持 | 支持 | -| Notification.getActiveNotificationCount(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.getActiveNotificationCount() | 支持 | 支持 | 支持 | 支持 | -| Notification.getActiveNotifications(callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | -| Notification.getActiveNotifications() | 支持 | 支持 | 支持 | 支持 | -| Notification.cancelGroup(groupName: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.cancelGroup(groupName: string) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeGroupByBundle(bundle: BundleOption, groupName: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.removeGroupByBundle(bundle: BundleOption, groupName: string) | 支持 | 支持 | 支持 | 支持 | -| Notification.setDoNotDisturbDate(date: DoNotDisturbDate, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.setDoNotDisturbDate(date: DoNotDisturbDate) | 支持 | 支持 | 支持 | 支持 | -| Notification.getDoNotDisturbDate(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.getDoNotDisturbDate() | 支持 | 支持 | 支持 | 支持 | -| Notification.supportDoNotDisturbMode(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| Notification.supportDoNotDisturbMode() | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getWantAgent(info: WantAgentInfo, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getWantAgent(info: WantAgentInfo): Promise\ | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getBundleName(agent: WantAgent, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getBundleName(agent: WantAgent): Promise\ | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getUid(agent: WantAgent, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getUid(agent: WantAgent): Promise\ | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getWant(agent: WantAgent, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.getWant(agent: WantAgent): Promise\ | 支持 | 支持 | 支持 | 支持 | -| WantAgent.cancel(agent: WantAgent, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.cancel(agent: WantAgent): Promise\ | 支持 | 支持 | 支持 | 支持 | -| WantAgent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | -| WantAgent.equal(agent: WantAgent, otherAgent: WantAgent): Promise\ | 支持 | 支持 | 支持 | 支持 | - -#### 权限列表 - -无 - -#### 通知接口 - -#### 导入模块 - -```js -import notify from '@ohos.notification'; -``` - -#### Notification.publish(request: NotificationRequest, callback: AsyncCallback\) +# Notification模块 + +## 导入模块 + +```js +import Notification from '@ohos.notification'; +``` + +## Notification.publish(request: NotificationRequest, callback: AsyncCallback\) - 接口说明 @@ -124,45 +35,47 @@ import notify from '@ohos.notification'; - NotificationRequest类型说明 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------------- | -------- | --------------------------------- | ---- | -------------------------- | -| content | 读、写 | NotificationContent | 是 | 通知内容 | -| id | 读、写 | number | 否 | 通知ID | -| slotType | 读、写 | SlotType | 否 | 通道类型 | -| isOngoing | 读、写 | boolean | 否 | 是否进行时通知 | -| isUnremovable | 读、写 | boolean | 否 | 是否可移除 | -| deliveryTime | 读、写 | number | 否 | 通知发送时间 | -| tapDismissed | 读、写 | boolean | 否 | 通知是否自动清除 | -| autoDeletedTime | 读、写 | number | 否 | 自动清除的时间 | -| wantAgent | 读、写 | WantAgent | 否 | 点击跳转的WantAgent | -| extraInfo | 读、写 | {[key: string]: any} | 否 | 扩展参数 | -| color | 读、写 | number | 否 | 通知背景颜色 | -| colorEnabled | 读、写 | boolean | 否 | 通知背景颜色是否使能 | -| isAlertOnce | 读、写 | boolean | 否 | 设置是否仅有一次此通知警报 | -| isStopwatch | 读、写 | boolean | 否 | 是否显示已用时间 | -| isCountDown | 读、写 | boolean | 否 | 是否显示倒计时时间 | -| isFloatingIcon | 读、写 | boolean | 否 | 是否显示状态栏图标 | -| label | 读、写 | string | 否 | 通知标签 | -| badgeIconStyle | 读、写 | number | 否 | 通知角标类型 | -| showDeliveryTime | 读、写 | boolean | 否 | 是否显示分发时间 | -| actionButtons | 读、写 | Array\ | 否 | 通知按钮,最多两个按钮 | -| smallIcon | 读、写 | PixelMap | 否 | 通知小图标 | -| largeIcon | 读、写 | PixelMap | 否 | 通知大图标 | -| creatorBundleName | 只读 | string | 否 | 创建通知的包名 | -| creatorUid | 只读 | number | 否 | 创建通知的UID | -| creatorPid | 只读 | number | 否 | 创建通知的PID | -| hashCode | 只读 | string | 否 | 通知唯一标识 | -| classification | 读、写 | string | 否 | 通知分类 | -| groupName | 读、写 | string | 否 | 组通知名称 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| --------------------- | -------- | --------------------------------------------- | ---- | -------------------------- | +| content | 读、写 | NotificationContent | 是 | 通知内容 | +| id | 读、写 | number | 否 | 通知ID | +| slotType | 读、写 | SlotType | 否 | 通道类型 | +| isOngoing | 读、写 | boolean | 否 | 是否进行时通知 | +| isUnremovable | 读、写 | boolean | 否 | 是否可移除 | +| deliveryTime | 读、写 | number | 否 | 通知发送时间 | +| tapDismissed | 读、写 | boolean | 否 | 通知是否自动清除 | +| autoDeletedTime | 读、写 | number | 否 | 自动清除的时间 | +| wantAgent | 读、写 | WantAgent | 否 | 点击跳转的WantAgent | +| extraInfo | 读、写 | {[key: string]: any} | 否 | 扩展参数 | +| color | 读、写 | number | 否 | 通知背景颜色 | +| colorEnabled | 读、写 | boolean | 否 | 通知背景颜色是否使能 | +| isAlertOnce | 读、写 | boolean | 否 | 设置是否仅有一次此通知警报 | +| isStopwatch | 读、写 | boolean | 否 | 是否显示已用时间 | +| isCountDown | 读、写 | boolean | 否 | 是否显示倒计时时间 | +| isFloatingIcon | 读、写 | boolean | 否 | 是否显示状态栏图标 | +| label | 读、写 | string | 否 | 通知标签 | +| badgeIconStyle | 读、写 | number | 否 | 通知角标类型 | +| showDeliveryTime | 读、写 | boolean | 否 | 是否显示分发时间 | +| actionButtons | 读、写 | Array\ | 否 | 通知按钮,最多两个按钮 | +| smallIcon | 读、写 | PixelMap | 否 | 通知小图标 | +| largeIcon | 读、写 | PixelMap | 否 | 通知大图标 | +| creatorBundleName | 只读 | string | 否 | 创建通知的包名 | +| creatorUid | 只读 | number | 否 | 创建通知的UID | +| creatorPid | 只读 | number | 否 | 创建通知的PID | +| hashCode | 只读 | string | 否 | 通知唯一标识 | +| classification | 读、写 | string | 否 | 通知分类 | +| groupName | 读、写 | string | 否 | 组通知名称 | +| template8+ | 读、写 | [NotificationTemplate](#notificationtemplate) | 否 | 通知模板 | NotificationContent类型说明 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ---------------------------- | ---- | -------------- | -| contentType | 读、写 | ContentType | 是 | 通知内容类型 | -| normal | 读、写 | NotificationBasicContent | 否 | 通知基本内容 | -| longText | 读、写 | NotificationLongTextContent | 否 | 通知长文本内容 | -| multiLine | 读、写 | NotificationMultiLineContent | 否 | 通知多行内容 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | ---------------------------- | ---- | ------------------ | +| contentType | 读、写 | ContentType | 是 | 通知内容类型 | +| normal | 读、写 | NotificationBasicContent | 否 | 基本类型通知内容 | +| longText | 读、写 | NotificationLongTextContent | 否 | 长文本类型通知内容 | +| multiLine | 读、写 | NotificationMultiLineContent | 否 | 多行类型通知内容 | +| picture | 读、写 | NotificationPictureContent | 否 | 图片类型通知内容 | - ContentType类型说明 @@ -215,6 +128,15 @@ NotificationContent类型说明 | expandedTitle | 读、写 | string | 是 | 通知展开时的标题 | | picture | 读、写 | image.PixelMap | 是 | 通知的图片内容 | +- SlotType类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------------------- | -------- | -------- | ---- | -------- | +| SOCIAL_COMMUNICATION | 只读 | SlotType | 否 | 社交类型 | +| SERVICE_INFORMATION | 只读 | SlotType | 否 | 服务类型 | +| CONTENT_INFORMATION | 只读 | SlotType | 否 | 内容类型 | +| OTHER_TYPES | 只读 | SlotType | 否 | 其他类型 | + - NotificationActionButton类型说明 | 名称 | 读写属性 | 类型 | 必填 | 描述 | @@ -260,7 +182,7 @@ Notification.publish(notificationRequest, publishCallback) -#### Notification.publish(request: NotificationRequest) +## Notification.publish(request: NotificationRequest) - 接口说明 @@ -293,7 +215,7 @@ Notification.publish(notificationRequest).then((void) => { -#### Notification.cancel(id: number, label: string, callback: AsyncCallback\) +## Notification.cancel(id: number, label: string, callback: AsyncCallback\) - 接口说明 @@ -304,7 +226,7 @@ Notification.publish(notificationRequest).then((void) => { | 名称 | 读写属性 | 类型 | 必填 | 描述 | | -------- | -------- | --------------------- | ---- | -------------------- | | id | 只读 | number | 是 | 通知ID | -| lable | 只读 | string | 是 | 通知标签 | +| label | 只读 | string | 是 | 通知标签 | | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - 返回值 @@ -323,7 +245,7 @@ Notification.cancel(0, "label", cancelCallback) -#### Notification.cancel(id:number, label?:string) +## Notification.cancel(id:number, label?:string) - 接口说明 @@ -334,7 +256,7 @@ Notification.cancel(0, "label", cancelCallback) | 名称 | 读写属性 | 类型 | 必填 | 描述 | | ----- | -------- | ------ | ---- | -------- | | id | 只读 | number | 是 | 通知ID | -| lable | 只读 | string | 是 | 通知标签 | +| label | 只读 | string | 否 | 通知标签 | - 返回值 @@ -350,7 +272,7 @@ Notification.cancel(0).then((void) => { -#### Notification.cancel(id: number, callback: AsyncCallback\) +## Notification.cancel(id: number, callback: AsyncCallback\) - 接口说明 @@ -379,7 +301,7 @@ Notification.cancel(0, cancelCallback) -#### Notification.cancelAll(callback: AsyncCallback\) +## Notification.cancelAll(callback: AsyncCallback\) - 接口说明 @@ -407,11 +329,11 @@ Notification.cancelAll(cancelCallback) -#### Notification.cancelAll() +## Notification.cancelAll() - 接口说明 - 取消所有已发布的通知(callback形式) + 取消所有已发布的通知(Promise形式) - 参数描述 @@ -419,7 +341,7 @@ Notification.cancelAll(cancelCallback) - 返回值 - void + Promise\ - 示例 @@ -431,7 +353,7 @@ Notification.cancelAll().then((void) => { -#### Notification.addSlot(slot: NotificationSlot, callback: AsyncCallback\) +## Notification.addSlot(slot: NotificationSlot, callback: AsyncCallback\) - 接口说明 @@ -439,10 +361,10 @@ Notification.cancelAll().then((void) => { - addSlot参数描述 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | --------------------- | ---- | ------------------------------------------ | -| slot | 只读 | NotificationSlot | 是 | 要创建的通知通道,由{NotificationSlot}设置 | -| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------- | -------- | --------------------- | ---- | -------------------- | +| slot | 只读 | NotificationSlot | 是 | 要创建的通知通道对象 | +| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - NotificationSlot类型说明 @@ -473,14 +395,14 @@ function addSlotCallBack(err) { } //通知slot对象 var notificationSlot = { - type:SOCIAL_COMMUNICATION + type: Notification.SlotType.SOCIAL_COMMUNICATION } Notification.addSlot(notificationSlot, addSlotCallBack) ``` -#### Notification.addSlot(slot: NotificationSlot) +## Notification.addSlot(slot: NotificationSlot) - 接口说明 @@ -488,9 +410,9 @@ Notification.addSlot(notificationSlot, addSlotCallBack) - addSlot参数描述 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---- | -------- | ---------------- | ---- | ------------------------------------------ | -| slot | 只读 | NotificationSlot | 是 | 要创建的通知通道,由{NotificationSlot}设置 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---- | -------- | ---------------- | ---- | -------------------- | +| slot | 只读 | NotificationSlot | 是 | 要创建的通知通道对象 | - 返回值 @@ -500,10 +422,9 @@ Notification.addSlot(notificationSlot, addSlotCallBack) ```js //通知slot对象 - var notificationSlot = { - notificationId: 0, - type:SOCIAL_COMMUNICATION - } +var notificationSlot = { + type: Notification.SlotType.SOCIAL_COMMUNICATION +} Notification.addSlot(notificationSlot).then((void) => { console.info("==========================>addSlotCallback=======================>"); }); @@ -511,7 +432,7 @@ Notification.addSlot(notificationSlot).then((void) => { -#### Notification.addSlot(type: SlotType, callback: AsyncCallback\) +## Notification.addSlot(type: SlotType, callback: AsyncCallback\) - 接口说明 @@ -524,15 +445,6 @@ Notification.addSlot(notificationSlot).then((void) => { | type | 只读 | SlotType | 是 | 要创建的通知通道的类型 | | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | -- SlotType类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------------------- | -------- | -------- | ---- | -------- | -| SOCIAL_COMMUNICATION | 只读 | SlotType | 否 | 社交类型 | -| SERVICE_INFORMATION | 只读 | SlotType | 否 | 服务类型 | -| CONTENT_INFORMATION | 只读 | SlotType | 否 | 内容类型 | -| OTHER_TYPES | 只读 | SlotType | 否 | 其他类型 | - - 返回值 void @@ -544,12 +456,12 @@ Notification.addSlot(notificationSlot).then((void) => { function addSlotCallBack(err) { console.info("==========================>addSlotCallBack=======================>"); } -Notification.addSlot(SOCIAL_COMMUNICATION, addSlotCallBack) +Notification.addSlot(Notification.SlotType.SOCIAL_COMMUNICATION, addSlotCallBack) ``` -#### Notification.addSlot(type: SlotType) +## Notification.addSlot(type: SlotType) - 接口说明 @@ -568,14 +480,14 @@ Notification.addSlot(SOCIAL_COMMUNICATION, addSlotCallBack) - 示例 ```js -Notification.addSlot(SOCIAL_COMMUNICATION).then((void) => { +Notification.addSlot(Notification.SlotType.SOCIAL_COMMUNICATION).then((void) => { console.info("==========================>addSlotCallback=======================>"); }); ``` -#### Notification.addSlots(slots: Array\, callback: AsyncCallback\) +## Notification.addSlots(slots: Array\, callback: AsyncCallback\) - 接口说明 @@ -583,10 +495,10 @@ Notification.addSlot(SOCIAL_COMMUNICATION).then((void) => { - addSlots数描述 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | ------------------------- | ---- | ------------------------------------------ | -| slots | 只读 | Array\ | 是 | 要创建的通知通道,由{NotificationSlot}设置 | -| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------- | -------- | ------------------------- | ---- | ------------------------ | +| slots | 只读 | Array\ | 是 | 要创建的通知通道对象数组 | +| callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - 返回值 @@ -601,8 +513,7 @@ function addSlotsCallBack(err) { } //通知slot对象 var notificationSlot = { - notificationId: 0, - type:SOCIAL_COMMUNICATION + type: Notification.SlotType.SOCIAL_COMMUNICATION } //通知slot array 对象 var notificationSlotArray = new Array(); @@ -613,7 +524,7 @@ Notification.addSlots(notificationSlotArray, addSlotsCallBack) -#### Notification.addSlots(slots: Array\) +## Notification.addSlots(slots: Array\) - 接口说明 @@ -621,9 +532,9 @@ Notification.addSlots(notificationSlotArray, addSlotsCallBack) - addSlots数描述 -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----- | -------- | ------------------------- | ---- | ------------------------------------------ | -| slots | 只读 | Array\ | 是 | 要创建的通知通道,由{NotificationSlot}设置 | +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----- | -------- | ------------------------- | ---- | ------------------------ | +| slots | 只读 | Array\ | 是 | 要创建的通知通道对象数组 | - 返回值 @@ -634,8 +545,7 @@ Notification.addSlots(notificationSlotArray, addSlotsCallBack) ```js //通知slot对象 var notificationSlot = { - notificationId: 0, - type:SOCIAL_COMMUNICATION + type: Notification.SlotType.SOCIAL_COMMUNICATION } //通知slot array 对象 var notificationSlotArray = new Array(); @@ -648,7 +558,7 @@ Notification.addSlots(notificationSlotArray).then((void) => { -#### Notification.getSlot(slotType: SlotType, callback: AsyncCallback\) +## Notification.getSlot(slotType: SlotType, callback: AsyncCallback\) - 接口说明 @@ -672,13 +582,13 @@ Notification.addSlots(notificationSlotArray).then((void) => { function getSlotCallback(err,data) { console.info("==========================>getSlotCallback=======================>"); } -var slotType = SOCIAL_COMMUNICATION; +var slotType = Notification.SlotType.SOCIAL_COMMUNICATION; Notification.getSlot(slotType, getSlotCallback) ``` -#### Notification.getSlot(slotType) +## Notification.getSlot(slotType) - 接口说明 @@ -697,14 +607,15 @@ Notification.getSlot(slotType, getSlotCallback) - 示例 ```js -var slotType = SOCIAL_COMMUNICATION; +var slotType = Notification.SlotType.SOCIAL_COMMUNICATION; Notification.getSlot(slotType).then((data) => { console.info("==========================>getSlotCallback=======================>"); +}); ``` -#### Notification.getSlots(callback: AsyncCallback>) +## Notification.getSlots(callback: AsyncCallback>) - 接口说明 @@ -732,7 +643,7 @@ Notification.getSlots(getSlotsCallback) -#### Notification.getSlots() +## Notification.getSlots() - 接口说明 @@ -751,11 +662,12 @@ Notification.getSlots(getSlotsCallback) ```js Notification.getSlots().then((data) => { console.info("==========================>getSlotsCallback=======================>"); +}); ``` -#### Notification.removeSlot(slotType: SlotType, callback: AsyncCallback\) +## Notification.removeSlot(slotType: SlotType, callback: AsyncCallback\) - 接口说明 @@ -779,13 +691,13 @@ Notification.getSlots().then((data) => { function removeSlotCallback(err) { console.info("==========================>removeSlotCallback=======================>"); } -var slotType = SOCIAL_COMMUNICATION; +var slotType = Notification.SlotType.SOCIAL_COMMUNICATION; Notification.removeSlot(slotType,removeSlotCallback) ``` -#### Notification.removeSlot(slotType: SlotType) +## Notification.removeSlot(slotType: SlotType) - 接口说明 @@ -804,14 +716,15 @@ Notification.removeSlot(slotType,removeSlotCallback) - 示例 ```js -var slotType = SOCIAL_COMMUNICATION; +var slotType = Notification.SlotType.SOCIAL_COMMUNICATION; Notification.removeSlot(slotType).then((void) => { console.info("==========================>removeSlotCallback=======================>"); +}); ``` -#### Notification.removeAllSlots(callback: AsyncCallback\) +## Notification.removeAllSlots(callback: AsyncCallback\) - 接口说明 @@ -838,7 +751,7 @@ Notification.removeAllSlots(removeAllCallBack) -#### Notification.removeAllSlots() +## Notification.removeAllSlots() - 接口说明 @@ -862,7 +775,7 @@ Notification.removeAllSlots().then((void) => { -#### Notification.subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback\) +## Notification.subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback\) - 接口说明 @@ -886,7 +799,6 @@ Notification.removeAllSlots().then((void) => { | onConnect?:() | 读、写 | function | 否 | 注册订阅回调函数 | | onDisconnect?:() | 读、写 | function | 否 | 取消订阅回调函数 | | onDestroy?:() | 读、写 | function | 否 | 服务失联回调函数 | -| onDisturbModeChange?:(mode: notification.DoNotDisturbMode) | 读、写 | function | 否 | 免打扰模式变更回调函数 | | onDoNotDisturbDateChange?:(mode: notification.DoNotDisturbDate) | 读、写 | function | 否 | 免打扰时间选项变更回调函数 | - SubscribeCallbackData 类型说明 @@ -914,15 +826,6 @@ Notification.removeAllSlots().then((void) => { | hashCode | 只读 | string | 是 | 通知唯一标识 | | ranking | 只读 | number | 是 | 通知排序序号 | -- DoNotDisturbMode类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------------- | -------- | ---------------- | ---- | ---------------------------- | -| ALLOW_ALL | 只读 | DoNotDisturbMode | 否 | 全部绕过免打扰 | -| ALLOW_PRIORITY | 只读 | DoNotDisturbMode | 否 | 指定优先级通知可以绕过免打扰 | -| ALLOW_NONE | 只读 | DoNotDisturbMode | 否 | 全部免打扰 | -| ALLOW_ALARMS | 只读 | DoNotDisturbMode | 否 | 闹钟类型通知可以绕过免打扰 | - - DoNotDisturbType类型说明 @@ -963,17 +866,17 @@ function onConsumeCallback(err, data) { console.info("==========================>onConsumeCallback=======================>"); } var subscriber = { - onConsume:onConsumeCallback; + onConsume: onConsumeCallback } var info = { - bundleNames:["bundleName1","bundleName2"] + bundleNames: ["bundleName1","bundleName2"] } Notification.subscribe(subscriber, info, subscribeCallback); ``` -#### Notification.subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) +## Notification.subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) - 接口说明 @@ -1000,14 +903,14 @@ function onConsumeCallback(err, data) { console.info("==========================>onConsumeCallback=======================>"); } var subscriber = { - onConsume:onConsumeCallback; + onConsume: onConsumeCallback } Notification.subscribe(subscriber, subscribeCallback); ``` -#### Notification.subscribe(subscriber: NotificationSubscriber, info?: NotificationSubscribeInfo) +## Notification.subscribe(subscriber: NotificationSubscriber, info?: NotificationSubscribeInfo) - 接口说明 @@ -1031,7 +934,7 @@ function onConsumeCallback(err, data) { console.info("==========================>onConsumeCallback=======================>"); } var subscriber = { - onConsume:onConsumeCallback; + onConsume: onConsumeCallback }; Notification.subscribe(subscriber).then((void) => { console.info("==========================>subscribeCallback=======================>"); @@ -1040,7 +943,7 @@ Notification.subscribe(subscriber).then((void) => { -#### Notification.unsubscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) +## Notification.unsubscribe(subscriber: NotificationSubscriber, callback: AsyncCallback\) - 接口说明 @@ -1067,14 +970,14 @@ function onConsumeCallback(err, data) { console.info("==========================>onConsumeCallback=======================>"); } var subscriber = { - onConsume:onConsumeCallback; + onConsume: onConsumeCallback } Notification.unsubscribe(subscriber, unsubscribeCallback); ``` -#### Notification.unsubscribe(subscriber: NotificationSubscriber) +## Notification.unsubscribe(subscriber: NotificationSubscriber) - 接口说明 @@ -1097,7 +1000,7 @@ function onConsumeCallback(err, data) { console.info("==========================>onConsumeCallback=======================>"); } var subscriber = { - onConsume:onConsumeCallback; + onConsume: onConsumeCallback }; Notification.unsubscribe(subscriber).then((void) => { console.info("==========================>unsubscribeCallback=======================>"); @@ -1106,7 +1009,7 @@ Notification.unsubscribe(subscriber).then((void) => { -#### Notification.enableNotification(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) +## Notification.enableNotification(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) - 接口说明 @@ -1137,14 +1040,14 @@ function enableNotificationCallback(err) { console.info("==========================>enableNotificationCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.enableNotification(bundle, false, enableNotificationCallback); ``` -#### Notification.enableNotification(bundle: BundleOption, enable: boolean) +## Notification.enableNotification(bundle: BundleOption, enable: boolean) - 接口说明 @@ -1165,7 +1068,7 @@ Notification.enableNotification(bundle, false, enableNotificationCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.enableNotification(bundle, false).then((void) => { console.info("==========================>enableNotificationCallback=======================>"); @@ -1174,7 +1077,7 @@ Notification.enableNotification(bundle, false).then((void) => { -#### Notification.isNotificationEnabled(bundle: BundleOption, callback: AsyncCallback\) +## Notification.isNotificationEnabled(bundle: BundleOption, callback: AsyncCallback\) - 接口说明 @@ -1198,14 +1101,14 @@ function isNotificationEnabledCallback(err, data) { console.info("==========================>isNotificationEnabledCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.isNotificationEnabled(bundle, isNotificationEnabledCallback); ``` -#### Notification.isNotificationEnabled(bundle: BundleOption) +## Notification.isNotificationEnabled(bundle: BundleOption) - 接口说明 @@ -1225,7 +1128,7 @@ Notification.isNotificationEnabled(bundle, isNotificationEnabledCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.isNotificationEnabled(bundle).then((data) => { console.info("==========================>isNotificationEnabledCallback=======================>"); @@ -1234,7 +1137,7 @@ Notification.isNotificationEnabled(bundle).then((data) => { -#### Notification.isNotificationEnabled(callback: AsyncCallback\) +## Notification.isNotificationEnabled(callback: AsyncCallback\) - 接口说明 @@ -1262,7 +1165,7 @@ Notification.isNotificationEnabled(isNotificationEnabledCallback); -#### Notification.isNotificationEnabled() +## Notification.isNotificationEnabled() - 接口说明 @@ -1288,7 +1191,7 @@ Notification.isNotificationEnabled().then((data) => { -#### Notification.displayBadge(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) +## Notification.displayBadge(bundle: BundleOption, enable: boolean, callback: AsyncCallback\) - 接口说明 @@ -1313,14 +1216,14 @@ function displayBadgeCallback(err) { console.info("==========================>displayBadgeCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.displayBadge(bundle, false, displayBadgeCallback); ``` -#### Notification.displayBadge(bundle: BundleOption, enable: boolean) +## Notification.displayBadge(bundle: BundleOption, enable: boolean) - 接口说明 @@ -1341,7 +1244,7 @@ Notification.displayBadge(bundle, false, displayBadgeCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.displayBadge(bundle, false).then((void) => { console.info("==========================>displayBadgeCallback=======================>"); @@ -1350,7 +1253,7 @@ Notification.displayBadge(bundle, false).then((void) => { -#### Notification.isBadgeDisplayed(bundle: BundleOption, callback: AsyncCallback\) +## Notification.isBadgeDisplayed(bundle: BundleOption, callback: AsyncCallback\) - 接口说明 @@ -1374,14 +1277,14 @@ function isBadgeDisplayedCallback(err, data) { console.info("==========================>isBadgeDisplayedCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.isBadgeDisplayed(bundle, isBadgeDisplayedCallback); ``` -#### Notification.isBadgeDisplayed(bundle: BundleOption) +## Notification.isBadgeDisplayed(bundle: BundleOption) - 接口说明 @@ -1401,7 +1304,7 @@ Notification.isBadgeDisplayed(bundle, isBadgeDisplayedCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.isBadgeDisplayed(bundle).then((data) => { console.info("==========================>isBadgeDisplayedCallback=======================>"); @@ -1410,7 +1313,7 @@ Notification.isBadgeDisplayed(bundle).then((data) => { -#### Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot, callback: AsyncCallback\) +## Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot, callback: AsyncCallback\) - 接口说明 @@ -1435,17 +1338,17 @@ function setSlotByBundleCallback(err) { console.info("==========================>setSlotByBundleCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } var notificationSlot = { - type:SOCIAL_COMMUNICATION + type: Notification.SlotType.SOCIAL_COMMUNICATION } Notification.setSlotByBundle(bundle, notificationSlot, setSlotByBundleCallback); ``` -#### Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot) +## Notification.setSlotByBundle(bundle: BundleOption, slot: NotificationSlot) - 接口说明 @@ -1466,10 +1369,10 @@ Notification.setSlotByBundle(bundle, notificationSlot, setSlotByBundleCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } var notificationSlot = { - type:SOCIAL_COMMUNICATION + type: Notification.SlotType.SOCIAL_COMMUNICATION } Notification.displayBadge(bundle, notificationSlot).then((void) => { console.info("==========================>setSlotByBundleCallback=======================>"); @@ -1478,7 +1381,7 @@ Notification.displayBadge(bundle, notificationSlot).then((void) => { -#### Notification.getSlotsByBundle(bundle: BundleOption, callback: AsyncCallback>) +## Notification.getSlotsByBundle(bundle: BundleOption, callback: AsyncCallback>) - 接口说明 @@ -1502,14 +1405,14 @@ function getSlotsByBundleCallback(err, data) { console.info("==========================>getSlotsByBundleCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.getSlotsByBundle(bundle, getSlotsByBundleCallback); ``` -#### Notification.getSlotsByBundle(bundle: BundleOption) +## Notification.getSlotsByBundle(bundle: BundleOption) - 接口说明 @@ -1529,7 +1432,7 @@ Notification.getSlotsByBundle(bundle, getSlotsByBundleCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.getSlotsByBundle(bundle).then((data) => { console.info("==========================>getSlotsByBundleCallback=======================>"); @@ -1538,7 +1441,7 @@ Notification.getSlotsByBundle(bundle).then((data) => { -#### Notification.getSlotNumByBundle(bundle: BundleOption, callback: AsyncCallback\) +## Notification.getSlotNumByBundle(bundle: BundleOption, callback: AsyncCallback\) - 接口说明 @@ -1562,14 +1465,14 @@ function getSlotNumByBundle(err, data) { console.info("==========================>getSlotNumByBundleCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.getSlotNumByBundle(bundle, getSlotNumByBundleCallback); ``` -#### Notification.getSlotNumByBundle(bundle: BundleOption) +## Notification.getSlotNumByBundle(bundle: BundleOption) - 接口说明 @@ -1589,7 +1492,7 @@ Notification.getSlotNumByBundle(bundle, getSlotNumByBundleCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.getSlotNumByBundle(bundle).then((data) => { console.info("==========================>getSlotNumByBundleCallback=======================>"); @@ -1598,7 +1501,7 @@ Notification.getSlotNumByBundle(bundle).then((data) => { -#### Notification.remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCallback\) +## Notification.remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCallback\) - 接口说明 @@ -1630,18 +1533,18 @@ function removeCallback(err) { console.info("==========================>removeCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } var notificationKey = { - id:0; - label:"label"; + id: 0; + label: "label"; } Notification.remove(bundle, notificationKey, removeCallback); ``` -#### Notification.remove(bundle: BundleOption, notificationKey: NotificationKey) +## Notification.remove(bundle: BundleOption, notificationKey: NotificationKey) - 接口说明 @@ -1662,11 +1565,11 @@ Notification.remove(bundle, notificationKey, removeCallback); ```js var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } var notificationKey = { - id:0; - label:"label"; + id: 0; + label: "label"; } Notification.remove(bundle, notificationKey).then((void) => { console.info("==========================>removeCallback=======================>"); @@ -1675,7 +1578,7 @@ Notification.remove(bundle, notificationKey).then((void) => { -#### Notification.remove(hashCode: string, callback: AsyncCallback\) +## Notification.remove(hashCode: string, callback: AsyncCallback\) - 接口说明 @@ -1704,7 +1607,7 @@ Notification.remove(hashCode, removeCallback); -#### Notification.remove(hashCode: string) +## Notification.remove(hashCode: string) - 接口说明 @@ -1730,7 +1633,7 @@ Notification.remove(hashCode).then((void) => { -#### Notification.removeAll(bundle: BundleOption, callback: AsyncCallback\) +## Notification.removeAll(bundle: BundleOption, callback: AsyncCallback\) - 接口说明 @@ -1754,14 +1657,14 @@ function removeAllCallback(err) { console.info("==========================>removeAllCallback=======================>"); } var bundle = { - bundle:"bundleName1"; + bundle: "bundleName1"; } Notification.removeAll(bundle, removeAllCallback); ``` -#### Notification.removeAll(callback: AsyncCallback\) +## Notification.removeAll(callback: AsyncCallback\) - 接口说明 @@ -1789,7 +1692,7 @@ Notification.removeAll(removeAllCallback); -#### Notification.removeAll(bundle?: BundleOption) +## Notification.removeAll(bundle?: BundleOption) - 接口说明 @@ -1815,7 +1718,7 @@ Notification.removeAll().then((void) => { -#### Notification.getAllActiveNotifications(callback: AsyncCallback>) +## Notification.getAllActiveNotifications(callback: AsyncCallback>) - 接口说明 @@ -1843,7 +1746,7 @@ Notification.getAllActiveNotifications(getAllActiveNotificationsCallback); -#### Notification.getAllActiveNotifications() +## Notification.getAllActiveNotifications() - 接口说明 @@ -1867,7 +1770,7 @@ Notification.getAllActiveNotifications().then((data) => { -#### Notification.getActiveNotificationCount(callback: AsyncCallback\) +## Notification.getActiveNotificationCount(callback: AsyncCallback\) - 接口说明 @@ -1895,7 +1798,7 @@ Notification.getActiveNotificationCount(getActiveNotificationCountCallback); -#### Notification.getActiveNotificationCount() +## Notification.getActiveNotificationCount() - 接口说明 @@ -1919,7 +1822,7 @@ Notification.getActiveNotificationCount().then((data) => { -#### Notification.getActiveNotifications(callback: AsyncCallback>) +## Notification.getActiveNotifications(callback: AsyncCallback>) - 接口说明 @@ -1947,7 +1850,7 @@ Notification.getActiveNotifications(getActiveNotificationsCallback); -#### Notification.getActiveNotifications() +## Notification.getActiveNotifications() - 接口说明 @@ -1971,7 +1874,7 @@ Notification.getActiveNotifications().then((data) => { -#### Notification.cancelGroup(groupName: string, callback: AsyncCallback\) +## Notification.cancelGroup(groupName: string, callback: AsyncCallback\) - 接口说明 @@ -2002,7 +1905,7 @@ Notification.cancelGroup(groupName, cancelGroupCallback); -#### Notification.cancelGroup(groupName: string) +## Notification.cancelGroup(groupName: string) - 接口说明 @@ -2029,7 +1932,7 @@ Notification.cancelGroup(groupName).then(() => { -#### Notification.removeGroupByBundle(bundle: BundleOption, groupName: string, callback: AsyncCallback\) +## Notification.removeGroupByBundle(bundle: BundleOption, groupName: string, callback: AsyncCallback\) - 接口说明 @@ -2054,7 +1957,7 @@ function removeGroupByBundleCallback(err) { console.info("==========================>removeGroupByBundleCallback=======================>"); } -var bundleOption = {bundle:"Bundle"}; +var bundleOption = {bundle: "Bundle"}; var groupName = "GroupName"; Notification.removeGroupByBundle(bundleOption, groupName, removeGroupByBundleCallback); @@ -2062,7 +1965,7 @@ Notification.removeGroupByBundle(bundleOption, groupName, removeGroupByBundleCal -#### Notification.removeGroupByBundle(bundle: BundleOption, groupName: string) +## Notification.removeGroupByBundle(bundle: BundleOption, groupName: string) - 接口说明 @@ -2082,7 +1985,7 @@ Notification.removeGroupByBundle(bundleOption, groupName, removeGroupByBundleCal - 示例 ```js -var bundleOption = {bundle:"Bundle"}; +var bundleOption = {bundle: "Bundle"}; var groupName = "GroupName"; Notification.removeGroupByBundle(bundleOption, groupName).then(() => { console.info("==========================>removeGroupByBundlePromise=======================>"); @@ -2091,7 +1994,7 @@ Notification.removeGroupByBundle(bundleOption, groupName).then(() => { -#### Notification.setDoNotDisturbDate(date: DoNotDisturbDate, callback: AsyncCallback\) +## Notification.setDoNotDisturbDate(date: DoNotDisturbDate, callback: AsyncCallback\) - 接口说明 @@ -2116,9 +2019,9 @@ function setDoNotDisturbDateCallback(err) { } var doNotDisturbDate = { - type : notification.DoNotDisturbType.TYPE_ONCE, - begin : new Date(), - end : new Date(2021, 11, 15, 18, 0) + type: notification.DoNotDisturbType.TYPE_ONCE, + begin: new Date(), + end: new Date(2021, 11, 15, 18, 0) } Notification.setDoNotDisturbDate(doNotDisturbDate, setDoNotDisturbDateCallback); @@ -2126,7 +2029,7 @@ Notification.setDoNotDisturbDate(doNotDisturbDate, setDoNotDisturbDateCallback); -#### Notification.setDoNotDisturbDate(date: DoNotDisturbDate) +## Notification.setDoNotDisturbDate(date: DoNotDisturbDate) - 接口说明 @@ -2146,9 +2049,9 @@ Notification.setDoNotDisturbDate(doNotDisturbDate, setDoNotDisturbDateCallback); ```js var doNotDisturbDate = { - type : notification.DoNotDisturbType.TYPE_ONCE, - begin : new Date(), - end : new Date(2021, 11, 15, 18, 0) + type: notification.DoNotDisturbType.TYPE_ONCE, + begin: new Date(), + end: new Date(2021, 11, 15, 18, 0) } Notification.setDoNotDisturbDate(doNotDisturbDate).then(() => { console.info("==========================>setDoNotDisturbDatePromise=======================>"); @@ -2157,7 +2060,7 @@ Notification.setDoNotDisturbDate(doNotDisturbDate).then(() => { -#### Notification.getDoNotDisturbDate(callback: AsyncCallback\) +## Notification.getDoNotDisturbDate(callback: AsyncCallback\) - 接口说明 @@ -2185,7 +2088,7 @@ Notification.getDoNotDisturbDate(getDoNotDisturbDateCallback); -#### Notification.getDoNotDisturbDate() +## Notification.getDoNotDisturbDate() - 接口说明 @@ -2209,7 +2112,7 @@ Notification.getDoNotDisturbDate().then((data) => { -#### Notification.supportDoNotDisturbMode(callback: AsyncCallback\) +## Notification.supportDoNotDisturbMode(callback: AsyncCallback\) - 接口说明 @@ -2237,7 +2140,7 @@ Notification.supportDoNotDisturbMode(supportDoNotDisturbModeCallback); -#### Notification.supportDoNotDisturbMode() +## Notification.supportDoNotDisturbMode() - 接口说明 @@ -2261,15 +2164,82 @@ Notification.supportDoNotDisturbMode().then((data) => { -#### WantAgent接口 +## Notification.isSupportTemplate + +isSupportTemplate(templateName: string, callback: AsyncCallback\): void -#### 导入模块 +查询模板是否存在。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| ------------ | ------------------------ | ---- | -------------------------- | +| templateName | string | 是 | 模板名称 | +| callback | AsyncCallback\ | 是 | 查询模板是否存在的回调函数 | + +- 示例 + +```javascript +var templateName = 'process'; +function isSupportTemplateCallback(err, data) { + console.info("isSupportTemplateCallback"); +} + +Notification.isSupportTemplate(templateName, isSupportTemplateCallback); +``` + + + +## Notification.isSupportTemplate + +isSupportTemplate(templateName: string): Promise\ + +查询模板是否存在。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| ------------ | ------ | ---- | -------- | +| templateName | string | 是 | 模板名称 | + +- 返回值 + +| 类型 | 说明 | +| ------------------ | --------------- | +| Promise\ | Promise方式返回 | + +- 示例 + +```javascript +var templateName = 'process'; + +Notification.isSupportTemplate(templateName).then((data) => { + console.info("isSupportTemplateCallback"); +}); +``` + + + +## NotificationTemplate + +模板信息 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| ---- | ---------------------- | ---- | ---- | -------- | +| name | string | 是 | 是 | 模板名称 | +| data | {[key:string]: Object} | 是 | 是 | 模板数据 | + + + +## WantAgent接口 + +## 导入模块 ```js import WantAgent from '@ohos.wantAgent'; ``` -#### WantAgent.getWantAgent(info: WantAgentInfo, callback: AsyncCallback\) +## WantAgent.getWantAgent(info: WantAgentInfo, callback: AsyncCallback\) - 接口说明 @@ -2304,11 +2274,6 @@ import WantAgent from '@ohos.wantAgent'; | CANCEL_PRESENT_FLAG | 只读 | enum | 否 | 在生成一个新的WantAgent对象前取消已存在的一个WantAgent对象 | | UPDATE_PRESENT_FLAG | 只读 | enum | 否 | 使用新的WantAgent的额外数据替换已存在的WantAgent中的额外数据 | | CONSTANT_FLAG | 只读 | enum | 否 | WantAgent是不可变的 | -| REPLACE_ELEMENT | 只读 | enum | 否 | 当前Want中的element属性可被WantAgent.trigger()中Want的element属性取代 | -| REPLACE_ACTION | 只读 | enum | 否 | 当前Want中的action属性可被WantAgent.trigger()中Want的action属性取代 | -| REPLACE_URI | 只读 | enum | 否 | 当前Want中的uri属性可被WantAgent.trigger()中Want的uri属性取代 | -| REPLACE_ENTITIES | 只读 | enum | 否 | 当前Want中的entities属性可被WantAgent.trigger()中Want的entities属性取代 | -| REPLACE_BUNDLE | 只读 | enum | 否 | 当前Want中的bundleName属性可被WantAgent.trigger()中Want的bundleName属性取代 | - OperationType类型说明 @@ -2327,8 +2292,8 @@ import WantAgent from '@ohos.wantAgent'; - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //getWantAgent回调 function getWantAgentCallback(err, data) { @@ -2362,12 +2327,12 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) ``` -#### WantAgent.getWantAgent(info: WantAgentInfo): Promise\ +## WantAgent.getWantAgent(info: WantAgentInfo): Promise\ - 接口说明 @@ -2387,8 +2352,8 @@ wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //WantAgentInfo对象 var wantAgentInfo = { @@ -2418,14 +2383,14 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); }); ``` -#### WantAgent.getBundleName(agent: WantAgent, callback: AsyncCallback\) +## WantAgent.getBundleName(agent: WantAgent, callback: AsyncCallback\) - 接口说明 @@ -2446,17 +2411,17 @@ wantAgent.getWantAgent(wantAgentInfo).then((data) => { - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent = data; + wantAgent = data; } else { console.info('----getWantAgent failed!----'); } @@ -2489,18 +2454,18 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //getBundleName回调 function getBundleNameCallback(err, data) { console.info("==========================>getBundleNameCallback=======================>"); } -wantAgent.getBundleName(WantAgent, getBundleNameCallback) +WantAgent.getBundleName(wantAgent, getBundleNameCallback) ``` -#### WantAgent.getBundleName(agent: WantAgent): Promise\ +## WantAgent.getBundleName(agent: WantAgent): Promise\ - 接口说明 @@ -2520,11 +2485,11 @@ wantAgent.getBundleName(WantAgent, getBundleNameCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //WantAgentInfo对象 var wantAgentInfo = { @@ -2554,19 +2519,19 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); - WantAgent = data; + wantAgent = data; }); -wantAgent.getBundleName(WantAgent).then((data) => { +WantAgent.getBundleName(wantAgent).then((data) => { console.info("==========================>getBundleNameCallback=======================>"); }); ``` -#### WantAgent.getUid(agent: WantAgent, callback: AsyncCallback\) +## WantAgent.getUid(agent: WantAgent, callback: AsyncCallback\) - 接口说明 @@ -2587,17 +2552,17 @@ wantAgent.getBundleName(WantAgent).then((data) => { - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent = data; + wantAgent = data; } else { console.info('----getWantAgent failed!----'); } @@ -2630,18 +2595,18 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //getUid回调 function getUidCallback(err, data) { console.info("==========================>getUidCallback=======================>"); } -wantAgent.getUid(WantAgent, getUidCallback) +WantAgent.getUid(wantAgent, getUidCallback) ``` -#### WantAgent.getUid(agent: WantAgent): Promise\ +## WantAgent.getUid(agent: WantAgent): Promise\ - 接口说明 @@ -2661,11 +2626,11 @@ wantAgent.getUid(WantAgent, getUidCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //WantAgentInfo对象 var wantAgentInfo = { @@ -2695,19 +2660,19 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); - WantAgent = data; + wantAgent = data; }); -wantAgent.getUid(WantAgent).then((data) => { +WantAgent.getUid(wantAgent).then((data) => { console.info("==========================>getUidCallback=======================>"); }); ``` -#### WantAgent.getWant(agent: WantAgent, callback: AsyncCallback\) +## WantAgent.getWant(agent: WantAgent, callback: AsyncCallback\) - 接口说明 @@ -2728,17 +2693,17 @@ wantAgent.getUid(WantAgent).then((data) => { - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent = data; + wantAgent = data; } else { console.info('----getWantAgent failed!----'); } @@ -2771,22 +2736,22 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentWantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //getWant回调 function getWantCallback(err, data) { console.info("==========================>getWantCallback=======================>"); } -wantAgent.getWant(WantAgent, getWantCallback) +WantAgent.getWant(wantAgent, getWantCallback) ``` -#### WantAgent.getWant(agent: WantAgent): Promise\ +## WantAgent.getWant(agent: WantAgent): Promise\ - 接口说明 - 获取WantAgent对象的Uid(Promise形式) + 获取WantAgent对象的want(Promise形式) - getWant参数描述 @@ -2802,11 +2767,11 @@ wantAgent.getWant(WantAgent, getWantCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //WantAgentInfo对象 var wantAgentInfo = { @@ -2836,19 +2801,19 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); - WantAgent = data; + wantAgent = data; }); -wantAgent.getWant(WantAgent).then((data) => { +WantAgent.getWant(wantAgent).then((data) => { console.info("==========================>getWantCallback=======================>"); }); ``` -#### WantAgent.cancel(agent: WantAgent, callback: AsyncCallback\) +## WantAgent.cancel(agent: WantAgent, callback: AsyncCallback\) - 接口说明 @@ -2869,17 +2834,17 @@ wantAgent.getWant(WantAgent).then((data) => { - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent = data; + wantAgent = data; } else { console.info('----getWantAgent failed!----'); } @@ -2912,18 +2877,18 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //cancel回调 function cancelCallback(err, data) { console.info("==========================>cancelCallback=======================>"); } -wantAgent.cancel(WantAgent, cancelCallback) +WantAgent.cancel(wantAgent, cancelCallback) ``` -#### WantAgent.cancel(agent: WantAgent): Promise\ +## WantAgent.cancel(agent: WantAgent): Promise\ - 接口说明 @@ -2943,11 +2908,11 @@ wantAgent.cancel(WantAgent, cancelCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //WantAgentInfo对象 var wantAgentInfo = { @@ -2977,19 +2942,19 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); - WantAgent = data; + wantAgent = data; }); -wantAgent.cancel(WantAgent).then((data) => { +WantAgent.cancel(wantAgent).then((data) => { console.info("==========================>cancelCallback=======================>"); }); ``` -#### WantAgent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback\) +## WantAgent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback\) - 接口说明 @@ -3020,17 +2985,17 @@ wantAgent.cancel(WantAgent).then((data) => { - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent; +var wantAgent; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent = data; + wantAgent = data; } else { console.info('----getWantAgent failed!----'); } @@ -3063,7 +3028,7 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //trigger回调 function triggerCallback(err, data) { @@ -3073,12 +3038,12 @@ function triggerCallback(err, data) { var triggerInfo = { code:0 } -wantAgent.trigger(WantAgent, triggerInfo, triggerCallback) +WantAgent.trigger(wantAgent, triggerInfo, triggerCallback) ``` -#### WantAgent.equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback\) +## WantAgent.equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback\) - 接口说明 @@ -3100,19 +3065,19 @@ wantAgent.trigger(WantAgent, triggerInfo, triggerCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent1; -var WantAgent2; +var wantAgent1; +var wantAgent2; //getWantAgent回调 function getWantAgentCallback(err, data) { console.info("==========================>getWantAgentCallback=======================>"); if (err.code == 0) { - WantAgent1 = data; - WantAgent2 = data; + wantAgent1 = data; + wantAgent2 = data; } else { console.info('----getWantAgent failed!----'); } @@ -3145,18 +3110,18 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +WantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) //equal回调 function equalCallback(err, data) { console.info("==========================>equalCallback=======================>"); } -wantAgent.equal(WantAgent1, WantAgent1, equalCallback) +WantAgent.equal(wantAgent1, wantAgent2, equalCallback) ``` -#### WantAgent.equal(agent: WantAgent, otherAgent: WantAgent): Promise\ +## WantAgent.equal(agent: WantAgent, otherAgent: WantAgent): Promise\ - 接口说明 @@ -3177,12 +3142,12 @@ wantAgent.equal(WantAgent1, WantAgent1, equalCallback) - 示例 ```js -import wantAgent from '@ohos.wantAgent'; -import { OperationType, Flags } from '@ohos.wantagent'; +import WantAgent from '@ohos.wantAgent'; +import { OperationType, WantAgentFlags } from '@ohos.wantagent'; //wantAgent对象 -var WantAgent1; -var WantAgent2; +var wantAgent1; +var wantAgent2; //WantAgentInfo对象 var wantAgentInfo = { @@ -3212,12 +3177,13 @@ var wantAgentInfo = { wantAgentFlags:[WantAgentFlags.UPDATE_PRESENT_FLAG] } -wantAgent.getWantAgent(wantAgentInfo).then((data) => { +WantAgent.getWantAgent(wantAgentInfo).then((data) => { console.info("==========================>getWantAgentCallback=======================>"); - WantAgent = data; + wantAgent1 = data; + wantAgent2 = data; }); -wantAgent.equal(WantAgent1, WantAgent2).then((data) => { +WantAgent.equal(wantAgent1, wantAgent2).then((data) => { console.info("==========================>equalCallback=======================>"); }); ``` @@ -3228,4 +3194,3 @@ wantAgent.equal(WantAgent1, WantAgent2).then((data) => { - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" index cfd8437b0e6f4bb99b09707a66d2d1def35d5080..a5892220037573d90b3e92740f215d341bb24095 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/08.Context\346\250\241\345\235\227.md" @@ -1,6 +1,6 @@ --- title: Context模块 -permalink: /pages/000b000007 +permalink: /pages/010c010108 navbar: true sidebar: true prev: true @@ -9,547 +9,479 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- -# Context模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | 智慧视觉设备 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | ------------ | -| Context.getOrCreateLocalDir(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getOrCreateLocalDir() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.verifyPermission(permission: string, options: PermissionOptions, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.verifyPermission(permission: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.verifyPermission(permission: string, options?: PermissionOptions) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.requestPermissionsFromUser(permissions: Array\, requestCode: number, resultCallback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getApplicationInfo(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getApplicationInfo() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getBundleName(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getBundleName() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getProcessInfo(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getProcessInfo() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getElementName(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getElementName() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getProcessName(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getProcessName() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getCallingBundle(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| Context.getCallingBundle() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | - -#### 权限列表 - -**ohos.permission.RUNNING_LOCK permission** - -#### 导入模块 - -``` -import featureAbility from '@ohos.ability.featureAbility' -import bundle from '@ohos.bundle' -``` - -#### Context.getOrCreateLocalDir(callback: AsyncCallback\) - -- 接口说明 - - 获取应用程序的本地根目录。如果是第一次调用,将创建目录(callback形式) - -- getOrCreateLocalDir参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | ----------------------- | ---- | ---------------- | -| callback | 只读 | AsyncCallback\) | 是 | 被指定的回调方法 | - -- 返回值 - - 根目录 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getOrCreateLocalDir() -``` - - - -#### Context.getOrCreateLocalDir() - -- 接口说明 - - 获取应用程序的本地根目录。如果是第一次调用,将创建目录(Promise形式) - -- 返回值 - - 根目录 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getOrCreateLocalDir().then((void) => { - console.info("==========================>getOrCreateLocalDirCallback=======================>"); -}); -``` - - - -#### Context.verifyPermission(permission: string, options: PermissionOptions, callback: AsyncCallback\) - -- 接口说明 - - 验证系统中运行的特定pid和uid是否允许指定的权限(callback形式) - -- verifyPermission参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ---------------------- | ---- | ---------------- | -| permission | 只读 | string | 是 | 指定权限的名称 | -| options | 只读 | PermissionOptions | 是 | 进程id | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -- PermissionOptions类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---- | -------- | ------ | ---- | ------ | -| pid | 只读 | number | 否 | 进程id | -| uid | 只读 | number | 否 | 用户id | - -- 返回值 - - 如果PID和UID具有权限,则使用{@code 0}进行异步回调;否则使用{@code-1}回调。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import bundle from '@ohos.bundle' -var context = featureAbility.getContext(); -var datainfo = await bundle.getBundleInfo('com.context.test',1); -context.verifyPermission("com.example.permission",datainfo.uid,) - -``` - - - -#### Context.verifyPermission(permission: string, callback: AsyncCallback\) - -- 接口说明 - - 验证系统中运行的特定pid和uid是否允许指定的权限(callback形式) - -- 参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ----------------------- | ---- | ---------------- | -| permission | 只读 | string | 是 | 指定权限的名称 | -| callback | 只读 | AsyncCallback\) | 是 | 被指定的回调方法 | - -- 返回值 - - 如果PID和UID具有权限,则使用{@code 0}进行异步回调;否则使用{@code-1}回调。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.verifyPermission("com.example.permission") -``` - - - -#### Context.verifyPermission(permission: string, options?: PermissionOptions) - -- 接口说明 - - 验证系统中运行的特定pid和uid是否允许指定的权限(Promise形式) -- verifyPermission参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ----------------- | ---- | -------------- | -| permission | 只读 | string | 是 | 指定权限的名称 | -| options | 只读 | PermissionOptions | 否 | 进程id | - -- PermissionOptions类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---- | -------- | ------ | ---- | ------ | -| pid | 只读 | number | 否 | 进程id | -| uid | 只读 | number | 否 | 用户id | - -- 返回值 - - 如果PID和UID具有权限,则使用{@code 0}进行异步回调;否则使用{@code-1}回调。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -var Permission = context.PermissionOptions(1,1); -context.getOrCreateLocalDir('com.context.permission',Permission).then((void) => { - console.info("==========================>verifyPermissionCallback=======================>"); -}); -``` - - - -#### Context.requestPermissionsFromUser(permissions: Array\, requestCode: number, resultCallback: AsyncCallback\) - -- 接口说明 - - 从系统请求某些权限(callback形式) - -- requestPermissionsFromUser参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------------- | -------- | ---------------------------------------- | ---- | --------------------------------------------- | -| permissions | 只读 | Array\ | 是 | 指示要请求的权限列表。此参数不能为null | -| requestCode | 只读 | number | 是 | 指示要传递给PermissionRequestResult的请求代码 | -| resultCallback | 只读 | AsyncCallback\) | 是 | 被指定的回调方法 | -- PermissionRequestResult类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | -------------- | ---- | ------------------ | -| requestCode | 只读 | number | 是 | 用户传入的请求代码 | -| permissions | 只读 | Array\ | 是 | 用户传入的权限 | -| authResults | 只读 | Array\ | 是 | 求权限的结果 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getOrCreateLocalDir( - ["com.example.permission1", - "com.example.permission2", - "com.example.permission3", - "com.example.permission4", - "com.example.permission5"], - 1, -) -``` - - - -#### Context.getApplicationInfo(callback: AsyncCallback\) - -- 接口说明 - - 获取有关当前应用程序的信息(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ------------------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getApplicationInfo() -``` - - - -#### Context.getApplicationInfo() - -- 接口说明 - - 获取有关当前应用程序的信息(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getApplicationInfo().then((void) => { - console.info("==========================>getApplicationInfoCallback=======================>"); -}); -``` - - - -#### Context.getBundleName(callback: AsyncCallback\) - -- 接口说明 - - 获取当前ability的捆绑包名称(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getBundleName() -``` - - - -#### Context.getBundleName() - -- 接口说明 - - 获取当前ability的捆绑包名称(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getBundleName().then((void) => { - console.info("==========================>getBundleNameCallback=======================>"); -}); -``` - - - -#### Context.getProcessInfo(callback: AsyncCallback\) - -- 接口说明 - - 获取有关当前进程的信息,包括进程ID和名称(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | --------------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getProcessInfo() -``` - - - -#### Context.getProcessInfo() - -- 接口说明 - - 获取有关当前进程的信息,包括进程ID和名称(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getProcessInfo().then((void) => { - console.info("==========================>getProcessInfoCallback=======================>"); -}); -``` - - - -#### Context.getElementName(callback: AsyncCallback\) - -- 接口说明 - - 获取当前能力的ohos.bundle.ElementName对象。此方法仅适用于页面功能(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | --------------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getElementName() -``` - - - -#### Context.getElementName() - -- 接口说明 - - 获取当前能力的ohos.bundle.ElementName对象。此方法仅适用于页面功能(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getElementName().then((void) => { - console.info("==========================>getElementNameCallback=======================>"); -}); -``` - -#### - -#### Context.getProcessName(callback: AsyncCallback\) - -- 接口说明 - - 获取当前进程的名称(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getProcessName() -``` - - - -#### Context.getProcessName() - -- 接口说明 - - 获取当前进程的名称(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getProcessName().then((void) => { - console.info("==========================>getProcessNameCallback=======================>"); -}); -``` - - - -#### Context.getCallingBundle(callback: AsyncCallback\) - -- 接口说明 - - 获取调用当前能力的能力的捆绑包名称(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getCallingBundle() -``` - - - -#### Context.getCallingBundle() - -- 接口说明 - - 获取调用当前能力的能力的捆绑包名称(Promise形式) - -- 参数描述 - - Null - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var context = featureAbility.getContext(); -context.getCallingBundle().then((void) => { - console.info("==========================>getCallingBundleCallback=======================>"); -}); -``` - +# Context模块 + +## 导入模块 + +```js +import featureAbility from '@ohos.ability.featureAbility' +import bundle from '@ohos.bundle' +``` + +Context对象是在featureAbility中创建实例,并通过featureAbility的getContext()接口返回,因此在使用Context时,必须导入@ohos.ability.featureAbility库。示例如下: + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getOrCreateLocalDir() +``` + +## Context + +### getOrCreateLocalDir + +getOrCreateLocalDir(callback: AsyncCallback\): void + +获取应用程序的本地根目录(callback形式)。 + +如果是第一次调用,将创建目录。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | -------------------------- | +| callback | AsyncCallback\ | 是 | 返回应用程序的本地根目录。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getOrCreateLocalDir((err, data)=>{ + console.info("data=" + data); +}) +``` + + + +### getOrCreateLocalDir + +getOrCreateLocalDir(): Promise\ + +获取应用程序的本地根目录(Promise形式)。 + +如果是第一次调用,将创建目录。 + +**返回值:** + +| 类型 | 说明 | +| ---------------- | ---------------------- | +| Promise\ | 应用程序的本地根目录。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getOrCreateLocalDir().then((void) => { + console.info("==========================>getOrCreateLocalDirCallback=======================>"); +}); +``` + + + +### verifyPermission + +verifyPermission(permission: string, options: PermissionOptions, callback: AsyncCallback\): void + +验证系统中运行的特定pid和uid是否允许指定的权限(callback形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------------------- | ---- | ------------------------------------- | +| permission | string | 是 | 指定权限的名称。 | +| options | [PermissionOptions](#permissionoptions) | 是 | 权限选项。 | +| callback | AsyncCallback\ | 是 | 返回权限验证结果,0有权限,-1无权限。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +import bundle from '@ohos.bundle' +var context = featureAbility.getContext(); +var datainfo = await bundle.getBundleInfo('com.context.test',1); +context.verifyPermission("com.example.permission",datainfo.uid) + +``` + + + +### verifyPermission + +verifyPermission(permission: string, callback: AsyncCallback\): void + +验证系统中运行的当前pid和uid是否具有指定的权限(callback形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | ---------------------- | ---- | ------------------------------------- | +| permission | string | 是 | 指定权限的名称。 | +| callback | AsyncCallback\ | 是 | 返回权限验证结果,0有权限,-1无权限。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.verifyPermission("com.example.permission") +``` + +### verifyPermission + +verifyPermission(permission: string, options?: PermissionOptions): Promise\ + +验证系统中运行的特定pid和uid是否具有指定的权限(Promise形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| ---------- | --------------------------------------- | ---- | ---------------- | +| permission | string | 是 | 指定权限的名称。 | +| options | [PermissionOptions](#permissionoptions) | 否 | 权限选项。 | + +**返回值:** + +| 类型 | 说明 | +| ---------------- | ----------------------------------------------------------- | +| Promise\ | 如果pid和uid具有权限,则使用0进行异步回调;否则使用-1回调。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +var Permission = context.PermissionOptions(1,1); +context.getOrCreateLocalDir('com.context.permission',Permission).then((void) => { + console.info("==========================>verifyPermissionCallback=======================>"); +}); +``` + + + +### requestPermissionsFromUser + +requestPermissionsFromUser(permissions: Array\, requestCode: number, resultCallback: AsyncCallback<[PermissionRequestResult](#permissionrequestresult)>) + +从系统请求某些权限(callback形式)。 + +**参数:** + + +| 名称 | 类型 | 必填 | 描述 | +| -------------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- | +| permissions | Array\ | 是 | 指示要请求的权限列表。此参数不能为null。 | +| requestCode | number | 是 | 指示要传递给PermissionRequestResult的请求代码。 | +| resultCallback | AsyncCallback<[PermissionRequestResult](#permissionrequestresult)> | 是 | 返回授权结果信息。 | +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getOrCreateLocalDir( + ["com.example.permission1", + "com.example.permission2", + "com.example.permission3", + "com.example.permission4", + "com.example.permission5"], + 1, +) +``` + + + +### getApplicationInfo + +getApplicationInfo(callback: AsyncCallback\) + +获取有关当前应用程序的信息(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ------------------------------- | ---- | ------------------------ | +| callback | AsyncCallback\ | 是 | 返回当前应用程序的信息。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getApplicationInfo() +``` + + + +### getApplicationInfo + +getApplicationInfo(): Promise\ + +获取有关当前应用程序的信息(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------- | ------------------ | +| Promise\ | 当前应用程序的信息 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getApplicationInfo().then((void) => { + console.info("==========================>getApplicationInfoCallback=======================>"); +}); +``` + + + +### getBundleName + +getBundleName(callback: AsyncCallback\): void + +获取当前ability的捆绑包名称(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ----------------------------- | +| callback | AsyncCallback\ | 是 | 返回当前ability的捆绑包名称。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getBundleName() +``` + + + +### getBundleName + +getBundleName(): Promise\ + +获取当前ability的捆绑包名称(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ---------------- | ------------------------- | +| Promise\ | 当前ability的捆绑包名称。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getBundleName().then((void) => { + console.info("==========================>getBundleNameCallback=======================>"); +}); +``` + + + +### getProcessInfo + +getProcessInfo(callback: AsyncCallback\) + +获取有关当前进程的信息,包括进程ID和名称(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | --------------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 返回当前进程的信息。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getProcessInfo() +``` + + + +### getProcessInfo + +getProcessInfo(): Promise\ + +获取有关当前进程的信息,包括进程id和名称(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| --------------------- | -------------- | +| Promise\ | 当前进程的信息 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getProcessInfo().then((void) => { + console.info("==========================>getProcessInfoCallback=======================>"); +}); +``` + + + +### getElementName + +getElementName(callback: AsyncCallback\): void + +获取当前ability的ohos.bundle.ElementName对象(callback形式)。 + +此方法仅适用于页面功能。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | --------------------------- | ---- | ---------------------------------------------- | +| callback | AsyncCallback\ | 是 | 返回当前ability的ohos.bundle.ElementName对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getElementName() +``` + + + +### getElementName + +getElementName(): Promise\ + +获取当前能力的ohos.bundle.ElementName对象(Promise形式)。 + +此方法仅适用于页面功能。 + +**返回值:** + +| 类型 | 说明 | +| --------------------- | ------------------------------------------ | +| Promise\ | 当前ability的ohos.bundle.ElementName对象。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getElementName().then((void) => { + console.info("==========================>getElementNameCallback=======================>"); +}); +``` + +### getProcessName + +getProcessName(callback: AsyncCallback\): void + +获取当前进程的名称(callback形式)。 + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | -------------------- | +| callback | AsyncCallback\ | 是 | 返回当前进程的名称。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getProcessName() +``` + + + +### getProcessName + +getProcessName(): Promise\ + +获取当前进程的名称(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| ---------------- | -------------------- | +| Promise\ | 返回当前进程的名称。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getProcessName().then((void) => { + console.info("==========================>getProcessNameCallback=======================>"); +}); +``` + + + +### getCallingBundle + +getCallingBundle(callback: AsyncCallback\): void + +获取调用ability的包名称(callback形式)。 + +**参数:** + +| 名称 | 类型 | 必填 | 描述 | +| -------- | ---------------------- | ---- | ------------------------- | +| callback | AsyncCallback\ | 是 | 返回调用ability的包名称。 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getCallingBundle() +``` + + + +### getCallingBundle + +getCallingBundle(): Promise\ + +获取调用ability的包名称(Promise形式)。 + +**返回值:** + +| 类型 | 说明 | +| --------------- | ------------------------- | +| Promise\ | 调用ability的包名称 | + +**示例:** + +```js +import featureAbility from '@ohos.ability.featureAbility' +var context = featureAbility.getContext(); +context.getCallingBundle().then((void) => { + console.info("==========================>getCallingBundleCallback=======================>"); +}); +``` + +## PermissionOptions + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---- | -------- | ------ | ---- | ------ | +| pid | 只读 | number | 否 | 进程id | +| uid | 只读 | number | 否 | 用户id | + +## PermissionRequestResult + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | -------------- | ---- | ------------------ | +| requestCode | 只读 | number | 是 | 用户传入的请求代码 | +| permissions | 只读 | Array\ | 是 | 用户传入的权限 | +| authResults | 只读 | Array\ | 是 | 求权限的结果 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" similarity index 89% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" index 3b0070cb2540981794f39b690864d15a2cd95a7b..c9053a24635806c5bec7b1bd64c9a588dc18ebd7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/01.\350\265\204\346\272\220\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 资源管理 -permalink: /pages/000b000100 +permalink: /pages/010c010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 资源管理 @@ -173,8 +173,6 @@ getResourceManager(bundleName: string): Promise<ResourceManager> 表示当前设备的状态。 -### 属性 - | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | | direction | [Direction](#direction) | 是 | 否 | 当前设备屏幕方向 | @@ -186,8 +184,6 @@ getResourceManager(bundleName: string): Promise<ResourceManager> 表示设备支持的能力。 -### 属性 - | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | | screenDensity | [ScreenDensity](#screendensity) | 是 | 否 | 当前设备屏幕密度 | @@ -322,7 +318,7 @@ getMedia(resId: number, callback: AsyncCallback<Uint8Array>): void | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | resId | number | 是 | 资源ID值 | - | callback | AsyncCallback<Array<Uint8Array>> | 是 | 异步回调,用于返回获取的媒体文件内容 | + | callback | AsyncCallback<Uint8Array> | 是 | 异步回调,用于返回获取的媒体文件内容 | - 示例: ``` @@ -352,7 +348,7 @@ getMedia(resId: number): Promise<Uint8Array> - 返回值: | 类型 | 说明 | | -------- | -------- | - | Promise<Array<Uint8Array>> | 资源ID值对应的媒体文件内容 | + | Promise<Uint8Array> | 资源ID值对应的媒体文件内容 | - 示例: ``` @@ -570,3 +566,55 @@ getPluralString(resId: number, num: number): Promise<string> }); }); ``` + +### getRawFile8+ + +getRawFile(path: string, callback: AsyncCallback<Uint8Array>): void + +用户获取指定路径对应的rawfile文件内容,使用callback形式返回字节数组。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | rawfile文件路径 | + | callback | AsyncCallback<Uint8Array> | 是 | 异步回调,用于返回获取的rawfile文件内容 | + +- 示例: + ``` + resourceManager.getResourceManager((error, mgr) => { + mgr.getRawFile("test.xml", (error, value) => { + if (error != null) { + console.log(value); + } else { + console.log(value); + } + }); + }); + ``` + +### getRawFile8+ + +getRawFile(path: string): Promise<Uint8Array> + +用户获取指定路径对应的rawfile文件内容,使用Promise形式返回字节数组。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | rawfile文件路径 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<Uint8Array> | rawfile文件内容 | + +- 示例: + ``` + resourceManager.getResourceManager((error, mgr) => { + mgr.getRawFile("test.xml").then(value => { + console.log(value); + }).catch(error => { + console.log("getrawfile promise " + error); + }); + }); + ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..cf5760d80fa1775dafef58095424cb4644f2c4aa --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" @@ -0,0 +1,1166 @@ +--- +title: 国际化(I18n) +permalink: /pages/010c010202 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 国际化-I18n + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> +> - I18N模块包含国际化能力增强接口(未在ECMA 402中定义)。 + + +## 导入模块 + +``` +import i18n from '@ohos.i18n'; +``` + + +## 权限 + +无 + + +## i18n.getDisplayLanguage + +getDisplayLanguage(language: string, locale: string, sentenceCase?: boolean): string + +获取指定语言的本地化显示文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | language | string | 是 | 指定语言。 | + | locale | string | 是 | 显示指定语言的区域ID。 | + | sentenceCase | boolean | 否 | 本地化显示文本是否要首字母大写。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 指定语言的本地化显示文本。 | + +- 示例: + ``` + i18n.getDisplayLanguage("zh", "en-GB", true); + i18n.getDisplayLanguage("zh", "en-GB"); + ``` + + +## i18n.getDisplayCountry + +getDisplayCountry(country: string, locale: string, sentenceCase?: boolean): string + +获取指定国家的本地化显示文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | country | string | 是 | 指定国家。 | + | locale | string | 是 | 显示指定国家的区域ID。 | + | sentenceCase | boolean | 否 | 本地化显示文本是否要首字母大写。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 指定国家的本地化显示文本。 | + +- 示例: + ``` + i18n.getDisplayCountry("zh-CN", "en-GB", true); + i18n.getDisplayCountry("zh-CN", "en-GB"); + ``` + + +## i18n.isRTL8+ + +isRTL(locale: string): boolean + +获取是否为从右至左显示语言。 + +- 参数: + | 参数名 | 类型 | 说明 | + | -------- | -------- | -------- | + | locale | string | 指定区域ID。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | true表示该locale从右至左显示语言;false表示该locale从左至右显示语言。 | + +- 示例: + ``` + i18n.isRTL("zh-CN");// 中文不是RTL语言,返回false + i18n.isRTL("ar-EG");// 阿语是RTL语言,返回true + ``` + + +## i18n.getSystemLanguage + +getSystemLanguage(): string + +获取系统语言。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 系统语言ID。 | + +- 示例: + ``` + i18n.getSystemLanguage(); + ``` + + +## i18n.getSystemRegion + +getSystemRegion(): string + +获取系统地区。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 系统地区ID。 | + +- 示例: + ``` + i18n.getSystemRegion(); + ``` + + +## i18n.getSystemLocale + +getSystemLocale(): string + +获取系统区域。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 系统区域ID。 | + +- 示例: + ``` + i18n.getSystemLocale(); + ``` + + +## i18n.getCalendar8+ + +getCalendar(locale: string, type? : string): Calendar + +获取日历对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | 合法的locale值,例如zh-Hans-CN。 | + | type | string | 否 | 合法的日历类型,目前合法的类型有buddhist, chinese, coptic, ethiopic, hebrew, gregory, indian, islamic_civil, islamic_tbla, islamic_umalqura, japanese, persian。当type没有给出时,采用区域默认的日历类型。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Calendar](#calendar8) | 日历对象。 | + +- 示例: + ``` + i18n.getCalendar("zh-Hans", "gregory"); + ``` + + +## Calendar8+ + + +### setTime8+ + +setTime(date: Date): void + +设置日历对象内部的时间日期。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | date | Date | 是 | 将要设置的日历对象的内部时间日期。 | + +- 示例: + ``` + var calendar = I18n.getCalendar("en-US", "gregory"); + var date = new Date(2021, 10, 7, 8, 0, 0, 0); + calendar.setTime(date); + ``` + + +### setTime8+ + +setTime(time: number): void + +设置日历对象内部的时间日期, time为从1970.1.1 00:00:00 GMT逝去的毫秒数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | time | number | 是 | time为从1970.1.1 00:00:00 GMT逝去的毫秒数。 | + +- 示例: + ``` + var calendar = I18n.getCalendar("en-US", "gregory"); + calendar.setTime(10540800000); + ``` + + +### set8+ + +set(year: number, month: number, date:number, hour?: number, minute?: number, second?: number): void + +设置日历对象的年、月、日、时、分、秒。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | year | number | 是 | 设置的年。 | + | month | number | 是 | 设置的月。 | + | date | number | 是 | 设置的日。 | + | hour | number | 否 | 设置的小时。 | + | minute | number | 否 | 设置的分钟。 | + | second | number | 否 | 设置的秒。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setTime(2021, 10, 1, 8, 0, 0); // set time to 2021.10.1 08:00:00 + ``` + + +### setTimeZone8+ + +setTimeZone(timezone: string): void + +设置日历对象的时区。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | timezone | string | 是 | 设置的时区id,如“Asia/Shanghai”。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setTimeZone("Asia/Shanghai"); + ``` + + +### getTimeZone8+ + +getTimeZone(): string + +获取日历对象的时区。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 日历对象的时区id。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setTimeZone("Asia/Shanghai"); + calendar.getTimeZone(); // Asia/Shanghai" + ``` + + +### getFirstDayOfWeek8+ + +getFirstDayOfWeek(): number + +获取日历对象的一周起始日。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 获取一周的起始日,1代表周日,7代表周六。 | + +- 示例: + ``` + var calendar = I18n.getCalendar("en-US", "gregory"); + calendar.getFirstDayOfWeek(); + ``` + + +### setFirstDayOfWeek8+ + +setFirstDayOfWeek(value: number): void + +设置每一周的起始日。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | number | 否 | 设置一周的起始日,1代表周日,7代表周六。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setFirstDayOfWeek(0); + ``` + + +### getMinimalDaysInFirstWeek8+ + +getMinimalDaysInFirstWeek(): number + +获取一年中第一周的最小天数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 一年中第一周的最小天数。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.getMinimalDaysInFirstWeek(); + ``` + + +### setMinimalDaysInFirstWeek8+ + +setMinimalDaysInFirstWeek(value: number): void + +设置一年中第一周的最小天数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | number | 否 | 一年中第一周的最小天数。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setMinimalDaysInFirstWeek(3); + ``` + + +### get8+ + +get(field: string): number + +获取日历对象中与field相关联的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | field | string | 是 | 通过field来获取日历对象相应的值。目前支持的field值有 era, year, month, week_of_year, week_of_month, date, day_of_year, day_of_week, day_of_week_in_month, hour, hour_of_day, minute, second, millisecond, zone_offset, dst_offset, year_woy, dow_local, extended_year, julian_day, milliseconds_in_day, is_leap_month。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 与field相关联的值,如当前Calendar对象的内部日期的年份为1990,get("year")返回1990。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setTime(2021, 10, 1, 8, 0, 0); // set time to 2021.10.1 08:00:00 + calendar.get("hour_of_day"); // 8 + ``` + + +### getDisplayName8+ + +getDisplayName(locale: string): string + +获取日历对象在locale所指定的区域的名字。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | locale指定获取哪个区域下该calendar的名字,如buddhist在en-US上显示的名称为“Buddhist Calendar”。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 日历在locale所指示的区域的名字。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("en-US", "buddhist"); + calendar.getDisplayName("zh"); // 佛历 + ``` + + +### isWeekend8+ + +isWeekend(date?: Date): boolean + +判断给定的日期是否在日历中是周末。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | date | Date | 否 | 判断日期在日历中是否是周末。如果date没有给出,判断calendar当前日期是否为周末。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 当所判断的日期为周末时,返回 true,否则返回false。 | + +- 示例: + ``` + var calendar = i18n.getCalendar("zh-Hans"); + calendar.setTime(2021, 11, 11, 8, 0, 0); // set time to 2021.11.11 08:00:00 + calendar.isWeekend(); // false + var date = new Date(2011, 11, 6, 9, 0, 0); + calendar.isWeekend(date); // true + ``` + + +## PhoneNumberFormat8+ + + +### constructor8+ + +constructor(country: string, options?: PhoneNumberFormatOptions) + +创建电话号码格式化对象。 + +参数: +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| country | string | 是 | 表示电话号码所属国家或地区代码。 | +| options | [PhoneNumberFormatOptions](#phonenumberformatoptions8) | 否 | 电话号码格式化对象的相关选项。 | + +- 示例: + ``` + var phoneNumberFormat= new i18n.PhoneNumberFormat("CN", {"type": "E164"}); + ``` + + +### isValidNumber8+ + +isValidNumber(number: string): boolean + +判断传入的电话号码格式是否正确。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | number | string | 是 | 待判断的电话号码。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示电话号码的格式正确,返回false表示电话号码的格式错误。 | + +- 示例: + ``` + var phonenumberfmt = new i18n.PhoneNumberFormat("CN"); + phonenumberfmt.isValidNumber("15812312312"); + ``` + + +### format8+ + +format(number: string): string + +对电话号码进行格式化。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | number | string | 是 | 待格式化的电话号码。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 格式化后的电话号码。 | + +- 示例: + ``` + var phonenumberfmt = new i18n.PhoneNumberFormat("CN"); + phonenumberfmt.format("15812312312"); + ``` + + +## PhoneNumberFormatOptions8+ + +表示电话号码格式化对象可设置的属性。 + + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| type | string | 是 | 是 | 表示对电话号码格式化的类型,取值范围:"E164", "INTERNATIONAL", "NATIONAL", "RFC3966"。 | + + +## UnitInfo8+ + +度量衡单位信息。 + + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| unit | string | 是 | 是 | 单位的名称,如:"meter", "inch", "cup"等。 | +| measureSystem | string | 是 | 是 | 单位的度量体系,取值包括:"SI", "US", "UK"。 | + + +## Util8+ + + +### unitConvert8+ + +unitConvert(fromUnit: UnitInfo, toUnit: UnitInfo, value: number, locale: string, style?: string): string + +将fromUnit的单位转换为toUnit的单位,并根据区域与风格进行格式化。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromUnit | [UnitInfo](#unitinfo8) | 是 | 要被转换的单位。 | + | toUnit | [UnitInfo](#unitinfo8) | 是 | 要转换为的单位。 | + | value | number | 是 | 要被转换的单位的数量值。 | + | locale | string | 是 | 格式化时使用的区域参数,如:zh-Hans-CN。 | + | style | string | 否 | 格式化使用的风格,取值包括:"long", "short", "medium"。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 按照toUnit的单位格式化后,得到的字符串。 | + +- 示例: + ``` + I18n.Util.unitConvert({unit: "cup", measureSystem: "US"}, {unit: "liter", measureSystem: "SI"}, 1000, "en-US", "long"); + ``` + + +## IndexUtil8+ + + +### getInstance8+ + +getInstance(): IndexUtil + +创建并返回IndexUtil对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 否 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [IndexUtil](#indexutil8) | locale对应的IndexUtil对象。 | + +- 示例: + ``` + var indexUtil= i18n.IndexUtil.getInstance("zh-CN"); + ``` + + +### getIndexList8+ + +getIndexList(): Array<string> + +获取当前locale对应的索引列表。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<string> | 返回当前locale对应的索引列表。 | + +- 示例: + ``` + var indexUtil = i18n.getInstance("zh-CN"); + var indexList = indexUtil.getIndexList(); + ``` + + +### addLocale8+ + +addLocale(locale: string) + +将新的locale对应的索引加入当前索引列表。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | + +- 示例: + ``` + var indexUtil = i18n.getInstance("zh-CN"); + indexUtil.addLocale("en-US"); + ``` + + +### getIndex8+ + +getIndex(text: string): string + +获取text对应的索引。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | 待计算索引值的输入文本。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 输入文本对应的索引值。 | + +- 示例: + ``` + var indexUtil= i18n.getInstance("zh-CN"); + indexUtil.getIndex("hi"); // 返回h + ``` + + +## Character8+ + + +### isDigit8+ + +isDigit(char: string): boolean + +判断字符串char是否是数字。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是数字,返回false表示输入的字符不是数字。 | + +- 示例: + ``` + var isdigit = Character.isDigit("1"); // 返回true + ``` + + +### isSpaceChar8+ + +isSpaceChar(char: string): boolean + +判断字符串char是否是空格符。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是空格符,返回false表示输入的字符不是空格符。 | + +- 示例: + ``` + var isspacechar = Character.isSpaceChar("a"); // 返回false + ``` + + +### isWhitespace8+ + +isWhitespace(char: string): boolean + +判断字符串char是否是空白符。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是空白符,返回false表示输入的字符不是空白符。 | + +- 示例: + ``` + var iswhitespace = Character.isWhitespace("a"); // 返回false + ``` + + +### isRTL8+ + +isRTL(char: string): boolean + +判断字符串char是否是从右到左语言的字符。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是从右到左语言的字符,返回false表示输入的字符不是从右到左语言的字符。 | + +- 示例: + ``` + var isrtl = Character.isRTL("a"); // 返回false + ``` + + +### isIdeograph8+ + +isIdeograph(char: string): boolean + +判断字符串char是否是表意文字。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是表意文字,返回false表示输入的字符不是表意文字。 | + +- 示例: + ``` + var isideograph = Character.isIdeograph("a"); // 返回false + ``` + + +### isLetter8+ + +isLetter(char: string): boolean + +判断字符串char是否是字母。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是字母,返回false表示输入的字符不是字母。 | + +- 示例: + ``` + var isletter = Character.isLetter("a"); // 返回true + ``` + + +### isLowerCase8+ + +isLowerCase(char: string): boolean + +判断字符串char是否是小写字母。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是小写字母,返回false表示输入的字符不是小写字母。 | + +- 示例: + ``` + var islowercase = Character.isLowerCase("a"); // 返回true + ``` + + +### isUpperCase8+ + +isUpperCase(char: string): boolean + +判断字符串char是否是大写字母。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示输入的字符是大写字母,返回false表示输入的字符不是大写字母。 | + +- 示例: + ``` + var isuppercase = Character.isUpperCase("a"); // 返回false + ``` + + +### getType8+ + +getType(char: string): string + +获取输入字符串的一般类别值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | char | string | 是 | 输入字符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 输入字符的一般类别值。 | + +- 示例: + ``` + var type = Character.getType("a"); + ``` + + +## i18n.getLineInstance8+ + +getLineInstance(locale: string): BreakIterator + +获取一个用于断句的[BreakIterator](#breakiterator8)对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | 合法的locale值,例如zh-Hans-CN。生成的[BreakIterator](#breakiterator8)将按照locale所指定的区域的规则来进行断句。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [BreakIterator](#breakiterator8) | 用于进行断句的处理器。 | + +- 示例: + ``` + i18n.getLineInstance("en"); + ``` + + +## BreakIterator8+ + + +### setLineBreakText8+ + +setLineBreakText(text: string): void + +设置[BreakIterator](#breakiterator8)要处理的文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | 指定BreakIterator进行断句的文本。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + ``` + + +### getLineBreakText8+ + +getLineBreakText(): string + +获取[BreakIterator](#breakiterator8)当前处理的文本。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | BreakIterator对象正在处理的文本 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.getLineBreakText(); // Apple is my favorite fruit. + ``` + + +### current8+ + +current(): number + +获取[BreakIterator](#breakiterator8)对象在当前处理的文本中的位置。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | BreakIterator在当前所处理的文本中的位置。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + breakIter.current(); // 0 + ``` + + +### first8+ + +first(): number + +将[BreakIterator](#breakiterator8)对象设置到第一个可断句的分割点。第一个分割点总是被处理的文本的起始位置。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 被处理文本的第一个分割点的偏移量。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + breakIter.first(); // 0 + ``` + + +### last8+ + +last(): number + +将[BreakIterator](#breakiterator8)对象的位置设置到最后一个可断句的分割点。最后一个分割点总是被处理文本末尾的下一个位置。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 被处理的文本的最后一个分割点的偏移量 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.last(); // 27 + ``` + + +### next8+ + +next(index?: number): number + +如果index给出,并且index是一个正数将[BreakIterator](#breakiterator8)向后移动number个可断句的分割点,如果n是一个负数,向前移动相应个分割点。若index没有给出,则相当于index = 1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 否 | [BreakIterator](#breakiterator8)将要移动的分割点数,正数代表向后移动,负数代表向前移动。若index没有给出,则按照index=1处理。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回移动了index个分割点后,当前[BreakIterator](#breakiterator8)在文本中的位置。若移动index个分割点后超出了所处理的文本的长度范围,返回-1。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.first(); // 0 + iterator.next(); // 6 + iterator.next(10); // -1 + ``` + + +### previous8+ + +previous(): number + +将[BreakIterator](#breakiterator8)移动到前一个分割点处。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回移动到前一个分割点后,当前[BreakIterator](#breakiterator8)在文本中的位置。若移动index个分割点后超出了所处理的文本的长度范围,返回-1。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.first(); // 0 + iterator.next(3); // 12 + iterator.previous(); // 9 + ``` + + +### following8+ + +following(offset: number): number + +将[BreakIterator](#breakiterator8)设置到由offset指定的位置的后面一个分割点。返回移动后[BreakIterator](#breakiterator8)的位置。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | offset | number | 是 | 将[BreakIterator](#breakiterator8)对象的位置设置到由offset所指定的位置的下一个分割点。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回[BreakIterator](#breakiterator8)移动后的位置,如果由offset所指定的位置的下一个分割点超出了文本的范围则返回-1。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.following(0); // 6 + iterator.following(100); // -1 + iterator.current(); // 27 + ``` + + +### isBoundary8+ + +isBoundary(offset: number): boolean + +如果offset所指定的文本位置是一个分割点,那么返回true,否则返回false。如果返回true, 将[BreakIterator](#breakiterator8)对象设置到offset所指定的位置, 否则相当于调用[following](#following8)(offset)。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | offset | number | 是 | 指定需要进行判断的位置 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果是一个分割点返回true, 否则返回false。 | + +- 示例: + ``` + iterator = I18n.getLineInstance("en"); + iterator.setLineBreakText("Apple is my favorite fruit."); + iterator.isBoundary(0); // true; + iterator.isBoundary(5); // false; + ``` + + +## i18n.is24HourClock + +is24HourClock(): boolean + +判断系统时间是否为24小时制。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,表示系统24小时开关开启;返回false,表示系统24小时开关关闭。 | + +- 示例: + ``` + var is24HourClock = i18n.is24HourClock(); + ``` + + +## i18n.set24HourClock + +set24HourClock(option: boolean): boolean + +修改系统时间的24小时制设置。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | option | boolean | 是 | option为true,表示开启系统24小时制开关;返回false,表示关闭系统24小时开关。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,表示修改成功;返回false,表示修改失败。 | + +- 示例: + ``` + // 将系统时间设置为24小时制 + var success = I18n.set24HourClock(true); + ``` + + +## i18n.addPreferredLanguage + +addPreferredLanguage(language: string, index?: number): boolean + +在系统偏好语言列表中的指定位置添加偏好语言。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | language | string | 是 | 待添加的偏好语言。 | + | index | number | 否 | 偏好语言的添加位置。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,表示添加成功;返回false,表示添加失败。 | + +- 示例: + ``` + // 将语言zh-CN添加到系统偏好语言列表中 + var language = 'zh-CN'; + var index = 0; + var success = i18n.addPreferredLanguage(language, index); + ``` + + +## i18n.removeDisplayLanguage + +removeDisplayLanguage(index: number): boolean + +删除系统偏好语言列表中指定位置的偏好语言。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 待删除偏好语言在系统偏好语言列表中的位置。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,表示删除成功;返回false,表示删除失败。 | + +- 示例: + ``` + // 删除系统偏好语言列表中的第一个偏好语言 + var index = 0; + var success = i18n.removePreferredLanguage(index); + ``` + + +## i18n.getPreferredLanguageList + +getPreferredLanguageList(): Array + +获取系统偏好语言列表。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array | 系统偏好语言列表。 | + +- 示例: + ``` + var preferredLanguageList = i18n.getPreferredLanguageList(); + ``` + + +## i18n.getFirstPreferredLanguage + +getFirstPreferredLanguage(): string + +获取与Hap资源最佳匹配的偏好语言。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | Hap资源最佳匹配的偏好语言。 | + +- 示例: + ``` + var firstPreferredLanguage = i18n.getFirstPreferredLanguage(); + ``` \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..85115ce55b4bcd3554cf15efd05340f446438758 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" @@ -0,0 +1,649 @@ +--- +title: 国际化(Intl) +permalink: /pages/010c010203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 国际化-Intl + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> +> - Intl模块包含国际化能力基础接口(在ECMA 402中定义)。 + + +## 导入模块 + +``` +import Intl from '@ohos.intl'; +``` + + +## 权限列表 + +无 + + +## Locale + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| language | string | 是 | 否 | 与区域设置关联的语, 如:zh。 | +| script | string | 是 | 否 | 语言的书写方式,如:Hans。 | +| region | string | 是 | 否 | 与区域设置相关的地区,如:CN。 | +| baseName | string | 是 | 否 | Locale的基本核心信息(由语言脚本与地区组成),如:zh-Hans-CN。 | +| caseFirst | string | 是 | 否 | 区域的整理规则是否考虑大小写,取值包括:"upper", "lower", "false"。 | +| calendar | string | 是 | 否 | 区域的日历信息,取值包括:"buddhist", "chinese", "coptic","dangi", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamic-umalqura", "islamic-tbla", "islamic-civil", "islamic-rgsa", "iso8601", "japanese", "persian", "roc", "islamicc"。 | +| collation | string | 是 | 否 | 区域的排序规则,取值包括:"big5han", "compat", "dict", "direct", "ducet", "eor", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan", "zhuyin"。 | +| hourCycle | string | 是 | 否 | 区域的时制信息,取值包括:"h12", "h23", "h11", "h24"。 | +| numberingSystem | string | 是 | 否 | 区域使用的数字系统,取值包括:"adlm", "ahom", "arab", "arabext", "bali", "beng", "bhks", "brah", "cakm", "cham", "deva", "diak", "fullwide", "gong", "gonm", "gujr", "guru", "hanidec", "hmng", "hmnp", "java", "kali", "khmr", "knda", "lana", "lanatham", "laoo", "latn", "lepc", "limb", "mathbold", "mathdbl", "mathmono", "mathsanb", "mathsans", "mlym", "modi", "mong", "mroo", "mtei", "mymr", "mymrshan", "mymrtlng", "newa", "nkoo", "olck", "orya", "osma", "rohg", "saur", "segment", "shrd", "sind", "sinh", "sora", "sund", "takr", "talu", "tamldec", "telu", "thai", "tibt", "tirh", "vaii", "wara", "wcho"。 | +| numeric | boolean | 是 | 否 | 是否对数字字符具有特殊的排序规则处理。 | + + +### constructor + +constructor(locale: string, options?: options) + +创建区域对象 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | + | options | options | 否 | 用于创建区域对象的选项。 | + +- 示例: + ``` + var locale = new Intl.Locale("zh-CN"); + ``` + + +### toString + +toString(): string + +将区域信息转换为字符串 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 字符串形式的区域信息。 | + +- 示例: + ``` + var locale = new Intl.Locale("zh-CN"); + locale.toString(); + ``` + + +### maximize + +maximize(): Locale + +最大化区域信息,若缺少脚本与地区信息,则补齐。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Locale](#locale) | 最大化后的区域对象。 | + +- 示例: + ``` + var locale = new Intl.Locale("zh-CN"); + locale.maximize(); + ``` + + +### minimize + +minimize(): Locale + +最小化区域信息,若包含脚本与地区信息,则去除。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Locale](#locale) | 最小化后的区域对象。 | + +- 示例: + ``` + var locale = new Intl.Locale("zh-CN"); + locale.minimize(); + ``` + + +## DateTimeFormat + + +### constructor + +constructor(locale: string, options?: DateTimeOptions) + +创建时间日期格式化对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | + | options | [DateTimeOptions](#datetimeoptions) | 否 | 用于创建时间日期格式化的选项。 | + +- 示例: + ``` + var datefmt= new Intl.DateTimeFormat("zh-CN", { dateStyle: 'full', timeStyle: 'medium' }); + ``` + + +### constructor + +constructor(locales: Array<string>, options?: DateTimeOptions) + +创建时间日期格式化对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locales | Array<string> | 是 | 包含区域设置信息的字符串的数组。 | + | options | [DateTimeOptions](#datetimeoptions) | 否 | 用于创建时间日期格式化的选项。 | + +- 示例: + ``` + var datefmt= new Intl.DateTimeFormat(["ban", "zh"], { dateStyle: 'full', timeStyle: 'medium' }); + ``` + + +### format + +format(date: Date): string + +格式化时间日期字符串。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | date | Date | 是 | 时间日期对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 格式化后的时间日期字符串 | + +- 示例: + ``` + var date = new Date(2021, 11, 17, 3, 24, 0); + var datefmt = new Intl.DateTimeFormat("en-GB"); + datefmt.format(date); + ``` + + +### formatRange + +formatRange(fromDate: Date, toDate: Date): string + +格式化时间日期段字符串。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | startDate | Date | 是 | 起始的时间日期。 | + | endDate | Date | 是 | 结束的时间日期。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 格式化后的时间日期段字符串。 | + +- 示例: + ``` + var startDate = new Date(2021, 11, 17, 3, 24, 0); + var endDate = new Date(2021, 11, 18, 3, 24, 0); + var datefmt = new Intl.DateTimeFormat("en-GB"); + datefmt.formatRange(startDate, endDate); + ``` + + +### resolvedOptions + +resolvedOptions(): DateTimeOptions + +获取DateTimeFormat对象的格式化选项。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [DateTimeOptions](#datetimeoptions) | DateTimeFormat 对象的格式化选项。 | + +- 示例: + ``` + var datefmt = new Intl.DateTimeFormat("en-GB"); + datefmt.resolvedOptions(); + ``` + + +## DateTimeOptions + +表示时间日期格式化选项。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| locale | string | 是 | 否 | 区域参数, 如:zh-Hans-CN。 | +| dateStyle | string | 是 | 是 | 日期显示格式,取值包括:"long", "short", "medium", "full"。 | +| timeStyle | string | 是 | 是 | 时间显示格式,取值包括:"long", "short", "medium", "full"。 | +| hourCycle | string | 是 | 是 | 时制格式,取值包括:"h11", "h12", "h23", "h24"。 | +| timeZone | string | 是 | 是 | 使用的时区(合法的IANA时区ID)。 | +| numberingSystem | string | 是 | 是 | 数字系统,取值包括:"adlm", "ahom", "arab", "arabext", "bali", "beng", "bhks", "brah", "cakm", "cham", "deva", "diak", "fullwide", "gong", "gonm", "gujr", "guru", "hanidec", "hmng", "hmnp", "java", "kali", "khmr", "knda", "lana", "lanatham", "laoo", "latn", "lepc", "limb", "mathbold", "mathdbl", "mathmono", "mathsanb", "mathsans", "mlym", "modi", "mong", "mroo", "mtei", "mymr", "mymrshan", "mymrtlng", "newa", "nkoo", "olck", "orya", "osma", "rohg", "saur", "segment", "shrd", "sind", "sinh", "sora", "sund", "takr", "talu", "tamldec", "telu", "thai", "tibt", "tirh", "vaii", "wara", "wcho"。 | +| hour12 | boolean | 是 | 是 | 是否使用12小时制。 | +| weekday | string | 是 | 是 | 工作日的显示格式,取值包括:"long", "short", "narrow"。 | +| era | string | 是 | 是 | 时代的显示格式,取值包括:"long", "short", "narrow"。 | +| year | string | 是 | 是 | 年份的显示格式,取值包括:"numeric", "2-digit"。 | +| month | string | 是 | 是 | 月份的显示格式,取值包括:"numeric", "2-digit", "long", "short", "narrow"。 | +| day | string | 是 | 是 | 日期的显示格式,取值包括:"numeric", "2-digit"。 | +| hour | string | 是 | 是 | 小时的显示格式,取值包括:"numeric", "2-digit"。 | +| minute | string | 是 | 是 | 分钟的显示格式,取值包括:"numeric", "2-digit"。 | +| second | string | 是 | 是 | 秒钟的显示格式,取值包括:"numeric", "2-digit"。 | +| timeZoneName | string | 是 | 是 | 时区名称的本地化表示。 | +| dayPeriod | string | 是 | 是 | 时段的显示格式,取值包括:"long", "short", "narrow"。 | +| localeMatcher | string | 是 | 是 | 要使用的区域匹配算法,取值包括:"lookup", "best fit"。 | +| formatMatcher | string | 是 | 是 | 要使用的格式匹配算法,取值包括:"basic", "best fit"。 | + + +## NumberFormat + + +### constructor + +constructor(locale: string, options?: NumberOptions) + +创建数字格式化对象。 + +参数: +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | +| options | [NumberOptions](#numberoptions) | 否 | 用于创建数字格式化的选项。 | + +- 示例: + ``` + var numfmt = new Intl.NumberFormat("en-GB", {style:'decimal', notation:"scientific"}); + ``` + + +### constructor + +constructor(locales: Array<string>, options?: NumberOptions) + +创建数字格式化对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locales | Array<string> | 是 | 包含区域设置信息的字符串的数组。 | + | options | [NumberOptions](#numberoptions) | 否 | 用于创建数字格式化的选项。 | + +- 示例: + ``` + var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); + ``` + + +### format + +format(number: number): string; + +格式化数字字符串。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | number | number | 是 | 数字对象 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 格式化后的数字字符串 | + + +- 示例: + ``` + var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); + numfmt.format(1223); + ``` + + +### resolvedOptions + +resolvedOptions(): NumberOptions + +获取NumberFormat 对象的格式化选项。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [NumberOptions](#numberoptions) | NumberFormat 对象的格式化选项。 | + + +- 示例: + ``` + var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); + numfmt.resolvedOptions(); + ``` + + +## NumberOptions + +表示设备支持的能力。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| locale | string | 是 | 否 | 区域参数, 如:"zh-Hans-CN"。 | +| currency | string | 是 | 是 | 货币单位, 如:"EUR","CNY","USD"等。 | +| currencySign | string | 是 | 是 | 货币单位的符号显示,取值包括: "symbol","narrowSymbol","code","name" 。 | +| currencyDisplay | string | 是 | 是 | 货币的显示方式,取值包括:"symbol", "narrowSymbol", "code", "name"。 | +| unit | string | 是 | 是 | 单位名称,如:"meter","inch",“hectare”等。 | +| unitDisplay | string | 是 | 是 | 单位的显示格式,取值包括:"long", "short", "medium"。 | +| unitUsage | string | 是 | 是 | 单位的使用场景,取值包括:"default", "area-land-agricult", "area-land-commercl", "area-land-residntl", "length-person", "length-person-small", "length-rainfall", "length-road", "length-road-small", "length-snowfall", "length-vehicle", "length-visiblty", "length-visiblty-small", "length-person-informal", "length-person-small-informal", "length-road-informal", "speed-road-travel", "speed-wind", "temperature-person", "temperature-weather", "volume-vehicle-fuel"。 | +| signDisplay | string | 是 | 是 | 数字符号的显示格式,取值包括:"auto", "never", "always", "expectZero"。 | +| compactDisplay | string | 是 | 是 | 紧凑型的显示格式,取值包括:"long", "short"。 | +| notation | string | 是 | 是 | 数字的格式化规格,取值包括:"standard", "scientific", "engineering", "compact"。 | +| localeMatcher | string | 是 | 是 | 要使用的区域匹配算法,取值包括:"lookup", "best fit"。 | +| style | string | 是 | 是 | 数字的显示格式,取值包括:"decimal", "currency", "percent", "unit"。 | +| numberingSystem | string | 是 | 是 | 数字系统,取值包括:"adlm", "ahom", "arab", "arabext", "bali", "beng", "bhks", "brah", "cakm", "cham", "deva", "diak", "fullwide", "gong", "gonm", "gujr", "guru", "hanidec", "hmng", "hmnp", "java", "kali", "khmr", "knda", "lana", "lanatham", "laoo", "latn", "lepc", "limb", "mathbold", "mathdbl", "mathmono", "mathsanb", "mathsans", "mlym", "modi", "mong", "mroo", "mtei", "mymr", "mymrshan", "mymrtlng", "newa", "nkoo", "olck", "orya", "osma", "rohg", "saur", "segment", "shrd", "sind", "sinh", "sora", "sund", "takr", "talu", "tamldec", "telu", "thai", "tibt", "tirh", "vaii", "wara", "wcho"。 | +| useGrouping | boolean | 是 | 是 | 是否分组显示。 | +| miniumumIntegerDigits | number | 是 | 是 | 表示要使用的最小整数位数,取值范围:1~21。 | +| miniumumFractionDigits | number | 是 | 是 | 表示要使用的最小分数位数,取值范围:0~20。 | +| maxiumumFractionDigits | number | 是 | 是 | 表示要使用的最大分数位数,取值范围:1~21。 | +| miniumumSignificantDigits | number | 是 | 是 | 表示要使用的最低有效位数,取值范围:1~21。 | +| maxiumumSignificantDigits | number | 是 | 是 | 表示要使用的最大有效位数,取值范围:1~21。 | + + +## Collator8+ + + +### constructor8+ + +constructor() + +创建排序对象。 + +- 示例: + ``` + var collator = new Intl.Collator(); + ``` + + +### constructor8+ + +constructor(locale: string | Array<string>, options?: CollatorOptions) + +创建排序对象。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locale | string\|Array<string> | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | + | options | [CollatorOptions](#collatoroptions) | 否 | 用于创建排序对象的选项。 | + +- 示例: + ``` + var collator = new Intl.Collator("zh-CN", {"localeMatcher": "lookup", "usage": "sort"}); + ``` + + +### compare8+ + +compare(first: string, second: string): number + +依据Collator的排序策略对两个字符串进行比较。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | first | string | 是 | 进行比较第一个字符串。 | + | second | string | 是 | 进行比较的第二个字符串。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 比较结果。当number为负数,表示first排序在second之前;当number为0,表示first与second排序相同;当number为正数,表示first排序在second之后。 | + +- 示例: + ``` + var collator = new Intl.Collator("zh-Hans"); + collator.compare("first", "second"); + ``` + + +### resolvedOptions8+ + +resolvedOptions(): CollatorOptions + +返回Collator对象的属性。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [CollatorOptions](#collatoroptions) | 返回的Collator对象的属性。 | + +- 示例: + ``` + var collator = new Intl.Collator("zh-Hans"); + var options = collator.resolvedOptions(); + ``` + + +## CollatorOptions8+ + +表示Collator可设置的属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| localeMatcher | string | 是 | 是 | locale匹配算法,取值范围:"best fit", "lookup"。 | +| usage | string | 是 | 是 | 比较的用途,取值范围:"sort", "search"。 | +| sensitivity | string | 是 | 是 | 表示字符串中的哪些差异会导致非零结果值,取值范围:"base", "accent", "case", "variant"。 | +| ignorePunctuation | boolean | 是 | 是 | 表示是否忽略标点符号,取值范围:true, false。 | +| collation | string | 是 | 是 | 排序规则,取值范围:"big5han", "compat", "dict", "direct", "ducet", "eor", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan", "zhuyin"。 | +| numeric | boolean | 是 | 是 | 是否使用数字排序,取值范围:true, false。 | +| caseFirst | string | 是 | 是 | 表示大写、小写的排序顺序,取值范围:"upper", "lower", "false"。 | + + +## PluralRules8+ + + +### constructor8+ + +constructor() + +创建PluralRules对象。 + +- 示例: + ``` + var pluralRules = new Intl.PluralRules(); + ``` + + +### constructor8+ + +constructor(locale: string | Array<string>, options?: PluralRulesOptions) + +创建PluralRules对象。 + +参数: +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| locale | string\|Array<string> | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | +| options | [PluralRulesOptions](#pluralrulesoptions) | 否 | 用于创建单复数对象的选项。 | + +- 示例: + ``` + var pluralRules= new Intl.PluraRules("zh-CN", {"localeMatcher": "lookup", "type": "cardinal"}); + ``` + + +### select8+ + +select(n: number): string + +返回一个字符串表示该数字的单复数类别。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | n | number | 是 | 待获取单复数类别的数字。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 单复数类别,取值包括:"zero","one","two", "few", "many", "others"。 | + +- 示例: + ``` + var pluralRules = new Intl.PluralRules("zh-Hans"); + pluralRules.select(1); + ``` + + +## PluralRulesOptions8+ + +表示PluralRules对象可设置的属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| localeMatcher | string | 是 | 是 | locale匹配算法,取值包括:"best fit", "lookup"。 | +| type | string | 是 | 是 | 排序的类型,取值包括:"cardinal", "ordinal"。 | +| minimumIntegerDigits | number | 是 | 是 | 表示要使用的最小整数位数,取值范围:1~21。 | +| minimumFractionDigits | number | 是 | 是 | 表示要使用的最小分数位数,取值范围:0~20。 | +| maximumFractionDigits | number | 是 | 是 | 表示要使用的最大分数位数,取值范围:1~21。 | +| minimumSignificantDigits | number | 是 | 是 | 表示要使用的最低有效位数,取值范围:1~21。 | +| maximumSignificantDigits | number | 是 | 是 | 表示要使用的最大有效位数,取值范围:1~21。 | + + +## RelativeTimeFormat8+ + + +### constructor8+ + +constructor() + +创建相对时间格式化对象。 + +- 示例: + ``` + var relativetimefmt = new Intl.RelativeTimeFormat(); + ``` + + +### constructor8+ + +constructor(locale: string | Array<string>, options?: RelativeTimeFormatInputOptions) + +创建相对时间格式化对象。 + +参数: +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| locale | string\|Array<string> | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | +| options | [RelativeTimeFormatInputOptions](#relativetimeformatinputoptions) | 否 | 用于创建相对时间格式化对象的选项。 | + +- 示例: + ``` + var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {"localeMatcher": "lookup", "numeric": "always", "style": "long"}); + ``` + + +### format8+ + +format(value: numeric, unit: string): string + +依据locale和格式化选项,对value和unit进行格式化。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | numeric | 是 | 相对时间格式化的数值。 | + | unit | string | 是 | 相对时间格式化的单位,取值包括:"year", "quarter", "month", "week", "day", "hour", "minute", "second"。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 格式化后的相对时间。 | + +- 示例: + ``` + var relativetimefmt = new Intl.RelativeTimeFormat("zh-CN"); + relativetimefmt.format(3, "quarter") + ``` + + +### formatToParts8+ + +formatToParts(value: numeric, unit: string): Array<Object> + +返回一个对象数组,表示可用于自定义区域设置格式的相对时间格式。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | numeric | 是 | 相对时间格式化的数值。 | + | unit | string | 是 | 相对时间格式化的单位,取值包括:"year", "quarter", "month", "week", "day", "hour", "minute", "second"。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<Object> | 返回可用于自定义区域设置格式的相对时间格式的对象数组。 | + +- 示例: + ``` + var relativetimefmt = new Intl.RelativeTimeFormat("en", {"numeric": "auto"}); + var parts = relativetimefmt.format(10, "seconds"); + ``` + + +### resolvedOptions8+ + +resolvedOptions(): RelativeTimeFormatResolvedOptions + +获取RelativeTimeFormat对象的格式化选项。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [RelativeTimeFormatResolvedOptions](#relativetimeformatresolvedoptions) | RelativeTimeFormat 对象的格式化选项。 | + +- 示例: + ``` + var relativetimefmt= new Intl.RelativeTimeFormat("en-GB"); + relativetimefmt.resolvedOptions(); + ``` + + +## RelativeTimeFormatInputOptions8+ + +表示RelativeTimeFormat对象可设置的属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| localeMatcher | string | 是 | 是 | locale匹配算法,取值包括:"best fit", "lookup"。 | +| numeric | string | 是 | 是 | 输出消息的格式,取值包括:"always", "auto"。 | +| style | string | 是 | 是 | 国际化消息的长度,取值包括:"long", "short", "narrow"。 | + + +## RelativeTimeFormatResolvedOptions8+ + +表示RelativeTimeFormat对象可设置的属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| locale | string | 是 | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | +| numeric | string | 是 | 是 | 输出消息的格式,取值包括:"always", "auto"。 | +| style | string | 是 | 是 | 国际化消息的长度,取值包括:"long", "short", "narrow"。 | +| numberingSystem | string | 是 | 是 | 使用的数字系统。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" index ffb85a376a34433de38ee691a5259849916eacd0..f6ce43738321ebc18fed6a6c09ac0e9fb1959910 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/01.\351\237\263\351\242\221\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 音频管理 -permalink: /pages/000b000200 +permalink: /pages/010c010301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 音频管理 @@ -20,11 +20,6 @@ import audio from '@ohos.multimedia.audio'; ``` -## 权限 - -无 - - ## getAudioManager getAudioManager(): AudioManager @@ -128,6 +123,7 @@ setVolume(volumeType: AudioVolumeType, volume: number, callback: AsyncCallback&l **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10, (err)=>{ if (err) { console.error('Failed to set the volume. ${err.message}'); @@ -159,6 +155,7 @@ setVolume(volumeType: AudioVolumeType, volume: number): Promise<void> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10).then(()=> console.log('Promise returned to indicate a successful volume setting.'); ) @@ -180,6 +177,7 @@ getVolume(volumeType: AudioVolumeType, callback: AsyncCallback<number>): v **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { console.error('Failed to obtain the volume. ${err.message}'); @@ -210,6 +208,7 @@ getVolume(volumeType: AudioVolumeType): Promise<number> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getVolume(audio.AudioVolumeType.MEDIA).then((value) => console.log('Promise returned to indicate that the volume is obtained.' + value); ) @@ -231,6 +230,7 @@ getMinVolume(volumeType: AudioVolumeType, callback: AsyncCallback<number>) **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getMinVolume(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { console.error('Failed to obtain the minimum volume. ${err.message}'); @@ -261,6 +261,7 @@ getMinVolume(volumeType: AudioVolumeType): Promise<number> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getMinVolume(audio.AudioVolumeType.MEDIA).then((value) => console.log('Promised returned to indicate that the minimum volume is obtained.' + value); ) @@ -282,6 +283,7 @@ getMaxVolume(volumeType: AudioVolumeType, callback: AsyncCallback<number>) **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { console.error('Failed to obtain the maximum volume. ${err.message}'); @@ -312,6 +314,7 @@ getMaxVolume(volumeType: AudioVolumeType): Promise<number> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA).then((data)=> console.log('Promised returned to indicate that the maximum volume is obtained.'); ) @@ -334,6 +337,7 @@ mute(volumeType: AudioVolumeType, mute: boolean, callback: AsyncCallback<void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.mute(audio.AudioVolumeType.MEDIA, true, (err) => { if (err) { console.error('Failed to mute the stream. ${err.message}'); @@ -366,6 +370,7 @@ mute(volumeType: AudioVolumeType, mute: boolean): Promise<void> ``` +var audioManager = audio.getAudioManager(); audioManager.mute(audio.AudioVolumeType.MEDIA, true).then(() => console.log('Promise returned to indicate that the stream is muted.'); ) @@ -388,6 +393,7 @@ isMute(volumeType: AudioVolumeType, callback: AsyncCallback<boolean>): voi **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isMute(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { console.error('Failed to obtain the mute status. ${err.message}'); @@ -419,6 +425,7 @@ isMute(volumeType: AudioVolumeType): Promise<boolean> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isMute(audio.AudioVolumeType.MEDIA).then((value) => console.log('Promise returned to indicate that the mute status of the stream is obtained.' + value); ) @@ -440,6 +447,7 @@ isActive(volumeType: AudioVolumeType, callback: AsyncCallback<boolean>): v **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isActive(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { console.error('Failed to obtain the active status of the stream. ${err.message}'); @@ -470,6 +478,7 @@ isActive(volumeType: AudioVolumeType): Promise<boolean> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isActive(audio.AudioVolumeType.MEDIA).then((value) => console.log('Promise returned to indicate that the active status of the stream is obtained.' + value); ) @@ -491,6 +500,7 @@ setRingerMode(mode: AudioRingMode, callback: AsyncCallback<void>): void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setRingerMode(audio.AudioRingMode.RINGER_MODE_NORMAL, (err) => { if (err) { console.error('Failed to set the ringer mode.​ ${err.message}'); @@ -521,6 +531,7 @@ setRingerMode(mode: AudioRingMode): Promise<void> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setRingerMode(audio.AudioRingMode.RINGER_MODE_NORMAL).then(() => console.log('Promise returned to indicate a successful setting of the ringer mode.'); ) @@ -542,6 +553,7 @@ getRingerMode(callback: AsyncCallback<AudioRingMode>): void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getRingerMode((err, value) => { if (err) { console.error('Failed to obtain the ringer mode.​ ${err.message}'); @@ -562,11 +574,12 @@ getRingerMode(): Promise<AudioRingMode> | 类型 | 说明 | | -------- | -------- | -| Promise<[AudioRingMode](#audioringmode7-)> | Promise回调返回系统的铃声模式。 | +| Promise<[AudioRingMode](#audioringmode)> | Promise回调返回系统的铃声模式。 | **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getRingerMode().then((value) => console.log('Promise returned to indicate that the ringer mode is obtained.' + value); ) @@ -589,6 +602,7 @@ setAudioParameter(key: string, value: string, callback: AsyncCallback<void> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setAudioParameter('PBits per sample', '8 bit', (err) => { if (err) { console.error('Failed to set the audio parameter. ${err.message}'); @@ -620,6 +634,7 @@ setAudioParameter(key: string, value: string): Promise<void> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setAudioParameter('PBits per sample', '8 bit').then(() => console.log('Promise returned to indicate a successful setting of the audio parameter.'); ) @@ -641,6 +656,7 @@ getAudioParameter(key: string, callback: AsyncCallback<string>): void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getAudioParameter('PBits per sample', (err, value) => { if (err) { console.error('Failed to obtain the value of the audio parameter. ${err.message}'); @@ -671,6 +687,7 @@ getAudioParameter(key: string): Promise<string> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getAudioParameter('PBits per sample').then((value) => console.log('Promise returned to indicate that the value of the audio parameter is obtained.' + value); ) @@ -691,6 +708,7 @@ getDevices(deviceFlag: DeviceFlag, callback: AsyncCallback<AudioDeviceDescrip **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ if (err) { console.error('Failed to obtain the device list. ${err.message}'); @@ -721,6 +739,7 @@ audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG).then((data)=> console.log('Promise returned to indicate that the device list is obtained.'); ) @@ -743,6 +762,7 @@ setDeviceActive(deviceType: DeviceType, active: boolean, callback: AsyncCallback **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setDeviceActive(audio.DeviceType.SPEAKER, true, (err)=> { if (err) { console.error('Failed to set the active status of the device. ${err.message}'); @@ -775,6 +795,7 @@ setDeviceActive(deviceType: DeviceType, active: boolean): Promise<void> ``` +var audioManager = audio.getAudioManager(); audioManager.setDeviceActive(audio.DeviceType.SPEAKER, true).then(()=> console.log('Promise returned to indicate that the device is set to the active status.'); ) @@ -784,7 +805,7 @@ audioManager.setDeviceActive(audio.DeviceType.SPEAKER, true).then(()=> isDeviceActive(deviceType: DeviceType, callback: AsyncCallback<boolean>): void -获取指定设备激活状态,使用callback方式返回异步结果。 +获取指定设备的激活状态,使用callback方式返回异步结果。 **参数:** @@ -796,6 +817,7 @@ isDeviceActive(deviceType: DeviceType, callback: AsyncCallback<boolean>): **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isDeviceActive(audio.DeviceType.SPEAKER, (err, value) => { if (err) { console.error('Failed to obtain the active status of the device. ${err.message}'); @@ -810,7 +832,7 @@ audioManager.isDeviceActive(audio.DeviceType.SPEAKER, (err, value) => { isDeviceActive(deviceType: DeviceType): Promise<boolean> -获取指定设备激活状态,使用promise方式返回异步结果。 +获取指定设备的激活状态,使用promise方式返回异步结果。 **参数:** @@ -827,6 +849,7 @@ isDeviceActive(deviceType: DeviceType): Promise<boolean> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isDeviceActive(audio.DeviceType.SPEAKER).then((value) => console.log('Promise returned to indicate that the active status of the device is obtained.' + value); ) @@ -848,6 +871,7 @@ setMicrophoneMute(mute: boolean, callback: AsyncCallback<void>): void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setMicrophoneMute(true, (err) => { if (err) { console.error('Failed to mute the microphone. ${err.message}'); @@ -878,6 +902,7 @@ setMicrophoneMute(mute: boolean): Promise<void> **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.setMicrophoneMute(true).then(() => console.log('Promise returned to indicate that the microphone is muted.'); ) @@ -898,6 +923,7 @@ isMicrophoneMute(callback: AsyncCallback<boolean>): void **示例:** ``` +var audioManager = audio.getAudioManager(); audioManager.isMicrophoneMute((err, value) => { if (err) { console.error('Failed to obtain the mute status of the microphone. ${err.message}'); @@ -923,6 +949,7 @@ isMicrophoneMute(): Promise<boolean> ``` +var audioManager = audio.getAudioManager(); audioManager.isMicrophoneMute().then((value) => console.log('Promise returned to indicate that the mute status of the microphone is obtained.', + value); ) diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\345\252\222\344\275\223\346\234\215\345\212\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\345\252\222\344\275\223\346\234\215\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..9de1a8a2d775f70890f1172b5ada516d8caef352 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\345\252\222\344\275\223\346\234\215\345\212\241.md" @@ -0,0 +1,725 @@ +--- +title: 媒体服务 +permalink: /pages/010c010302 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 媒体服务 + +媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。 + +媒体子系统包含了音视频相关媒体业务,提供以下常用功能: + +- 音频播放([AudioPlayer](#audioplayer)) +- 音频录制([AudioRecorder](#audiorecorder)) + +后续将提供以下功能:视频播放、视频录制、DataSource音视频播放、音视频编解码、容器封装解封装、媒体能力查询等功能。 + +## 导入模块 + +```js +import media from '@ohos.multimedia.media'; +``` + +## media.createAudioPlayer + +createAudioPlayer(): [AudioPlayer](#audioplayer) + +同步方式创建音频播放实例。 + +**返回值:** + +| 类型 | 说明 | +| --------------------------- | ------------------------------------------------------------ | +| [AudioPlayer](#audioplayer) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 | + +**示例:** + +```js +var audioPlayer = media.createAudioPlayer(); +``` + +## media.createAudioPlayerAsync8+ + +createAudioPlayerAsync(callback: AsyncCallback\<[AudioPlayer](#audioplayer)>): void + +异步方式创建音频播放实例。通过注册回调函数获取返回值。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------------------------ | ---- | ------------------------------ | +| callback | AsyncCallback<[AudioPlayer](#audioplayer)> | 是 | 异步创建音频播放实例回调方法。 | + +**示例:** + +```js +media.createAudioPlayerAsync((error, audio) => { + if (typeof(audio) != 'undefined') { + audioPlayer = audio; + console.info('audio createAudioPlayerAsync success'); + } else { + console.info(`audio createAudioPlayerAsync fail, error:${error.message}`); + } +}); +``` + +## media.createAudioPlayerAsync8+ + +createAudioPlayerAsync: Promise<[AudioPlayer](#audioplayer)> + +异步方式创建音频播放实例。通过Promise获取返回值。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------------------ | ----------------------------------- | +| Promise<[AudioPlayer](#audioplayer)> | 异步创建音频播放实例Promise返回值。 | + +**示例:** + +```js +function failureCallback(error) { + console.info(`audio failureCallback, error:${error.message}`); +} +function catchCallback(error) { + console.info(`audio catchCallback, error:${error.message}`); +} + +await media.createAudioPlayerAsync.then((audio) => { + if (typeof(audio) != 'undefined') { + audioPlayer = audio; + console.info('audio createAudioPlayerAsync success'); + } else { + console.info('audio createAudioPlayerAsync fail'); + } +}, failureCallback).catch(catchCallback); +``` + +## media.createAudioRecorder +createAudioRecorder(): AudioRecorder + +创建音频录制的实例来控制音频的录制。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------------- | ----------------------------------------- | +| [AudioRecorder](#audiorecorder) | 返回AudioRecorder类实例,失败时返回null。 | + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +``` + +## MediaErrorCode8+ + +媒体服务错误类型枚举 + +| 名称 | 值 | 说明 | +| -------------------------- | ---- | -------------------------------------- | +| MSERR_OK | 0 | 表示操作成功。 | +| MSERR_NO_MEMORY | 1 | 表示申请内存失败,系统可能无可用内存。 | +| MSERR_OPERATION_NOT_PERMIT | 2 | 表示无权限执行此操作。 | +| MSERR_INVALID_VAL | 3 | 表示传入入参无效。 | +| MSERR_IO | 4 | 表示发生IO错误。 | +| MSERR_TIMEOUT | 5 | 表示操作超时。 | +| MSERR_UNKNOWN | 6 | 表示未知错误。 | +| MSERR_SERVICE_DIED | 7 | 表示服务端失效。 | +| MSERR_INVALID_STATE | 8 | 表示在当前状态下,不允许执行此操作。 | +| MSERR_UNSUPPORTED | 9 | 表示在当前版本下,不支持此操作。 | + +## MediaType8+ + +媒体类型枚举 + +| 名称 | 值 | 说明 | +| ------------------- | ---- | ------------------ | +| MEDIA_TYPE_AUD | 0 | 表示音频。 | +| MEDIA_TYPE_VID | 1 | 表示视频。 | +| MEDIA_TYPE_SUBTITLE | 2 | 表示字幕:开发中。 | + +## CodecMimeType8+ + +Codec MIME类型枚举 + +| 名称 | 值 | 说明 | +| ------------ | ----------------- | ------------------------ | +| AUDIO_MPEG | "audio/mpeg" | 表示音频/mpeg类型。 | +| AUDIO_AAC | "audio/mp4a-latm" | 表示音频/mp4a-latm类型。 | +| AUDIO_VORBIS | "audio/vorbis" | 表示音频/vorbis类型。 | +| AUDIO_FLAC | "audio/flac" | 表示音频/flac类型。 | + +## MediaDescriptionKey8+ + +媒体信息描述枚举 + +| 名称 | 值 | 说明 | +| ------------------------ | --------------- | ------------------------------------------------------------ | +| MD_KEY_TRACK_INDEX | "track_index" | 表示轨道序号,其对应键值类型为number。 | +| MD_KEY_TRACK_TYPE | "track_type" | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。 | +| MD_KEY_CODEC_MIME | "codec_mime" | 表示codec_mime类型,其对应键值类型为string。 | +| MD_KEY_DURATION | "duration" | 表示媒体时长,其对应键值类型为number,单位为ms。 | +| MD_KEY_BITRATE | "bitrate" | 表示比特率,其对应键值类型为number,单位为bps。 | +| MD_KEY_WIDTH | "width" | 表示视频宽度,其对应键值类型为number,单位为像素。 | +| MD_KEY_HEIGHT | "height" | 表示视频高度,其对应键值类型为number,单位为像素。 | +| MD_KEY_FRAME_RATE | "frame_rate" | 表示视频帧率,其对应键值类型为number,单位为100fps。 | +| MD_KEY_AUD_CHANNEL_COUNT | "channel_count" | 表示声道数,其对应键值类型为number。 | +| MD_KEY_AUD_SAMPLE_RATE | "sample_rate" | 表示采样率,其对应键值类型为number,单位为HZ。 | + +## BufferingInfoType8+ + +缓存事件类型枚举 + +| 名称 | 值 | 说明 | +| ----------------- | ---- | -------------------------- | +| BUFFERING_START | 1 | 表示开始缓存。 | +| BUFFERING_END | 2 | 表示结束缓存。 | +| BUFFERING_PERCENT | 3 | 表示缓存百分比。 | +| CACHED_DURATION | 4 | 表示缓存时长,单位为毫秒。 | + +## AudioPlayer + +音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#media.createaudioplayer)或[createAudioPlayerAsync()](#media.createaudioplayerasync8)构建一个[AudioPlayer](#audioplayer)实例。 + +音频播放demo可参考:[音频播放开发指导](/pages/0108030102) + +### 属性 + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ----------- | ------------------------- | ---- | ---- | ------------------------------------------------------------ | +| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(mp4、aac、mp3、ogg)。
**支持路径示例**:
1、本地绝对路径:file:///data/data/ohos.xxx.xxx/files/test.mp4
![zh-cn_image_0000001164217678](/images/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png)
2、http网络播放路径:开发中
3、hls网络播放路径:开发中
4、fd类型播放:开发中
**注意事项**:
媒体素材需至少赋予读权限后,才可正常播放 | +| loop | boolean | 是 | 是 | 音频循环播放属性,设置为'true'表示循环播放。 | +| currentTime | number | 是 | 否 | 音频的当前播放位置。 | +| duration | number | 是 | 否 | 音频时长。 | +| state | [AudioState](#audiostate) | 是 | 否 | 音频播放的状态。 | + +### play + +play(): void + +开始播放音频资源,需在[dataLoad](#on('play' | 'pause' | 'stop' | 'reset' | 'dataload' | 'finish' | 'volumechange'))事件成功触发后,才能调用play方法。 + +**示例:** + +```js +audioPlayer.on('play', () => { //设置'play'事件回调 + console.log('audio play success'); +}); +audioPlayer.play(); +``` + +### pause + +pause(): void + +暂停播放音频资源。 + +**示例:** + +```js +audioPlayer.on('pause', () => { //设置'pause'事件回调 + console.log('audio pause success'); +}); +audioPlayer.pause(); +``` + +### stop + +stop(): void + +停止播放音频资源。 + +**示例:** + +```js +audioPlayer.on('stop', () => { //设置'stop'事件回调 + console.log('audio stop success'); +}); +audioPlayer.stop(); +``` + +### reset7+ + +reset(): void + +切换播放音频资源。 + +**示例:** + +```js +audioPlayer.on('reset', () => { //设置'reset'事件回调 + console.log('audio reset success'); +}); +audioPlayer.reset(); +``` + +### seek + +seek(timeMs: number): void + +跳转到指定播放位置。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | ------------------------------ | +| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒。 | + +**示例:** + +```js +audioPlayer.on('timeUpdate', (seekDoneTime) => { //设置'timeUpdate'事件回调 + if (typeof (seekDoneTime) == 'undefined') { + console.info('audio seek fail'); + return; + } + console.log('audio seek success. seekDoneTime: ' + seekDoneTime); +}); +audioPlayer.seek(30000); //seek到30000ms的位置 +``` + +### setVolume + +setVolume(vol: number): void + +设置音量。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | ------------------------------------------------------------ | +| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | + +**示例:** + +```js +audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调 + console.log('audio volumeChange success'); +}); +audioPlayer.setVolume(1); //设置音量到100% +``` + +### release + +release(): void + +释放音频资源。 + +**示例:** + +```js +audioPlayer.release(); +audioPlayer = undefined; +``` + +### getTrackDescription8+ + +getTrackDescription(callback: AsyncCallback>): void + +通过回调方式获取音频轨道信息。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------------------------------------------ | ---- | -------------------------- | +| callback | AsyncCallback> | 是 | 获取音频轨道信息回调方法。 | + +**示例:** + +```js +function printfDescription(obj) { + for (let item in obj) { + let property = obj[item]; + console.info('audio key is ' + item); + console.info('audio value is ' + property); + } +} + +audioPlayer.getTrackDescription((error, arrlist) => { + if (typeof (arrlist) != 'undefined') { + for (let i = 0; i < arrlist.length; i++) { + printfDescription(arrlist[i]); + } + } else { + console.log(`audio getTrackDescription fail, error:${error.message}`); + } +}); +``` + +### getTrackDescription8+ + +getTrackDescription(): Promise> + +通过Promise方式获取音频轨道信息。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------------------------------------ | ------------------------------- | +| Promise> | 获取音频轨道信息Promise返回值。 | + +**示例:** + +```js +function printfDescription(obj) { + for (let item in obj) { + let property = obj[item]; + console.info('audio key is ' + item); + console.info('audio value is ' + property); + } +} +function failureCallback(error) { + console.info(`audio failureCallback, error:${error.message}`); +} +function catchCallback(error) { + console.info(`audio catchCallback, error:${error.message}`); +} + +await audioPlayer.getTrackDescription.then((arrlist) => { + if (typeof (arrlist) != 'undefined') { + arrayDescription = arrlist; + } else { + console.log('audio getTrackDescription fail'); + } +}, failureCallback).catch(catchCallback); +for (let i = 0; i < arrayDescription.length; i++) { + printfDescription(arrayDescription[i]); +} +``` + +### on('bufferingUpdate')8+ + +on(type: 'bufferingUpdate', callback: (infoType: [BufferingInfoType](#bufferinginfotype8), value: number) => void): void + +开始订阅音频缓存更新事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | +| type | string | 是 | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。 | +| callback | (infoType: [BufferingInfoType](#bufferinginfotype8), value: number) => void | 是 | 音频缓存事件回调方法。
[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 | + +**示例:** + +```js +audioPlayer.on('bufferingUpdate', (infoType, value) => { + console.log('audio bufferingInfo type: ' + infoType); + console.log('audio bufferingInfo value: ' + value); +}); +``` + + ### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange') + +on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void + +开始订阅音频播放事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ---------- | ---- | ------------------------------------------------------------ | +| type | string | 是 | 播放事件回调类型,支持的事件包括:'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange'。
- 'play':完成[play()](#play)调用,音频开始播放,触发该事件。
- 'pause':完成[pause()](#pause)调用,音频暂停播放,触发该事件。
- 'stop':完成[stop()](#stop)调用,音频停止播放,触发该事件。
- 'reset':完成[reset()](#reset7)调用,播放器重置,触发该事件。
- 'dataLoad':完成音频数据加载后触发该事件,即src属性设置完成后触发该事件。
- 'finish':完成音频播放后触发该事件。
- 'volumeChange':完成[setVolume()](#setvolume)调用,播放音量改变后触发该事件。 | +| callback | () => void | 是 | 播放事件回调方法。 | + +**示例:** + +```js +let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 +audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + console.info('audio set source success'); + audioPlayer.play(); //开始播放,并触发'play'事件回调 +}); +audioPlayer.on('play', () => { //设置'play'事件回调 + console.info('audio play success'); + audioPlayer.seek(30000); //调用seek方法,并触发'timeUpdate'事件回调 +}); +audioPlayer.on('pause', () => { //设置'pause'事件回调 + console.info('audio pause success'); + audioPlayer.stop(); //停止播放,并触发'stop'事件回调 +}); +audioPlayer.on('reset', () => { //设置'reset'事件回调 + console.info('audio reset success'); + audioPlayer.release(); //释放播放实例资源 + audioPlayer = undefined; +}); +audioPlayer.on('timeUpdate', (seekDoneTime) => { //设置'timeUpdate'事件回调 + if (typeof(seekDoneTime) == "undefined") { + console.info('audio seek fail'); + return; + } + console.info('audio seek success, and seek time is ' + seekDoneTime); + audioPlayer.setVolume(0.5); //设置音量为50%,并触发'volumeChange'事件回调 +}); +audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调 + console.info('audio volumeChange success'); + audioPlayer.pause(); //暂停播放,并触发'pause'事件回调 +}); +audioPlayer.on('finish', () => { //设置'finish'事件回调 + console.info('audio play finish'); + audioPlayer.stop(); //停止播放,并触发'stop'事件回调 +}); +audioPlayer.on('error', (error) => { //设置'error'事件回调 + console.info(`audio error called, errName is ${error.name}`); + console.info(`audio error called, errCode is ${error.code}`); + console.info(`audio error called, errMessage is ${error.message}`); +}); +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp4'; //设置src属性,并触发'dataLoad'事件回调 +``` + +### on('timeUpdate') + +on(type: 'timeUpdate', callback: Callback\): void + +开始订阅音频播放[seek()](#seek)时间更新事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------- | ---- | ------------------------------------------------------------ | +| type | string | 是 | 播放事件回调类型,支持的事件包括:'timeUpdate'。
- 'timeUpdate':[seek()](#seek)调用完成,触发该事件。 | +| callback | Callback\ | 是 | 播放事件回调方法。回调方法入参为成功seek的时间。 | + +**示例:** + +```js +audioPlayer.on('timeUpdate', (seekDoneTime) => { //设置'timeUpdate'事件回调 + if (typeof (seekDoneTime) == 'undefined') { + console.info('audio seek fail'); + return; + } + console.log('audio seek success. seekDoneTime: ' + seekDoneTime); +}); +audioPlayer.seek(30000); //seek到30000ms的位置 +``` + +### on('error') + +on(type: 'error', callback: ErrorCallback): void + +开始订阅音频播放错误事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------- | ---- | ------------------------------------------------------------ | +| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。
- 'error':音频播放中发生错误,触发该事件。 | +| callback | ErrorCallback | 是 | 播放错误事件回调方法。 | + +**示例:** + +```js +audioPlayer.on('error', (error) => { //设置'error'事件回调 + console.info(`audio error called, errName is ${error.name}`); //打印错误类型名称 + console.info(`audio error called, errCode is ${error.code}`); //打印错误码 + console.info(`audio error called, errMessage is ${error.message}`);//打印错误类型详细描述 +}); +audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 +``` + +## AudioState + +音频播放的状态机。可通过state属性获取当前状态。 + +| 名称 | 类型 | 描述 | +| ------------------ | ------ | -------------- | +| idle | string | 音频播放空闲。 | +| playing | string | 音频正在播放。 | +| paused | string | 音频暂停播放。 | +| stopped | string | 音频播放停止。 | +| error8+ | string | 错误状态。 | + +## MediaDescription8+ + +### [key : string] : any + +通过key-value方式获取媒体信息 + +| 名称 | 类型 | 说明 | +| ----- | ------ | ------------------------------------------------------------ | +| key | string | 通过key值获取对应的value。key值具体可见[MediaDescriptionKey](#mediadescriptionkey8)。 | +| value | any | 对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey](#mediadescriptionkey8)的描述信息。 | + +**示例:** + +```js +function printfItemDescription(obj, key) { + let property = obj[key]; + console.info('audio key is ' + key); + console.info('audio value is ' + property); +} + +audioPlayer.getTrackDescription((error, arrlist) => { + if (typeof (arrlist) != 'undefined') { + for (let i = 0; i < arrlist.length; i++) { + printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值 + } + } else { + console.log(`audio getTrackDescription fail, error:${error.message}`); + } +}); +``` + +## AudioRecorder + +音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorder)构建一个AudioRecorder实例。 + +### prepare + +prepare(config: AudioRecorderConfig): void + +录音准备。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ | +| config | [AudioRecorderConfig](#audiorecorderconfig) | 是 | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数等。 | + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +let audioRecorderConfig = { + audioEncoder : AAC_LC , + audioEncodeBitRate : 22050, + audioSampleRate : 22050, + numberOfChannels : 2, + format : AAC_ADTS, + uri : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.m4a', +} +audiorecorder.prepare(audioRecorderConfig) +``` + + +### start + +start(): void + +开始录音。 + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +audiorecorder.start(); +``` + +### stop + +stop(): void + +停止录音。 + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +audiorecorder.stop(); +``` + +### release + +release(): void + +释放录音资源。 + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +audiorecorder.release(); +``` + +### reset + +reset(): void + +重置录音。 + +进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音配置项,才能再次进行录音。 + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +audiorecorder.reset(); +``` + +### on('prepare' | 'start' | 'stop' | 'release' | 'reset') + +on(type: 'prepare' | 'start' | 'stop' | 'release' | 'reset', callback: () => void): void + +开始订阅音频录制事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | ---- | ------------------------------------------------------------ | +| type | string | 是 | 录制事件回调类型,支持的事件包括:'prepare' \| 'start' \| 'stop' \| 'release' \| 'reset'。
- 'prepare' :音频录制准备完成后,触发该事件。
- 'start' :音频录制开始后,触发该事件。
- 'stop' :音频录制停止后,触发该事件。
- 'release' :音频录制相关资源释放后,触发该事件。
- 'reset':音频录制重置后,触发该事件。 | +| callback | function | 是 | 录制事件回调方法。 | + +**示例:** + +``` +var audiorecorder = media.createAudioRecorder(); +audiorecorder.on('prepare', () => { + console.log('Preparation succeeded.'); + audiorecorder.start(); +}); +``` + +### on('error') + +on(type: 'error', callback: ErrorCallback): void + +开始订阅音频录制错误事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------- | ---- | ------------------------------------------------------------ | +| type | string | 是 | 录制错误事件回调类型'error'。
- 'error':音频录制过程中发生错误,触发该事件。 | +| callback | ErrorCallback | 是 | 录制错误事件回调方法。 | + + +## AudioRecorderConfig + +表示音频的录音配置。 + +| 名称 | 参数类型 | 必填 | 说明 | +| ------------------ | --------------------------------------- | ---- | ------------------------------------------------------------ | +| audioEncoder | [AudioEncoder](#audioencoder) | 否 | 音频编码格式,默认设置为AAC_LC。 | +| audioEncodeBitRate | number | 否 | 音频编码比特率,默认值为48000。 | +| audioSampleRate | number | 否 | 音频采集采样率,默认值为48000。 | +| numberOfChannels | number | 否 | 音频采集声道数,默认值为2。 | +| format | [AudioOutputFormat](#audiooutputformat) | 否 | 音量输出封装格式,默认设置为MPEG_4。 | +| uri | string | 是 | 音频输出URI。支持:
1. 文件的绝对路径:file:///data/data/ohos.xxx.xxx/cache/test.mp4![zh-cn_image_0000001164217678](/images/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png)
2. 文件的fd路径:file://1 (fd number) | + + +## AudioEncoder + +表示音频编码格式的枚举。 + +| 名称 | 默认值 | 说明 | +| ------ | ------ | ------------------------------------------------------------ | +| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。 | + + +## AudioOutputFormat + +表示音频封装格式的枚举。 + +| 名称 | 默认值 | 说明 | +| -------- | ------ | ------------------------------------------------------------ | +| MPEG_4 | 2 | 封装为MPEG-4格式。 | +| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 | \ No newline at end of file diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\345\256\211\345\205\250/01.\347\224\250\346\210\267\350\256\244\350\257\201.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\345\256\211\345\205\250/01.\347\224\250\346\210\267\350\256\244\350\257\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..1a8bb55a331bf8eff082c72bd8845fa19f90545d --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\345\256\211\345\205\250/01.\347\224\250\346\210\267\350\256\244\350\257\201.md" @@ -0,0 +1,357 @@ +--- +title: 用户认证 +permalink: /pages/010c010401 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 用户认证 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import userIAM_userAuth from '@ohos.userIAM.userAuth'; +``` + + +## 权限列表 + +ohos.permission.ACCESS_BIOMETRIC + + +## 完整示例 + +``` +import userIAM_userAuth from '@ohos.userIAM.userAuth'; + +export default { + startAuth() { + console.info("start auth"); + let tipCallback = (tip)=>{ + console.info("receive tip: errorCode(" + tip.errorCode + ") code(" + tip.tipCode + ") event(" + + tip.tipEvent + ") info(" + tip.tipInfo + ")"); + // 此处添加提示信息显示逻辑 + }; + let auth = userIAM_userAuth.getAuthenticator(); + auth.on("tip", tipCallback); + auth.execute("FACE_ONLY", "S2").then((code)=>{ + auth.off("tip", tipCallback); + console.info("auth success"); + // 此处添加认证成功逻辑 + }).catch((code)=>{ + auth.off("tip", tipCallback); + console.error("auth fail, code = " + code); + // 此处添加认证失败逻辑 + }); + }, + + checkAuthSupport() { + console.info("start check auth support"); + let auth = userIAM_userAuth.getAuthenticator(); + let checkCode = auth.checkAvailability("FACE_ONLY", "S2"); + if (checkCode == userIAM_userAuth.CheckAvailabilityResult.SUPPORTED) { + console.info("check auth support success"); + // 此处添加支持指定类型认证的逻辑 + } else { + console.error("check auth support fail, code = " + checkCode); + // 此处添加不支持指定类型认证的逻辑 + } + }, + + cancelAuth() { + console.info("start cancel auth"); + let auth = userIAM_userAuth.getAuthenticator(); + let cancelCode = auth.cancel(); + if (cancelCode == userIAM_userAuth.Result.SUCCESS) { + console.info("cancel auth success"); + } else { + console.error("cancel auth fail"); + } + } +} +``` + + +## userIAM_userAuth.getAuthenticator + +getAuthenticator(): Authenticator + +获取Authenticator对象,用于执行用户身份认证。6+ + +获取Authenticator对象,用于检测设备身份认证能力、执行和取消用户身份认证,获取认证过程中的提示信息。7+ + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Authenticator](#authenticator) | 认证器对象。 | + +- 示例: + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + ``` + + +## Authenticator + +认证器对象。 + + +### execute + +execute(type: string, level: string, callback: AsyncCallback<number>): void + +执行用户认证,使用callback方式作为异步方法。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 认证类型,当前只支持FACE_ONLY。
ALL为预留参数,当前版本暂不支持ALL类型的认证。 | + | level | string | 是 | 安全级别,对应认证的安全级别,有效值为S1(最低)、S2、S3、S4(最高)。
具备3D人脸识别能力的设备支持S3及以下安全级别的认证。
具备2D人脸识别能力的设备支持S2及以下安全级别的认证。 | + | callback | AsyncCallback<number> | 否 | 回调函数。 | + + callback返回值: + + | 类型 | 说明 | + | -------- | -------- | + | number | 表示认证结果,参见[AuthenticationResult](#authenticationresult)。 | + +- 示例: + ``` + authenticator.execute("FACE_ONLY", "S2", (code)=>{ + if (code == userIAM_userAuth.AuthenticationResult.SUCCESS) { + console.info("auth success"); + return; + } + console.error("auth fail, code = " + code); + }) + ``` + + +### execute + +execute(type:string, level:string): Promise<number> + +执行用户认证,使用promise方式作为异步方法。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 认证类型,当前只支持FACE_ONLY。
ALL为预留参数,当前版本暂不支持ALL类型的认证。 | + | level | string | 是 | 安全级别,对应认证的安全级别,有效值为S1(最低)、S2、S3、S4(最高)。
具备3D人脸识别能力的设备支持S3及以下安全级别的认证。
具备2D人脸识别能力的设备支持S2及以下安全级别的认证。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 返回携带一个number的Promise。number 为认证结果,参见[AuthenticationResult](#authenticationresult)。 | + +- 示例 + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + authenticator.execute("FACE_ONLY", "S2").then((code)=>{ + authenticator.off("tip", tipCallback); + console.info("auth success"); + }).catch((code)=>{ + authenticator.off("tip", tipCallback); + console.error("auth fail, code = " + code); + }); + ``` + + +### cancel7+ + +cancel(): number + +取消当前的认证流程。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回取消当前认证的结果,参见[Result](#result7)。 | + +- 示例: + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + let cancelCode = authenticator.cancel(); + if (cancelCode == userIAM_userAuth.Result.SUCCESS) { + console.info("cancel auth success"); + } else { + console.error("cancel auth fail"); + } + ``` + + +### checkAvailability7+ + +checkAvailability(type: AuthType, level: SecureLevel): number + +根据指定的认证类型、安全等级,检测当前设备是否支持相应的认证能力。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 认证类型,当前只支持FACE_ONLY。
ALL为预留参数,当前版本暂不支持ALL类型的认证。 | + | level | string | 是 | 安全级别,对应认证的安全级别,有效值为S1(最低)、S2、S3、S4(最高)。
具备3D人脸识别能力的设备支持S3及以下安全级别的认证。
具备2D人脸识别能力的设备支持S2及以下安全级别的认证。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回检测当前设备认证能力的结果,参见[CheckAvailabilityResult](#checkavailabilityresult7)。 | + +- 示例: + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + let checkCode = authenticator.checkAvailability("FACE_ONLY", "S2"); + if (checkCode == userIAM_userAuth.CheckAvailabilityResult.SUPPORTED) { + console.info("check auth support success"); + } else { + console.error("check auth support fail, code = " + checkCode); + } + ``` + + +### on7+ + +on(type: "tip", callback: Callback<Tip>) : void; + +订阅指定类型的事件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 事件类型,当前只支持"tip"。在认证服务发送提示信息给调用者时,会触发此事件。 | + | callback | Callback<Tip> | 是 | 事件发生时的回调,当前只支持以Tip为参数的回调函数。 | + +- 示例: + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + let tipCallback = (tip)=>{ + console.info("receive tip: errorCode(" + tip.errorCode + ") code(" + tip.tipCode +") event(" + + tip.tipEvent + ") info(" + tip.tipInfo + ")"); + }; + authenticator.on("tip", tipCallback); + ``` + + +### off7+ + +off(type: "tip", callback?: Callback<Tip>) : void; + +取消订阅指定类型的事件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 事件类型,当前只支持"tip"。 | + | callback | Callback<Tip> | 否 | 取消订阅的回调函数,当前只支持以Tip为参数的回调函数。如未指定此参数,同事件类型的所有回调都会被取消。 | + +- 示例: + ``` + let authenticator = userIAM_userAuth.getAuthenticator(); + let tipCallback = (tip)=>{ + console.info("receive tip: errorCode(" + tip.errorCode + ") code(" + tip.tipCode + ") event(" + + tip.tipEvent + ") info(" + tip.tipInfo + ")"); + }; + // 取消订阅指定回调 + authenticator.off("tip", tipCallback); + + // 取消订阅所有回调 + authenticator.off("tip"); + ``` + + +## AuthenticationResult + +表示认证结果的枚举。 + +| 名称 | 默认值 | 描述 | +| -------- | -------- | -------- | +| NO_SUPPORT | -1 | 设备不支持当前的认证方式。 | +| SUCCESS | 0 | 认证成功。 | +| COMPARE_FAILURE | 1 | 比对失败。 | +| CANCELED | 2 | 用户取消认证。 | +| TIMEOUT | 3 | 认证超时。 | +| CAMERA_FAIL | 4 | 开启相机失败。 | +| BUSY | 5 | 认证服务忙,请稍后重试。 | +| INVALID_PARAMETERS | 6 | 认证参数无效。 | +| LOCKED | 7 | 认证失败次数过多,已锁定。 | +| NOT_ENROLLED | 8 | 未录入认证凭据。 | +| GENERAL_ERROR | 100 | 其他错误。 | + + +## Tip7+ + +表示认证过程中提示信息的对象。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| errorCode | number | 是 | 是否成功获取到提示信息,参考[Result](#result7)。 | +| tipEvent | number | 是 | 认证提示事件, 参考[TipEvent](#tipevent7)。当前只支持RESULT、ACQUIRE。 | +| tipCode | number | 是 | 认证提示的事件提示码。
- 当tipEvent为RESULT时,含义为认证结果,参考[AuthenticationResult](#authenticationresult)。
- 当tipEvent为ACQUIRE时,含义为提示信息,参考[TipCode](#tipcode7)。 | +| tipInfo | string | 是 | 认证提示的事件提示码的描述信息。 | + + +## Result7+ + +表示执行结果的枚举。 + +| 名称 | 默认值 | 描述 | +| -------- | -------- | -------- | +| SUCCESS | 0 | 执行成功。 | +| FAILED | 1 | 执行失败。 | + + +## CheckAvailabilityResult7+ + +表示检测设备认证能力结果的枚举。 + +| 名称 | 默认值 | 描述 | +| -------- | -------- | -------- | +| SUPPORTED | 0 | 设备支持指定的认证类型和认证安全等级。 | +| AUTH_TYPE_NOT_SUPPORT | 1 | 设备不支持指定的认证类型。 | +| SECURE_LEVEL_NOT_SUPPORT | 2 | 设备不支持指定的认证安全等级。 | +| DISTRIBUTED_AUTH_NOT_SUPPORT | 3 | 设备不支持分布式认证。 | +| NOT_ENROLLED | 4 | 设备中认证凭据未录入。 | +| PARAM_NUM_ERROR | 5 | 参数个数错误。 | + + +## TipEvent7+ + +表示认证过程中提示事件的枚举。 + +| 名称 | 默认值 | 描述 | +| -------- | -------- | -------- | +| RESULT | 1 | 录入或认证结果。 | +| CANCEL | 2 | 录入或认证取消。 | +| ACQUIRE | 3 | 录入或认证过程中提示。 | +| BUSY | 4 | 录入或认证功能被占用。 | +| OUT_OF_MEM | 5 | 内存不足。 | +| FACE_ID | 6 | 人脸认证凭据索引号。 | + + +## TipCode7+ + +表示认证过程中提示码的枚举。 + +| 名称 | 默认值 | 描述 | +| -------- | -------- | -------- | +| FACE_AUTH_TIP_TOO_BRIGHT | 1 | 光线太强,获取的图像太亮。 | +| FACE_AUTH_TIP_TOO_DARK | 2 | 光线太暗,获取的图像太暗。 | +| FACE_AUTH_TIP_TOO_CLOSE | 3 | 人脸距离设备过近。 | +| FACE_AUTH_TIP_TOO_FAR | 4 | 人脸距离设备过远。 | +| FACE_AUTH_TIP_TOO_HIGH | 5 | 设备太高,仅获取到的人脸上部。 | +| FACE_AUTH_TIP_TOO_LOW | 6 | 设备太低,仅获取到的人脸下部。 | +| FACE_AUTH_TIP_TOO_RIGHT | 7 | 设备太靠右,仅获取到的人脸右部。 | +| FACE_AUTH_TIP_TOO_LEFT | 8 | 设备太靠左,仅获取到的人脸左部。 | +| FACE_AUTH_TIP_TOO_MUCH_MOTION | 9 | 在图像采集过程中,用户人脸移动太快。 | +| FACE_AUTH_TIP_POOR_GAZE | 10 | 没有正视摄像头。 | +| FACE_AUTH_TIP_NOT_DETECTED | 11 | 没有检测到人脸信息。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/02.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/01.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/02.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/01.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" index 5df6ab3569c9623e3f06192170a42c42be4df8d6..867c250167109e2c8d22c8b7c678384b19dc75a1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/02.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/01.\350\275\273\351\207\217\347\272\247\345\255\230\345\202\250.md" @@ -1,6 +1,6 @@ --- title: 轻量级存储 -permalink: /pages/000b000301 +permalink: /pages/010c010501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 轻量级存储 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" similarity index 88% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" index 1d59d1a2762ad5e32ce8a7e4466ff7695753863e..9a3af506451c8d538f3e70432ccc9a2966764119 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/02.\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 分布式数据管理 -permalink: /pages/000b000302 +permalink: /pages/010c010502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 分布式数据管理 @@ -28,7 +28,7 @@ import distributedData from '@ohos.data.distributedData'; ## distributedData.createKVManager -createKVManager\(config: KVManagerConfig, callback: AsyncCallback\): void +createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void 创建一个KVManager对象实例,用于管理数据库对象,并通过callback方式返回,此方法为异步方法。 @@ -75,7 +75,7 @@ createKVManager\(config: KVManagerConfig, callback: AsyncCallback\): bundleName : 'com.example.datamanagertest', userInfo : { userId : '0', - userType : SAME_USER_ID + userType : distributedData.UserType.SAME_USER_ID } } distributedData.createKVManager(kvManagerConfig, function (err, manager) { @@ -94,7 +94,7 @@ createKVManager\(config: KVManagerConfig, callback: AsyncCallback\): ## distributedData.createKVManager -createKVManager\(config: KVManagerConfig\): Promise +createKVManager(config: KVManagerConfig): Promise<KVManager> 创建一个KVManager对象实例,用于管理数据库对象,并通过Promise方式返回,此方法为异步方法。 @@ -149,7 +149,7 @@ createKVManager\(config: KVManagerConfig\): Promise bundleName : 'com.example.datamanagertest', userInfo : { userId : '0', - userType : SAME_USER_ID + userType : distributedData.UserType.SAME_USER_ID } } distributedData.createKVManager(kvManagerConfig).then((manager) => { @@ -265,7 +265,7 @@ createKVManager\(config: KVManagerConfig\): Promise ### getKVStore -getKVStore\(storeId: string, options: Options, callback: AsyncCallback\): void +getKVStore(storeId: string, options: Options, callback: AsyncCallback<T>): void 通过指定Options和storeId,创建并获取KVStore数据库,并通过callback方式返回,此方法为异步方法。 @@ -317,14 +317,15 @@ getKVStore\(storeId: string, options: Options, callback: Asy ``` let kvStore; + let kvManager; try { const options = { createIfMissing : true, encrypt : false, backup : false, autoSync : true, - kvStoreType : SINGLE_VERSION, - securityLevel : S2, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + securityLevel : distributedData.SecurityLevel.S2, }; kvManager.getKVStore('storeId', options, function (err, store) { if (err) { @@ -342,7 +343,7 @@ getKVStore\(storeId: string, options: Options, callback: Asy ### getKVStore -getKVStore\(storeId: string, options: Options\): Promise +getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> 通过指定Options和storeId,创建并获取KVStore数据库,并通过Promise方式返回,此方法为异步方法。 @@ -402,14 +403,15 @@ getKVStore\(storeId: string, options: Options\): Promise ``` let kvStore; + let kvManager; try { const options = { createIfMissing : true, encrypt : false, backup : false, autoSync : true, - kvStoreType : SINGLE_VERSION, - securityLevel : S2, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + securityLevel : distributedData.SecurityLevel.S2, }; kvManager.getKVStore('storeId', options).then((store) => { console.log("getKVStore success"); @@ -422,9 +424,9 @@ getKVStore\(storeId: string, options: Options\): Promise } ``` -### closeKVStore ### +### closeKVStore8+ ### -closeKVStore\(appId: string, storeId: string, kvStore: KVStore, callback: AsyncCallback\): void; +closeKVStore(appId: string, storeId: string, kvStore: KVStore, callback: AsyncCallback<void>): void; 通过storId的值关闭指定的kvStore数据库,并通过callback方式返回,此方法为异步方法。 @@ -483,22 +485,33 @@ closeKVStore\(appId: string, storeId: string, kvStore: KVStore, callback: AsyncC - 示例: ``` + let kvStore; + let kvManager; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { kvManager.getKVStore('storeId', options, async function (err, store) { console.log('getKVStore success'); kvStore = store; - kvManager.closeKVStore('appId', 'storeId', kvStore, function (err, data) { + await kvManager.closeKVStore('appId', 'storeId', kvStore, function (err, data) { console.log('closeKVStore success'); }); }); } catch (e) { - console.log('CloseKVStore e ' + e); + console.log('closeKVStore e ' + e); } ``` -### closeKVStore ### +### closeKVStore8+ ### -closeKVStore\(appId: string, storeId: string, kvStore: KVStore\): Promise; +closeKVStore(appId: string, storeId: string, kvStore: KVStore): Promise<void>; 通过kvStore的值关闭指定的kvStore数据库,并通过Promise方式返回,此方法为异步方法。 @@ -565,22 +578,38 @@ closeKVStore\(appId: string, storeId: string, kvStore: KVStore\): Promise - 示例: ``` - let KvStore; + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - kvManager.closeKVStore('appId', 'storId', KvStore).then(() => { - console.log('CloseKVStore success'); + kvManager.getKVStore('storeId', options).then(async (store) => { + console.log('getKVStore success'); + kvStore = store; + await kvManager.closeKVStore('appId', 'storeId', kvStore).then(() => { + console.log('closeKVStore success'); + }).catch((err) => { + console.log('closeKVStore err ' + JSON.stringify(err)); + }); }).catch((err) => { - console.log('CloseKVStore err ' + JSON.stringify(err)); + console.log('CloseKVStore getKVStore err ' + JSON.stringify(err)); }); } catch (e) { - console.log("An unexpected error occurred. Error:" + e); + console.log('closeKVStore e ' + e); } ``` -### deleteKVStore ### +### deleteKVStore8+ ### -deleteKVStore(appId: string, storeId: string, callback: AsyncCallback): void; +deleteKVStore(appId: string, storeId: string, callback: AsyncCallback<void>): void; 通过storeId的值删除指定的kvStore数据库,并通过callback方式返回,此方法为异步方法。 @@ -630,23 +659,33 @@ deleteKVStore(appId: string, storeId: string, callback: AsyncCallback): vo - 示例: ``` - let KvStore; + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - kvManager.deleteKVStore('appId', 'storeId', function (err, data) { - if (err){ + kvManager.getKVStore('store', options, async function (err, store) { + console.log('getKVStore success'); + kvStore = store; + await kvManager.deleteKVStore('appId', 'storeId', function (err, data) { console.log('deleteKVStore success'); - return; - } - console.log("deleteKVStore success"); + }); }); } catch (e) { - console.log("An unexpected error occurred. Error:" + e); + console.log('DeleteKVStore e ' + e); } ``` -### deleteKVStore ### +### deleteKVStore8+ ### -deleteKVStore\(appId: string, storeId: string\): Promise; +deleteKVStore(appId: string, storeId: string): Promise<void>; 通过storeId的值删除指定的kvStore数据库,并通过Promise方式返回,此方法为异步方法。 @@ -704,22 +743,38 @@ deleteKVStore\(appId: string, storeId: string\): Promise; - 示例: ``` - let KvStore; + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - kvManager.deleteKVStore('appId', 'storId', KvStore).then(() => { - console.log('deleteKVStore success'); + kvManager.getKVStore('storId', options).then(async (store) => { + console.log('getKVStore success'); + kvStore = store; + await kvManager.deleteKVStore('appId', 'storeId').then(() => { + console.log('deleteKVStore success'); + }).catch((err) => { + console.log('deleteKVStore err ' + JSON.stringify(err)); + }); }).catch((err) => { - console.log('deleteKVStore err ' + JSON.stringify(err)); + console.log('getKVStore err ' + JSON.stringify(err)); }); } catch (e) { - console.log("An unexpected error occurred. Error:" + e); + console.log('deleteKVStore e ' + e); } ``` -### getAllKVStoreId ### +### getAllKVStoreId8+ ### -getAllKVStoreId(appId: string, callback: AsyncCallback): void; +getAllKVStoreId(appId: string, callback: AsyncCallback<string[]>): void; 获取所有通过getKvStore方法创建的且没有调用deleteKvStore方法删除的KvStore数据库的storeId,并通过callback方式返回,此方法为异步方法。 @@ -760,9 +815,10 @@ getAllKVStoreId(appId: string, callback: AsyncCallback): void; - 示例: ``` + let kvManager; try { kvManager.getAllKVStoreId('appId', function (err, data) { - console.log('GetAllKVStoreId getAllKVStoreId success'); + console.log('GetAllKVStoreId success'); console.log('GetAllKVStoreId size = ' + data.length); }); } catch (e) { @@ -771,9 +827,9 @@ getAllKVStoreId(appId: string, callback: AsyncCallback): void; ``` -### getAllKVStoreId ### +### getAllKVStoreId8+ ### -getAllKVStoreId\(appId: string\): Promise; +getAllKVStoreId(appId: string): Promise<string[]>; 获取所有通过getKvStore方法创建的且没有调用deleteKvStore方法删除的KvStore数据库的storeId,并通过Promise方式返回,此方法为异步方法。 @@ -822,30 +878,26 @@ getAllKVStoreId\(appId: string\): Promise; - 示例: ``` - let KvStore; + let kvManager; try { - kvManager.getKVStore('storId', options).then(async (store) => { - console.log('getKVStore success'); - kvStore = store; - kvManager.getAllKVStoreId('appId').then((data) => { - console.log('getAllKVStoreId success'); - console.log('GetAllKVStoreId size = ' + data.length); - console.log('GetAllKVStoreId data[0] = ' + data[0]); - }); + console.log('GetAllKVStoreId'); + kvManager.getAllKVStoreId('apppId').then((data) => { + console.log('getAllKVStoreId success'); + console.log('size = ' + data.length); }).catch((err) => { - console.log('getKVStore err ' + JSON.stringify(err)); + console.log('getAllKVStoreId err ' + JSON.stringify(err)); }); - } catch (e) { - console.log("An unexpected error occurred. Error:" + e); + } catch(e) { + console.log('getAllKVStoreId e ' + e); } ``` -### on ### +### on8+ ### -on\(event: 'distributedDataServiceDie', deathCallback: Callback\): void; +on(event: 'distributedDataServiceDie', deathCallback: Callback<void>): void; -订阅设备状态变更通知,并通过callback方式返回,此方法为异步方法。 +订阅服务状态变更通知,并通过callback方式返回,此方法为同步方法。 - 参数: @@ -864,7 +916,7 @@ on\(event: 'distributedDataServiceDie', deathCallback: Callback\): void;

'distributedDataServiceDie'

-

设备状态改变时触发的事件名。

+

服务状态改变时触发的事件名。

deathCallback

@@ -881,27 +933,25 @@ on\(event: 'distributedDataServiceDie', deathCallback: Callback\): void; - 示例 ``` - let KvStore; + let kvManager; try { - it('KVManagerOn', 0, function (done) { - console.log('KVManagerOn'); - const deathCallback = function () { - console.log('death callback call'); - } - kvManager.on('distributedDataServiceDie', deathCallback); - kvManager.off('distributedDataServiceDie', deathCallback); - }); + + console.log('KVManagerOn'); + const deathCallback = function () { + console.log('death callback call'); + } + kvManager.on('distributedDataServiceDie', deathCallback); } catch (e) { console.log("An unexpected error occurred. Error:" + e); } ``` -### off ### +### off8+ ### -off\(event: 'distributedDataServiceDie', deathCallback: Callback\): void; +off(event: 'distributedDataServiceDie', deathCallback?: Callback<void>): void; -取消订阅设备状态变更通知,并通过callback方式返回,此方法为异步方法。 +取消订阅服务状态变更通知,并通过callback方式返回,此方法为同步方法。 - 参数: @@ -920,14 +970,14 @@ off\(event: 'distributedDataServiceDie', deathCallback: Callback\): void;

'distributedDataServiceDie'

-

设备状态改变时触发的事件名。

+

服务状态改变时触发的事件名。

deathCallback

Callback<void>

+

回调函数,取消设备状态改变时获取通知。

-## Schema ## - -表示数据库架构,可以创建 Schema 对象,并在创建或打开数据库时将其放置在 Option 中。 - -### constructor ### +## Schema8+ ## -constructor(); - -用于创建架构实例的构造函数。 - -- 示例 - - ``` - try { - let schema = new ddm.Schema(); - schema.root = new ddm.FieldNode(); - console.log("constructor: " + str); - } catch (e) {} - ``` +表示数据库模式,可以在创建或打开数据库时创建 Schema 对象并将它们放入 Options 中。 -### toJsonString ### +### toJsonString8+ ### toJsonString():string; @@ -1222,62 +1255,24 @@ toJsonString():string; - 示例 ``` + import ddm from '@ohos.data.distributedData'; try { let schema = new ddm.Schema(); const str = schema.toJsonString(); - schema.root = new ddm.FieldNode(); - const node = schema.root; console.log("schema: " + str); - } catch (e) {} + } catch (e) { + console.log("toJsonString " + e); + } ``` -## FieldNode ## +## FieldNode8+ ## 表示 Schema 实例的节点,提供定义存储在数据库中的值的方法。 -### constructor ### - -constructor\(name: string\); - -用于创建具有指定字段的 FieldNode 实例的构造函数。 - -- 参数: - - - - - - - - - - - - -

参数名

-

类型

-

必填

-

说明

-

child

-

string

-

-

指定字段。

-
- -- 示例 - - ``` - try { - let node = new ddm.FieldNode("name"); - console.log("constructor: " + str); - } catch (e) {} - ``` - +### appendChild8+ ### -### appendChild ### - -appendChild\(child: FieldNode\): boolean; +appendChild(child: FieldNode): boolean; 向这个 FieldNode 添加一个子节点。 @@ -1324,6 +1319,7 @@ appendChild\(child: FieldNode\): boolean; - 示例 ``` + import ddm from '@ohos.data.distributedData'; try { let node = new ddm.FieldNode("root"); let child1 = new ddm.FieldNode("child1"); @@ -1343,9 +1339,9 @@ appendChild\(child: FieldNode\): boolean; ``` -### toJson ### +### toJson8+ ### -toJson(\): string; +toJson(): string; 获取字段名称。 @@ -1369,23 +1365,25 @@ toJson(\): string; - 示例 ``` + import ddm from '@ohos.data.distributedData'; try { let node = new ddm.FieldNode("root"); let child = new ddm.FieldNode("child"); node.appendChild(child); + console.log("appendNode " + node.toJson()); } catch (e) { console.log("ToJson " + e); } ``` -## KvStoreResultSet ## +## KvStoreResultSet8+ ## -提供获取KvStore数据库结果集的方法,提供查询和移动数据读取位置的方法,在调用KvStoreResultSet的方法前,需要先通过DeviceKvStore 构建一个DeviceKvStore 实例。 +提供获取KvStore数据库结果集的方法,提供查询和移动数据读取位置的方法,在调用KvStoreResultSet的方法前,需要先通过KvStore 构建一个KvStore 实例。 -### getCount ### +### getCount8+ ### -getCount(\): number; +getCount(): number; 获取结果集中的行数。 @@ -1409,19 +1407,26 @@ getCount(\): number; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { - count = resultSet.getCount(); - console.log("getCount " + count); + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const count = resultSet.getCount(); + console.log("GetCount " + count); } catch (e) { - console.log("GetCount001 fail " + e); + console.log("GetCount fail " + e); } ``` -### getPosition ### +### getPosition8+ ### -getPosition(\): number; +getPosition(): number; 获取结果集中当前的读取位置。 @@ -1445,19 +1450,26 @@ getPosition(\): number; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const positon = resultSet.getPosition(); console.log("getPosition " + positon); } catch (e) { - console.log("GetPosition001 fail " + e); + console.log("GetPosition fail " + e); } ``` -### moveToFirst ### +### moveToFirst8+ ### -moveToFirst(\): boolean; +moveToFirst(): boolean; 将读取位置移动到第一行。 @@ -1481,8 +1493,15 @@ moveToFirst(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToFirst(); console.log("moveToFirst " + moved); } catch (e) { @@ -1491,9 +1510,9 @@ moveToFirst(\): boolean; ``` -### moveToLast ### +### moveToLast8+ ### -moveToLast(\): boolean; +moveToLast(): boolean; 将读取位置移动到最后一行。 @@ -1517,8 +1536,15 @@ moveToLast(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToLast(); console.log("moveToLast " + moved); } catch (e) { @@ -1527,9 +1553,9 @@ moveToLast(\): boolean; ``` -### moveToNext ### +### moveToNext8+ ### -moveToNext(\): boolean; +moveToNext(): boolean; 将读取位置移动到下一行。 @@ -1553,8 +1579,15 @@ moveToNext(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToNext(); console.log("moveToNext " + moved); } catch (e) { @@ -1563,9 +1596,9 @@ moveToNext(\): boolean; ``` -### moveToPrevious ### +### moveToPrevious8+ ### -moveToPrevious(\): boolean; +moveToPrevious(): boolean; 将读取位置移动到上一行。 @@ -1589,8 +1622,15 @@ moveToPrevious(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToPrevious(); console.log("moveToPrevious " + moved); } catch (e) { @@ -1599,9 +1639,9 @@ moveToPrevious(\): boolean; ``` -### move ### +### move8+ ### -move\(offset: number\): boolean; +move(offset: number): boolean; 将读取位置移动到当前位置的相对偏移量。 @@ -1647,8 +1687,15 @@ move\(offset: number\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.move(); console.log("move " + moved); } catch (e) { @@ -1657,9 +1704,9 @@ move\(offset: number\): boolean; ``` -### moveToPosition ### +### moveToPosition8+ ### -moveToPosition\(position: number\): boolean; +moveToPosition(position: number): boolean; 将读取位置从 0 移动到绝对位置。 @@ -1705,8 +1752,15 @@ moveToPosition\(position: number\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToPosition(); console.log("moveToPosition " + moved); } catch (e) { @@ -1715,9 +1769,9 @@ moveToPosition\(position: number\): boolean; ``` -### isFirst ### +### isFirst8+ ### -isFirst(\): boolean; +isFirst(): boolean; 检查读取位置是否为第一行。 @@ -1741,8 +1795,15 @@ isFirst(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.isFirst(); console.log("isFirst " + moved); } catch (e) { @@ -1751,9 +1812,9 @@ isFirst(\): boolean; ``` -### isLast ### +### isLast8+ ### -isLast(\): boolean; +isLast(): boolean; 检查读取位置是否为最后一行。 @@ -1777,8 +1838,15 @@ isLast(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.isLast(); console.log("isLast " + moved); } catch (e) { @@ -1787,9 +1855,9 @@ isLast(\): boolean; ``` -### isBeforeFirst ### +### isBeforeFirst8+ ### -isBeforeFirst(\): boolean; +isBeforeFirst(): boolean; 检查读取位置是否在第一行之前。 @@ -1813,8 +1881,15 @@ isBeforeFirst(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.isBeforeFirst(); console.log("isBeforeFirst " + moved); } catch (e) { @@ -1823,9 +1898,9 @@ isBeforeFirst(\): boolean; ``` -### isAfterLast ### +### isAfterLast8+ ### -isAfterLast(\): boolean; +isAfterLast(): boolean; 检查读取位置是否在最后一行之后。 @@ -1849,8 +1924,15 @@ isAfterLast(\): boolean; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.isAfterLast(); console.log("isAfterLast " + moved); } catch (e) { @@ -1859,9 +1941,9 @@ isAfterLast(\): boolean; ``` -### getEntry ### +### getEntry8+ ### -getEntry(\): Entry; +getEntry(): Entry; 获取键值对 @@ -1885,39 +1967,31 @@ getEntry(\): Entry; - 示例 ``` - let KvStoreResultSet; + let kvStore; try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); const moved = resultSet.moveToNext(); const entry = resultSet.getEntry(); - console.log("getEntry " + entry); + console.log("getEntry " + JSON.stringify(entry)); } catch (e) { console.log("getEntry fail " + e); } ``` -## Query ## +## Query 8+ ## 使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。 -### constructor ### - -constructor(); - -用于创建查询实例的构造函数。 - -- 示例 - - ``` - try { - let query= new ddm.Query() - console.log("constructor: " + str); - } catch (e) {} - ``` - -### reset ### +### reset8+ ### -reset(\): Query; +reset(): Query; 公共查询重置。 @@ -1941,9 +2015,8 @@ reset(\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.equalTo("key", "value"); console.log("query is " + query.getSqlLike()); query.reset(); @@ -1955,9 +2028,9 @@ reset(\): Query; ``` -### equalTo ### +### equalTo8+ ### -equalTo\(field: string, value: number|string|boolean\): Query; +equalTo(field: string, value: number|string|boolean): Query; 构造一个Query对象来查询具有指定字段的条目,其值等于指定的值。 @@ -2012,9 +2085,8 @@ equalTo\(field: string, value: number|string|boolean\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.equalTo("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2024,9 +2096,9 @@ equalTo\(field: string, value: number|string|boolean\): Query; ``` -### notEqualTo ### +### notEqualTo8+ ### -notEqualTo\(field: string, value: number|string|boolean\): Query; +notEqualTo(field: string, value: number|string|boolean): Query; 构造一个Query对象以查询具有指定字段且值不等于指定值的条目。 @@ -2081,9 +2153,8 @@ notEqualTo\(field: string, value: number|string|boolean\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2093,9 +2164,9 @@ notEqualTo\(field: string, value: number|string|boolean\): Query; ``` -### greaterThan ### +### greaterThan8+ ### -greaterThan\(field: string, value: number|string|boolean\): Query; +greaterThan(field: string, value: number|string|boolean): Query; 构造一个Query对象以查询具有大于指定值的指定字段的条目。 @@ -2150,9 +2221,8 @@ greaterThan\(field: string, value: number|string|boolean\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.greaterThan("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2162,9 +2232,9 @@ greaterThan\(field: string, value: number|string|boolean\): Query; ``` -### lessThan ### +### lessThan8+ ### -lessThan\(field: string, value: number|string\): Query; +lessThan(field: string, value: number|string): Query; 构造一个Query对象以查询具有小于指定值的指定字段的条目。 @@ -2219,9 +2289,8 @@ lessThan\(field: string, value: number|string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.lessThan("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2231,9 +2300,9 @@ lessThan\(field: string, value: number|string\): Query; ``` -### greaterThanOrEqualTo ### +### greaterThanOrEqualTo8+ ### -greaterThanOrEqualTo\(field: string, value: number|string\): Query; +greaterThanOrEqualTo(field: string, value: number|string): Query; 构造一个Query对象以查询具有指定字段且值大于或等于指定值的条目。 @@ -2288,9 +2357,8 @@ greaterThanOrEqualTo\(field: string, value: number|string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.greaterThanOrEqualTo("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2300,9 +2368,9 @@ greaterThanOrEqualTo\(field: string, value: number|string\): Query; ``` -### lessThanOrEqualTo ### +### lessThanOrEqualTo8+ ### -lessThanOrEqualTo\(field: string, value: number|string\): Query; +lessThanOrEqualTo(field: string, value: number|string): Query; 构造一个Query对象以查询具有指定字段且值小于或等于指定值的条目。 @@ -2357,9 +2425,8 @@ lessThanOrEqualTo\(field: string, value: number|string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.lessThanOrEqualTo("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2369,9 +2436,9 @@ lessThanOrEqualTo\(field: string, value: number|string\): Query; ``` -### isNull ### +### isNull8+ ### -isNull\(field: string\): Query; +isNull(field: string): Query; 构造一个Query对象以查询具有值为null的指定字段的条目。 @@ -2418,9 +2485,8 @@ isNull\(field: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.isNull("field"); console.log("query is " + query.getSqlLike()); query = null; @@ -2430,9 +2496,9 @@ isNull\(field: string\): Query; ``` -### inNumber ### +### inNumber8+ ### -inNumber\(field: string, valueList: number[\]\): Query; +inNumber(field: string, valueList: number[]): Query; 构造一个Query对象以查询具有指定字段的条目,其值在指定的值列表中。 @@ -2487,10 +2553,9 @@ inNumber\(field: string, valueList: number[\]\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); - query.inNumber("field", "valueList"); + let query = new distributedData.Query(); + query.inNumber("field", [0, 1]); console.log("query is " + query.getSqlLike()); query = null; } catch (e) { @@ -2499,9 +2564,9 @@ inNumber\(field: string, valueList: number[\]\): Query; ``` -### inString ### +### inString8+ ### -inString\(field: string, valueList: string[\]\): Query; +inString(field: string, valueList: string[]): Query; 构造一个Query对象以查询具有指定字段的条目,其值在指定的字符串值列表中。 @@ -2556,10 +2621,9 @@ inString\(field: string, valueList: string[\]\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); - query.inString("field", "valueList"); + let query = new distributedData.Query(); + query.inString("field", ['test1', 'test2']); console.log("query is " + query.getSqlLike()); query = null; } catch (e) { @@ -2568,9 +2632,9 @@ inString\(field: string, valueList: string[\]\): Query; ``` -### notInNumber ### +### notInNumber8+ ### -notInNumber\(field: string, valueList: number[\]\): Query; +notInNumber(field: string, valueList: number[]): Query; 构造一个Query对象以查询具有指定字段的条目,该字段的值不在指定的值列表中。 @@ -2625,10 +2689,9 @@ notInNumber\(field: string, valueList: number[\]\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); - query.notInNumber("field", "valueList"); + let query = new distributedData.Query(); + query.notInNumber("field", [0, 1]); console.log("query is " + query.getSqlLike()); query = null; } catch (e) { @@ -2637,9 +2700,9 @@ notInNumber\(field: string, valueList: number[\]\): Query; ``` -### notInString ### +### notInString8+ ### -notInString\(field: string, valueList: string[\]\): Query; +notInString(field: string, valueList: string[]): Query; 构造一个Query对象以查询具有指定字段且值不在指定字符串值列表中的条目。 @@ -2694,10 +2757,9 @@ notInString\(field: string, valueList: string[\]\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); - query.notInString("field", "valueList"); + let query = new distributedData.Query(); + query.notInString("field", ['test1', 'test2']); console.log("query is " + query.getSqlLike()); query = null; } catch (e) { @@ -2706,9 +2768,9 @@ notInString\(field: string, valueList: string[\]\): Query; ``` -### like ### +### like8+ ### -like\(field: string, value: string\): Query; +like(field: string, value: string): Query; 构造一个Query对象以查询具有与指定字符串值相似的指定字段的条目。 @@ -2763,9 +2825,8 @@ like\(field: string, value: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.like("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2775,9 +2836,9 @@ like\(field: string, value: string\): Query; ``` -### unlike ### +### unlike8+ ### -unlike\(field: string, value: string\): Query; +unlike(field: string, value: string): Query; 构造一个Query对象以查询具有与指定字符串值不相似的指定字段的条目。 @@ -2832,9 +2893,8 @@ unlike\(field: string, value: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.unlike("field", "value"); console.log("query is " + query.getSqlLike()); query = null; @@ -2844,9 +2904,9 @@ unlike\(field: string, value: string\): Query; ``` -### and ### +### and8+ ### -and(\): Query; +and(): Query; 构造一个带有与条件的查询对象。 @@ -2870,9 +2930,8 @@ and(\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value1"); query.and(); query.notEqualTo("field", "value2"); @@ -2884,9 +2943,9 @@ and(\): Query; ``` -### or ### +### or8+ ### -or(\): Query; +or(): Query; 构造一个带有或条件的Query对象。 @@ -2910,9 +2969,8 @@ or(\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value1"); query.or(); query.notEqualTo("field", "value2"); @@ -2924,9 +2982,9 @@ or(\): Query; ``` -### orderByAsc ### +### orderByAsc8+ ### -orderByAsc\(field: string\): Query; +orderByAsc(field: string): Query; 构造一个Query对象,将查询结果按升序排序。 @@ -2974,9 +3032,8 @@ orderByAsc\(field: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value"); query.orderByAsc("field"); console.log("query is " + query.getSqlLike()); @@ -2987,9 +3044,9 @@ orderByAsc\(field: string\): Query; ``` -### orderByDesc ### +### orderByDesc8+ ### -orderByDesc\(field: string\): Query; +orderByDesc(field: string): Query; 构造一个Query对象,将查询结果按降序排序。 @@ -3036,9 +3093,8 @@ orderByDesc\(field: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value"); query.orderByDesc("field"); console.log("query is " + query.getSqlLike()); @@ -3049,9 +3105,9 @@ orderByDesc\(field: string\): Query; ``` -### limit ### +### limit8+ ### -limit\(total: number, offset: number\): Query; +limit(total: number, offset: number): Query; 构造一个Query对象来指定结果的数量和开始位置。 @@ -3106,9 +3162,8 @@ limit\(total: number, offset: number\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.notEqualTo("field", "value"); query.limit("total", "offset"); console.log("query is " + query.getSqlLike()); @@ -3119,9 +3174,9 @@ limit\(total: number, offset: number\): Query; ``` -### isNotNull ### +### isNotNull8+ ### -isNotNull\(field: string\): Query; +isNotNull(field: string): Query; 使用不为空的指定字段创建查询条件。 @@ -3168,9 +3223,8 @@ isNotNull\(field: string\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.isNotNull("field"); console.log("query is " + query.getSqlLike()); query = null; @@ -3180,9 +3234,9 @@ isNotNull\(field: string\): Query; ``` -### beginGroup ### +### beginGroup8+ ### -beginGroup\(\): Query; +beginGroup(): Query; 创建一个带有左括号的查询条件组。 @@ -3206,9 +3260,8 @@ beginGroup\(\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.beginGroup(); query.isNotNull("field"); query.endGroup(); @@ -3220,9 +3273,9 @@ beginGroup\(\): Query; ``` -### endGroup ### +### endGroup8+ ### -endGroup\(\): Query; +endGroup(): Query; 创建一个带有右括号的查询条件组。 @@ -3246,9 +3299,8 @@ endGroup\(\): Query; - 示例 ``` - let Query; try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.beginGroup(); query.isNotNull("field"); query.endGroup(); @@ -3260,9 +3312,9 @@ endGroup\(\): Query; ``` -### prefixKey ### +### prefixKey8+ ### -prefixKey\(prefix: string\): Query; +prefixKey(prefix: string): Query; 创建具有指定键前缀的查询条件。 @@ -3310,7 +3362,7 @@ prefixKey\(prefix: string\): Query; ``` try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.prefixKey("$.name"); query.prefixKey("0"); console.log("query is " + query.getSqlLike()); @@ -3321,9 +3373,9 @@ prefixKey\(prefix: string\): Query; ``` -### setSuggestIndex ### +### setSuggestIndex8+ ### -setSuggestIndex\(index: string\): Query; +setSuggestIndex(index: string): Query; 设置一个指定的索引,将优先用于查询。 @@ -3371,7 +3423,7 @@ setSuggestIndex\(index: string\): Query; ``` try { - let query = new ddm.Query(); + let query = new distributedData.Query(); query.setSuggestIndex("$.name"); query.setSuggestIndex("0"); console.log("query is " + query.getSqlLike()); @@ -3382,55 +3434,47 @@ setSuggestIndex\(index: string\): Query; ``` -## KVStore - -KVStore数据库实例,提供增加数据、删除数据和订阅数据变更、订阅同步完成的方法。在调用KVStore的方法前,需要先通过getKVStore构建一个KVStore实例。 - -### put +### deviceId8+ ### -put\(key: string, value: Uint8Array | string | number | boolean, callback: AsyncCallback\): void +deviceId(deviceId:string):Query; -添加指定类型键值对到数据库,并通过callback方式返回,此方法为异步方法。 +添加设备ID作为key的前缀。 - 参数: - - - + @@ -3688,6 +3841,8 @@ on\(event: 'dataChange', type: SubscribeType, observer: Callback + @@ -3695,6 +3850,8 @@ on\(event: 'dataChange', type: SubscribeType, observer: Callback + @@ -3702,6 +3859,8 @@ on\(event: 'dataChange', type: SubscribeType, observer: Callback + @@ -3711,7 +3870,8 @@ on\(event: 'dataChange', type: SubscribeType, observer: Callback -on\(event: 'syncComplete', syncCallback: Callback\>\): void +on(event: 'syncComplete', syncCallback: Callback\>\) + @@ -3738,12 +3900,16 @@ on\(event: 'syncComplete', syncCallback: Callback\>\) + - + @@ -3754,16 +3920,17 @@ on\(event: 'syncComplete', syncCallback: Callback\>\) - 示例 ``` + let kvStore; kvStore.on('syncComplete', function (data) { console.log("syncComplete callback call data: " + data); }); ``` -### off ### +### off8+ ### -off\(event:'dataChange', observer: Callback\): void; +off(event:'dataChange', observer?: Callback<ChangeNotification>): void; -取消订阅数据同步完成通知,此方法为同步方法。 +取消订阅数据变更通知,此方法为同步方法。 - 参数: @@ -3772,6 +3939,8 @@ off\(event:'dataChange', observer: Callback\): void; + @@ -3780,22 +3949,38 @@ off\(event:'dataChange', observer: Callback\): void; - + +

参数名

-

类型

+ + - - - - - - - - - - + +

参数名

必填

+

类型

说明

+

必填

+

说明

key

+

deviceId

string

-

+

string

要添加数据的key,不能为空且长度不大于MAX_KEY_LENGTH

+

+

指示查询的设备 ID。

value

-

Uint8Array | string | number | boolean

-

-

要添加数据的value,支持Uint8Array、number 、 string 、boolean,

-

Uint8Array、string 的长度不大于MAX_VALUE_LENGTH

-
+ +- 返回值: + + + + - - - + - @@ -3439,13 +3483,117 @@ put\(key: string, value: Uint8Array | string | number | boolean, callback: Async - 示例 ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { - if (err != undefined) { - console.log("put err: " + JSON.stringify(err)); - return; + let query = new distributedData.Query(); + query.deviceId("deviceId"); + console.log("query is " + query.getSqlLike()); + } catch (e) { + console.log("should be ok on Method Chaining : " + e); + } + ``` + + +### getSqlLike8+ ### + +getSqlLike():string; + +获取指定Query对象的查询语句。 + +- 返回值: + + +

类型

+

说明

+

callback

-

AsyncCallback<void>

-

+

Query

回调函数。

+

返回查询对象。

+ + + + + + + +

类型

+

说明

+

string

+

返回指定Query对象的查询语句。

+
+ +- 示例 + + ``` + try { + let query = new distributedData.Query(); + let sql1 = query.getSqlLike(); + console.log("GetSqlLike sql=" + sql1); + } catch (e) { + console.log("dumplicated calls should be ok : " + e); + } + ``` + + +## KVStore + +KVStore数据库实例,提供增加数据、删除数据和订阅数据变更、订阅同步完成的方法。在调用KVStore的方法前,需要先通过getKVStore构建一个KVStore实例。 + +### put + +put(key: string, value: Uint8Array | string | number | boolean, callback: AsyncCallback<void>): void + +添加指定类型键值对到数据库,并通过callback方式返回,此方法为异步方法。 + +- 参数: + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

key

+

string

+

+

要添加数据的key,不能为空且长度不大于MAX_KEY_LENGTH

+

value

+

Uint8Array | string | number | boolean

+

+

要添加数据的value,支持Uint8Array、number 、 string 、boolean,

+

Uint8Array、string 的长度不大于MAX_VALUE_LENGTH

+

callback

+

AsyncCallback<void>

+

+

回调函数。

+
+ +- 示例 + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; } console.log("put success"); }); @@ -3457,7 +3605,7 @@ put\(key: string, value: Uint8Array | string | number | boolean, callback: Async ### put -put\(key: string, value: Uint8Array | string | number | boolean\): Promise +put(key: string, value: Uint8Array | string | number | boolean): Promise<void> 添加指定类型键值对到数据库,并通过Promise方式返回,此方法为异步方法。 @@ -3517,6 +3665,7 @@ put\(key: string, value: Uint8Array | string | number | boolean\): Promise -delete\(key: string, callback: AsyncCallback\): void +delete(key: string, callback: AsyncCallback<void>): void 从数据库中删除指定键值的数据,并通过callback方式返回,此方法为异步方法。 @@ -3574,6 +3723,7 @@ delete\(key: string, callback: AsyncCallback\): void - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; try { @@ -3599,7 +3749,7 @@ delete\(key: string, callback: AsyncCallback\): void ### delete -delete\(key: string\): Promise +delete(key: string): Promise<void> 从数据库中删除指定键值的数据,并通过Promise方式返回,此方法为异步方法。 @@ -3648,6 +3798,7 @@ delete\(key: string\): Promise - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; try { @@ -3669,7 +3820,7 @@ delete\(key: string\): Promise ### on -on\(event: 'dataChange', type: SubscribeType, observer: Callback\): void +on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void 订阅指定类型的数据变更通知,此方法为同步方法。 @@ -3680,6 +3831,8 @@ on\(event: 'dataChange', type: SubscribeType, observer: Callback

类型

必填

+

说明

'dataChange'

+

回调函数名称。

SubscribeType

+

表示订阅的类型。

Callback<ChangeNotification>

+

回调函数。

类型

必填

+

说明

'syncComplete'

+

回调函数名称。

syncCallback

Callback<Array<[string, number]>>

+

Callback<Array<[string, number]>

+

回调函数。

类型

必填

+

说明

'datachange'

回调函数名称。

+

回调函数名称。

observer

Callback<ChangeNotification>

+

回调函数。

-### putBatch ### +- 示例 + + ``` + let kvStore; + kvStore.on('dataChange', function (data) { + console.log("syncComplete callback call data: " + data); + }); + kvStore.off('dataChange', function (data) { + console.log("syncComplete callback call data: " + data); + }); + ``` + -putBatch\(entries: Entry[], callback: AsyncCallback\): void; +### putBatch8+ ### + +putBatch(entries: Entry[], callback: AsyncCallback<void>): void; 批量插入键值对到KvStore数据库中,并通过callback方式返回,此方法为异步方法。 @@ -3830,9 +4015,42 @@ putBatch\(entries: Entry[], callback: AsyncCallback\): void; -### putBatch ### +- 示例 -putBatch\(entries: Entry[\]\): Promise; + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_string_key', function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + + ``` + + +### putBatch8+ ### + +putBatch(entries: Entry[]): Promise<void>; 批量插入键值对到KvStore数据库中,并通过Promise方式返回,此方法为异步方法。 @@ -3876,9 +4094,44 @@ putBatch\(entries: Entry[\]\): Promise; -### deleteBatch ### +- 示例 + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_string_key').then((entrys) => { + console.log('getEntries success'); + console.log('PutBatch ' + JSON.stringify(entries)); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### deleteBatch8+ ### -deleteBatch(keys: string[], callback: AsyncCallback): void; +deleteBatch(keys: string[], callback: AsyncCallback<void>): void; 批量删除KvStore数据库中的键值对,并通过callback方式返回,此方法为异步方法。 @@ -3913,9 +4166,41 @@ deleteBatch(keys: string[], callback: AsyncCallback): void; -### deleteBatch ### +- 示例 + + ``` + let kvStore; + try { + let entries = []; + let keys = []; + for (var i = 0; i < 5; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + keys.push(key + i); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.deleteBatch(keys, async function (err,data) { + console.log('deleteBatch success'); + }); + }); + }catch(e) { + console.log('DeleteBatch e ' + e); + } + ``` + -deleteBatch\(keys: string[\]\): Promise; +### deleteBatch8+ ### + +deleteBatch(keys: string[]): Promise<void>; 批量删除键值对到KvStore数据库中,并通过Promise方式返回,此方法为异步方法。 @@ -3959,9 +4244,45 @@ deleteBatch\(keys: string[\]\): Promise; -### startTransaction ### +- 示例 -startTransaction\(callback: AsyncCallback\): void; + ``` + let kvStore; + try { + let entries = []; + let keys = []; + for (var i = 0; i < 5; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + keys.push(key + i); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.deleteBatch(keys).then((err) => { + console.log('deleteBatch success'); + }).catch((err) => { + console.log('deleteBatch fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('DeleteBatch e ' + e); + } + ``` + + +### startTransaction8+ ### + +startTransaction(callback: AsyncCallback<void>): void; 启动KvStore数据库中的事务,并通过callback方式返回,此方法为异步方法。 @@ -3988,9 +4309,47 @@ startTransaction\(callback: AsyncCallback\): void; -### startTransaction ### +- 示例 -startTransaction\(\): Promise; + ``` + let kvStore; + function putBatchString(len, prefix) { + let entries = []; + for (var i = 0; i < len; i++) { + var entry = { + key : prefix + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + return entries; + } + try { + var count = 0; + kvStore.on('dataChange', 0, function (data) { + console.log('startTransaction 0' + data) + count++; + }); + kvStore.startTransaction(async function (err,data) { + console.log('startTransaction success'); + let entries = putBatchString(10, 'batch_test_string_key'); + console.log('entries: ' + JSON.stringify(entries)); + await kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + }); + }); + }catch(e) { + console.log('startTransaction e ' + e); + } + ``` + + +### startTransaction8+ ### + +startTransaction(): Promise<void>; 启动KvStore数据库中的事务,并通过Promise方式返回,此方法为异步方法。 @@ -4011,9 +4370,30 @@ startTransaction\(\): Promise; -### commit ### +- 示例 + + ``` + let kvStore; + try { + var count = 0; + kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) { + console.log('startTransaction ' + JSON.stringify(data)); + count++; + }); + kvStore.startTransaction().then(async (err) => { + console.log('startTransaction success'); + }).catch((err) => { + console.log('startTransaction fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('startTransaction e ' + e); + } + ``` + -commit\(callback: AsyncCallback\): void; +### commit8+ ### + +commit(callback: AsyncCallback<void>): void; 提交KvStore数据库中的事务,并通过callback方式返回,此方法为异步方法。 @@ -4040,9 +4420,27 @@ commit\(callback: AsyncCallback\): void; -### commit ### +- 示例 + + ``` + let kvStore; + try { + kvStore.commit(function (err,data) { + if (err == undefined) { + console.log('commit success'); + } else { + console.log('commit fail'); + } + }); + }catch(e) { + console.log('Commit e ' + e); + } + ``` + + +### commit8+ ### -commit(\): Promise; +commit(): Promise<void>; 提交KvStore数据库中的事务,并通过Promise方式返回,此方法为异步方法。 @@ -4063,9 +4461,25 @@ commit(\): Promise; -### rollback ### +- 示例 + + ``` + let kvStore; + try { + kvStore.commit().then(async (err) => { + console.log('commit success'); + }).catch((err) => { + console.log('commit fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('Commit e ' + e); + } + ``` + -rollback\(callback: AsyncCallback\): void; +### rollback8+ ### + +rollback(callback: AsyncCallback<void>): void; 在KvStore数据库中回滚事务,并通过callback方式返回,此方法为异步方法。 @@ -4092,9 +4506,27 @@ rollback\(callback: AsyncCallback\): void; -### rollback ### +- 示例 + + ``` + let kvStore; + try { + kvStore.rollback(function (err,data) { + if (err == undefined) { + console.log('commit success'); + } else { + console.log('commit fail'); + } + }); + }catch(e) { + console.log('Rollback e ' + e); + } + ``` + + +### rollback8+ ### -rollback(\): Promise; +rollback(): Promise<void>; 在KvStore数据库中回滚事务,并通过Promise方式返回,此方法为异步方法。 @@ -4115,9 +4547,25 @@ rollback(\): Promise; -### enableSync ### +- 示例 -enableSync\(enabled: boolean, callback: AsyncCallback\): void; + ``` + let kvStore; + try { + kvStore.rollback().then(async (err) => { + console.log('rollback success'); + }).catch((err) => { + console.log('rollback fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('Rollback e ' + e); + } + ``` + + +### enableSync8+ ### + +enableSync(enabled: boolean, callback: AsyncCallback<void>): void; 设定是否开启同步,并通过callback方式返回,此方法为异步方法。 @@ -4155,9 +4603,27 @@ enableSync\(enabled: boolean, callback: AsyncCallback\): void; -### enableSync ### +- 示例 -enableSync\(enabled: boolean\): Promise; + ``` + let kvStore; + try { + kvStore.enableSync(true, function (err,data) { + if (err == undefined) { + console.log('enableSync success'); + } else { + console.log('enableSync fail'); + } + }); + }catch(e) { + console.log('EnableSync e ' + e); + } + ``` + + +### enableSync8+ ### + +enableSync(enabled: boolean): Promise<void>; 设定是否开启同步,并通过Promise方式返回,此方法为异步方法。 @@ -4203,9 +4669,25 @@ enableSync\(enabled: boolean\): Promise; -### setSyncRange ### +- 示例 + + ``` + let kvStore; + try { + kvStore.enableSync(true).then((err) => { + console.log('enableSync success'); + }).catch((err) => { + console.log('enableSync fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('EnableSync e ' + e); + } + ``` + + +### setSyncRange8+ ### -setSyncRange\(localLabels: string[], remoteSupportLabels: string[], callback: AsyncCallback\): void; +setSyncRange(localLabels: string[], remoteSupportLabels: string[], callback: AsyncCallback<void>): void; 设置同步范围标签,并通过callback方式返回,此方法为异步方法。 @@ -4252,9 +4734,25 @@ setSyncRange\(localLabels: string[], remoteSupportLabels: string[], callback: As -### setSyncRange ### +- 示例 + + ``` + let kvStore; + try { + const localLabels = ['A', 'B']; + const remoteSupportLabels = ['C', 'D']; + kvStore.setSyncRange(localLabels, remoteSupportLabels, function (err,data) { + console.log('SetSyncRange put success'); + }); + }catch(e) { + console.log('SetSyncRange e ' + e); + } + ``` -setSyncRange\(localLabels: string[], remoteSupportLabels: string[\]\): Promise; + +### setSyncRange8+ ### + +setSyncRange(localLabels: string[], remoteSupportLabels: string[]): Promise<void>; 设置同步范围标签,并通过Promise方式返回,此方法为异步方法。 @@ -4309,6 +4807,24 @@ setSyncRange\(localLabels: string[], remoteSupportLabels: string[\]\): Promise +- 示例 + + ``` + let kvStore; + try { + const localLabels = ['A', 'B']; + const remoteSupportLabels = ['C', 'D']; + kvStore.setSyncRange(localLabels, remoteSupportLabels).then((err) => { + console.log('setSyncRange success'); + }).catch((err) => { + console.log('delete fail ' + err); + }); + }catch(e) { + console.log('SetSyncRange e ' + e); + } + ``` + + ## SubscribeType 描述订阅类型。 @@ -4556,11 +5072,11 @@ setSyncRange\(localLabels: string[], remoteSupportLabels: string[\]\): Promise -单版本分布式数据库,继承自KVStore,提供查询数据和同步数据的方法。在调用SingleKVStore的方法前,需要先通过getKVStore构建一个KVStore实例。 +单版本分布式数据库,继承自KVStore,提供查询数据和同步数据的方法。在调用 SingleKVStore 的方法前,需要先通过 getKVStore 构建一个 SingleKVStore 实例。 ### get -get\(key: string, callback: AsyncCallback\): void +get(key: string, callback: AsyncCallback<Uint8Array | string | boolean | number>): void 获取指定键的值,并通过callback方式返回,此方法为异步方法。 @@ -4601,6 +5117,7 @@ get\(key: string, callback: AsyncCallback -get\(key: string\): Promise +get(key: string): Promise<Uint8Array | string | boolean | number> 获取指定键的值,并通过Promise方式返回,此方法为异步方法。 @@ -4672,6 +5189,7 @@ get\(key: string\): Promise - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; try { @@ -4690,9 +5208,9 @@ get\(key: string\): Promise } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(keyPrefix: string, callback: AsyncCallback\): void; +getEntries(keyPrefix: string, callback: AsyncCallback<Entry[]>): void; 获取匹配指定键前缀的所有键值对,并通过callback方式返回,此方法为异步方法。 @@ -4733,6 +5251,7 @@ getEntries\(keyPrefix: string, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { let entries = []; for (var i = 0; i < 10; i++) { @@ -4740,7 +5259,7 @@ getEntries\(keyPrefix: string, callback: AsyncCallback\): void; var entry = { key : key + i, value : { - type : factory.ValueType.INTEGER, + type : distributedData.ValueType.INTEGER, value : 222 } } @@ -4748,11 +5267,11 @@ getEntries\(keyPrefix: string, callback: AsyncCallback\): void; } kvStore.putBatch(entries, async function (err,data) { console.log('putBatch success'); - kvStore.getEntries('batch_test_number_key', function (err,entrys) { + await kvStore.getEntries('batch_test_number_key', function (err,entrys) { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); console.log('entrys[0]: ' + JSON.stringify(entrys[0])); - }); + }); }); }catch(e) { console.log('PutBatch e ' + e); @@ -4760,9 +5279,9 @@ getEntries\(keyPrefix: string, callback: AsyncCallback\): void; ``` -### getEntries ### +### getEntries8+ ### -getEntries\(keyPrefix: string\): Promise; +getEntries(keyPrefix: string): Promise<Entry[]>; 获取匹配指定键前缀的所有键值对,并通过Promise方式返回,此方法为异步方法。 @@ -4811,6 +5330,7 @@ getEntries\(keyPrefix: string\): Promise; - 示例 ``` + let kvStore; try { let entries = []; for (var i = 0; i < 10; i++) { @@ -4818,7 +5338,7 @@ getEntries\(keyPrefix: string\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } @@ -4827,7 +5347,7 @@ getEntries\(keyPrefix: string\): Promise; console.log('entries: ' + entries); kvStore.putBatch(entries).then(async (err) => { console.log('putBatch success'); - kvStore.getEntries('batch_test_string_key').then((entrys) => { + await kvStore.getEntries('batch_test_string_key').then((entrys) => { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); console.log('entrys[0]: ' + JSON.stringify(entrys[0])); @@ -4840,14 +5360,14 @@ getEntries\(keyPrefix: string\): Promise; console.log('putBatch fail ' + JSON.stringify(err)); }); }catch(e) { - console.log('PutBatch001 e ' + e); + console.log('PutBatch e ' + e); } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(query: Query, callback: AsyncCallback\): void; +getEntries(query: Query, callback: AsyncCallback<Entry[]>): void; 获取与指定 Query 对象匹配的键值对列表,并通过callback方式返回,此方法为异步方法。 @@ -4888,6 +5408,7 @@ getEntries\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { var arr = new Uint8Array([21,31]); let entries = []; @@ -4896,29 +5417,33 @@ getEntries\(query: Query, callback: AsyncCallback\): void; var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries, async function (err,data) { console.log('putBatch success'); - kvStore.getEntries('batch_test_bool_key', function (err,entrys) { + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getEntries(query, function (err,entrys) { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); }); }); + console.log('GetEntries success'); }catch(e) { - console.log('PutBatch e ' + e); + console.log('GetEntries e ' + e); } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(query: Query\): Promise; +getEntries(query: Query): Promise<Entry[]>; 获取匹配指定键前缀的所有键值对,并通过Promise方式返回,此方法为异步方法。 @@ -4975,24 +5500,24 @@ getEntries\(query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('GetEntries entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries).then(async (err) => { - console.log('GetEntries putBatch success'); - const query = new factory.Query(); + console.log('putBatch success'); + const query = new distributedData.Query(); query.prefixKey("batch_test"); - kvStore.getEntries(query).then((entrys) => { - console.log('GetEntries getEntries success'); + await kvStore.getEntries(query).then((entrys) => { + console.log('getEntries success'); }).catch((err) => { - console.log('GetEntries getEntries fail ' + JSON.stringify(err)); + console.log('getEntries fail ' + JSON.stringify(err)); }); }).catch((err) => { - console.log('GetEntries putBatch fail ' + JSON.stringify(err)); + console.log('GetEntries putBatch fail ' + JSON.stringify(err)) }); console.log('GetEntries success'); }catch(e) { @@ -5001,9 +5526,9 @@ getEntries\(query: Query\): Promise; ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(keyPrefix: string, callback: AsyncCallback\): void; +getResultSet(keyPrefix: string, callback: AsyncCallback<KvStoreResultSet>): void; 从 KvStore 数据库中获取具有指定前缀的结果集,并通过callback方式返回,此方法为异步方法。 @@ -5044,6 +5569,7 @@ getResultSet\(keyPrefix: string, callback: AsyncCallback\): v - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -5052,7 +5578,7 @@ getResultSet\(keyPrefix: string, callback: AsyncCallback\): v var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } @@ -5060,7 +5586,7 @@ getResultSet\(keyPrefix: string, callback: AsyncCallback\): v } kvStore.putBatch(entries, async function (err, data) { console.log('GetResultSet putBatch success'); - kvStore.getResultSet('batch_test_string_key', async function (err, result) { + await kvStore.getResultSet('batch_test_string_key', async function (err, result) { console.log('GetResultSet getResultSet success'); resultSet = result; kvStore.closeResultSet(resultSet, function (err, data) { @@ -5074,9 +5600,9 @@ getResultSet\(keyPrefix: string, callback: AsyncCallback\): v ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(keyPrefix: string\): Promise; +getResultSet(keyPrefix: string): Promise<KvStoreResultSet>; 从 KvStore 数据库中获取具有指定前缀的结果集,并通过Promise方式返回,此方法为异步方法。 @@ -5125,6 +5651,7 @@ getResultSet\(keyPrefix: string\): Promise; - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -5133,14 +5660,14 @@ getResultSet\(keyPrefix: string\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } entries.push(entry); } kvStore.putBatch(entries).then(async (err) => { - console.log('GetResult putBatch success'); + console.log('putBatch success'); }).catch((err) => { console.log('PutBatch putBatch fail ' + JSON.stringify(err)); }); @@ -5148,23 +5675,22 @@ getResultSet\(keyPrefix: string\): Promise; console.log('GetResult getResultSet success'); resultSet = result; }).catch((err) => { - console.log('GetResult getResultSet fail ' + JSON.stringify(err)); + console.log('getResultSet fail ' + JSON.stringify(err)); }); kvStore.closeResultSet(resultSet).then((err) => { console.log('GetResult closeResultSet success'); }).catch((err) => { - console.log('GetResult closeResultSet fail ' + JSON.stringify(err)); + console.log('closeResultSet fail ' + JSON.stringify(err)); }); - }catch(e) { console.log('GetResult e ' + e); } ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(query: Query, callback: AsyncCallback\): void; +getResultSet(query: Query, callback: AsyncCallback<KvStoreResultSet>): void; 获取与指定 Query 对象匹配的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 @@ -5205,6 +5731,7 @@ getResultSet\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -5213,7 +5740,7 @@ getResultSet\(query: Query, callback: AsyncCallback\): void; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } @@ -5221,22 +5748,22 @@ getResultSet\(query: Query, callback: AsyncCallback\): void; } kvStore.putBatch(entries, async function (err, data) { console.log('putBatch success'); - kvStore.getResultSet('batch_test_string_key', async function (err, result) { + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSet(query, async function (err, result) { console.log('getResultSet success'); resultSet = result; - kvStore.closeResultSet(resultSet, function (err, data) { - }) }); }); - }catch(e) { + } catch(e) { console.log('GetResultSet e ' + e); } ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(query: Query\): Promise; +getResultSet(query: Query): Promise<KvStoreResultSet>; 获取与指定 Query 对象匹配的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 @@ -5285,6 +5812,7 @@ getResultSet\(query: Query\): Promise; - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -5293,7 +5821,7 @@ getResultSet\(query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } @@ -5302,27 +5830,24 @@ getResultSet\(query: Query\): Promise; kvStore.putBatch(entries).then(async (err) => { console.log('putBatch success'); }).catch((err) => { - console.log('putBatch fail ' + err); - }); - kvStore.getResultSet('batch_test_string_key').then((result) => { - console.log('getResultSet success'); - resultSet = result; - }).catch((err) => { - console.log('getResultSet fail ' + err); + console.log('putBatch fail ' + JSON.stringify(err)); }); - kvStore.closeResultSet(resultSet).then((err) => { - console.log('closeResultSet success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSet(query).then((result) => { + console.log(' getResultSet success'); + resultSet = result; }).catch((err) => { - console.log('closeResultSet fail ' + err); + console.log('getResultSet fail ' + JSON.stringify(err)); }); }catch(e) { - console.log('ResultSet e ' + e); + console.log('GetResultSet e ' + e); } ``` -### closeResultSet ### +### closeResultSet8+ ### -closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): void; +closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback<void>): void; 关闭由 getResultSet 返回的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 @@ -5363,8 +5888,8 @@ closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): v - 示例 ``` + let kvStore; try { - console.log('CloseResultSet success'); let resultSet = null; kvStore.closeResultSet(resultSet, function (err, data) { if (err == undefined) { @@ -5379,9 +5904,9 @@ closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): v ``` -### closeResultSet ### +### closeResultSet8+ ### -closeResultSet\(resultSet: KvStoreResultSet\): Promise; +closeResultSet(resultSet: KvStoreResultSet): Promise<void>; 关闭由 getResultSet 返回的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 @@ -5430,8 +5955,8 @@ closeResultSet\(resultSet: KvStoreResultSet\): Promise; - 示例 ``` + let kvStore; try { - console.log('CloseResultSet success'); let resultSet = null; kvStore.closeResultSet(resultSet).then(() => { console.log('closeResultSet success'); @@ -5444,9 +5969,9 @@ closeResultSet\(resultSet: KvStoreResultSet\): Promise; ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(query: Query, callback: AsyncCallback\): void; +getResultSize(query: Query, callback: AsyncCallback<number>): void; 获取与指定 Query 对象匹配的结果数,并通过callback方式返回,此方法为异步方法。 @@ -5487,18 +6012,37 @@ getResultSize\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); - }catch(e) { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSize(query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { console.log('GetResultSize e ' + e); } ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(query: Query\): Promise; +getResultSize(query: Query): Promise<number>; 获取与指定 Query 对象匹配的结果数,并通过Promise方式返回,此方法为异步方法。 @@ -5547,18 +6091,41 @@ getResultSize\(query: Query\): Promise; - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSize(query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); }catch(e) { console.log('GetResultSize e ' + e); } ``` -### removeDeviceData ### +### removeDeviceData8+ ### -removeDeviceData\(deviceId: string, callback: AsyncCallback\): void; +removeDeviceData(deviceId: string, callback: AsyncCallback<void>): void; 删除指定设备的数据,并通过callback方式返回,此方法为异步方法。 @@ -5599,19 +6166,19 @@ removeDeviceData\(deviceId: string, callback: AsyncCallback\): void; - 示例 ``` - const KEY_TEST_FLOAT_ELEMENT = 'key_test_float_2'; + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-002'; try { kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) { console.log('put success'); const deviceid = 'no_exist_device_id'; - kvStore.removeDeviceData(deviceid, async function (err,data) { + await kvStore.removeDeviceData(deviceid, async function (err,data) { if (err == undefined) { console.log('removeDeviceData success'); - done(); } else { console.log('removeDeviceData fail'); - kvStore.get(KEY_TEST_STRING_ELEMENT, async function (err,data) { + await kvStore.get(KEY_TEST_STRING_ELEMENT, async function (err,data) { console.log('RemoveDeviceData get success'); }); } @@ -5623,9 +6190,9 @@ removeDeviceData\(deviceId: string, callback: AsyncCallback\): void; ``` -### removeDeviceData ### +### removeDeviceData8+ ### -removeDeviceData\(deviceId: string\): Promise; +removeDeviceData(deviceId: string): Promise<void>; 删除指定设备的数据,并通过Promise方式返回,此方法为异步方法。 @@ -5674,6 +6241,7 @@ removeDeviceData\(deviceId: string\): Promise; - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; try { @@ -5699,11 +6267,11 @@ removeDeviceData\(deviceId: string\): Promise; ``` -### on ### +### on8+ ### -on\(event: 'syncComplete', syncCallback: Callback>\): void; +on(event: 'syncComplete', syncCallback: Callback>\): vo

-

设备状态改变时触发的事件名。

+

同步完成时触发的事件名。

syncCallback

-

Callback<Array<[string, number]>>>

+

Callback<Array<[string, number]>

@@ -5742,28 +6310,29 @@ on\(event: 'syncComplete', syncCallback: Callback>\): vo - 示例 ``` + let kvStore; const KEY_TEST_FLOAT_ELEMENT = 'key_test_float'; const VALUE_TEST_FLOAT_ELEMENT = 321.12; try { - kvStore.on('dataChange', 0, function (data) { - console.log('OnChange 0' + data) + kvStore.on('syncComplete', function (data) { + console.log('syncComplete ' + data) }); kvStore.put(KEY_TEST_FLOAT_ELEMENT, VALUE_TEST_FLOAT_ELEMENT).then((data) => { - console.log('OnChange put success'); + console.log('syncComplete put success'); }).catch((error) => { - console.log('OnChange put fail ' + error); + console.log('syncComplete put fail ' + error); }); }catch(e) { - console.log('OnChange put e ' + e); + console.log('syncComplete put e ' + e); } ``` -### off ### +### off8+ ### -off\(event: 'syncComplete', syncCallback: Callback>\): void; +off(event: 'syncComplete', syncCallback?: Callback>\): v

-

设备状态改变时触发的事件名。

+

同步完成时触发的事件名。

syncCallback

-

Callback<Array<[string, number]>>>

+

Callback<Array<[string, number]>

-

+

用于向调用方发送同步结果的回调。

@@ -5802,23 +6371,24 @@ off\(event: 'syncComplete', syncCallback: Callback>\): v - 示例 ``` + let kvStore; try { const func = function (data) { - console.log('OffChange 0' + data) + console.log('syncComplete ' + data) }; - kvStore.on('dataChange', 0, func); - kvStore.off('dataChange', func); + kvStore.on('syncComplete', func); + kvStore.off('syncComplete', func); }catch(e) { - console.log('OffChange e ' + e); + console.log('syncComplete e ' + e); } ``` ### sync -sync\(deviceIdList: string\[\], mode: SyncMode, allowedDelayMs?: number\): void +sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void -在手动同步模式下,触发数据库同步,此方法为同步方法。 +在手动模式下,触发数据库同步,此方法为同步方法。 - 参数: @@ -5866,14 +6436,15 @@ sync\(deviceIdList: string\[\], mode: SyncMode, allowedDelayMs?: number\): void - 示例: ``` - kvStore.sync(deviceIds, 1, 1000); + let kvStore; + kvStore.sync('deviceIds', distributedData.SyncMode.PULL_ONLY, 1000); ``` -### setSyncParam ### +### setSyncParam8+ ### -setSyncParam\(defaultAllowedDelayMs: number, callback: AsyncCallback\): void; +setSyncParam(defaultAllowedDelayMs: number, callback: AsyncCallback<void>): void; -设置允许数据库同步的默认延迟,并通过callback方式返回,此方法为异步方法。 +设置允许数据库同步的默认延迟,并通过callback方式返回,此方法为异步方法。 - 参数: @@ -5912,22 +6483,23 @@ setSyncParam\(defaultAllowedDelayMs: number, callback: AsyncCallback\): v - 示例 ``` + let kvStore; try { const defaultAllowedDelayMs = 500; kvStore.setSyncParam(defaultAllowedDelayMs, function (err,data) { console.log('SetSyncParam put success'); }); }catch(e) { - console.log('testSingleKvStoreSetSyncParam101 e ' + e); + console.log('testSingleKvStoreSetSyncParam e ' + e); } ``` -### setSyncParam ### +### setSyncParam8+ ### -setSyncParam\(defaultAllowedDelayMs: number\): Promise; +setSyncParam(defaultAllowedDelayMs: number): Promise<void>; -设置允许数据库同步的默认延迟,并通过Promise方式返回,此方法为异步方法。 +设置允许数据库同步的默认延迟,并通过Promise方式返回,此方法为异步方法。 - 参数: @@ -5974,6 +6546,7 @@ setSyncParam\(defaultAllowedDelayMs: number\): Promise; - 示例 ``` + let kvStore; try { const defaultAllowedDelayMs = 500; kvStore.setSyncParam(defaultAllowedDelayMs).then((err) => { @@ -5987,9 +6560,9 @@ setSyncParam\(defaultAllowedDelayMs: number\): Promise; ``` -### getSecurityLevel ### +### getSecurityLevel8+ ### -getSecurityLevel\(callback: AsyncCallback\): void; +getSecurityLevel(callback: AsyncCallback<SecurityLevel>): void; 获取数据库的安全级别,并通过callback方式返回,此方法为异步方法。 @@ -6021,6 +6594,7 @@ getSecurityLevel\(callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { kvStore.getSecurityLevel(function (err,data) { console.log('getSecurityLevel success'); @@ -6031,9 +6605,9 @@ getSecurityLevel\(callback: AsyncCallback\): void; ``` -### getSecurityLevel ### +### getSecurityLevel8+ ### -getSecurityLevel(\): Promise; +getSecurityLevel(): Promise<SecurityLevel>; 获取数据库的安全级别,并通过Promise方式返回,此方法为异步方法。 @@ -6057,6 +6631,7 @@ getSecurityLevel(\): Promise; - 示例 ``` + let kvStore; try { kvStore.getSecurityLevel().then((data) => { console.log(' getSecurityLevel success'); @@ -6069,15 +6644,15 @@ getSecurityLevel(\): Promise; ``` -## DeviceKVStore ## +## DeviceKVStore8+ ## -在分布式系统中通过设备管理分布式数据,继承自KvStore,提供查询数据和同步数据的方法。在调用DeviceKVStore的方法前,需要先通过getKVStore构建一个KVStore实例。 +在分布式系统中按设备管理分布式数据,继承自KvStore,提供查询数据和同步数据的方法。在调用DeviceKVStore的方法前,需要先通过getKVStore构建一个DeviceKVStore实例。 -### get ### +### get8+ ### -get\(deviceId: string, key: string, callback: AsyncCallback\): void; +get(deviceId: string, key: string, callback: AsyncCallback<boolean|string|number|Uint8Array>): void; -获取与指定设备 ID 和密钥匹配的 String 值,并通过callback方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 匹配的 String 值,并通过callback方式返回,此方法为异步方法。 - 参数: @@ -6107,7 +6682,7 @@ get\(deviceId: string, key: string, callback: AsyncCallback

-

表示要查询的String值的键。

+

表示要查询 key 值的键。

callback

@@ -6125,12 +6700,13 @@ get\(deviceId: string, key: string, callback: AsyncCallback8+ ### -get\(deviceId: string, key: string\): Promise; +get(deviceId: string, key: string): Promise<boolean|string|number|Uint8Array>; -获取与指定设备 ID 和密钥匹配的 String 值,并通过Promise方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 匹配的 String 值,并通过Promise方式返回,此方法为异步方法。 - 参数: @@ -6174,7 +6750,7 @@ get\(deviceId: string, key: string\): Promise

-

表示要查询的String值的键。

+

表示要查询的 key 值的键。

@@ -6200,12 +6776,13 @@ get\(deviceId: string, key: string\): Promise - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; const VALUE_TEST_STRING_ELEMENT = 'value-string-002'; try { kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then(async (data) => { console.log(' put success'); - kvStore.get(localDeviceId, KEY_TEST_STRING_ELEMENT).then((data) => { + kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => { console.log('get success'); }).catch((err) => { console.log('get fail ' + JSON.stringify(err)); @@ -6219,11 +6796,11 @@ get\(deviceId: string, key: string\): Promise ``` -### getEntries ### +### getEntries8+ ### -getEntries\(deviceId: string, keyPrefix: string, callback: AsyncCallback\): void; +getEntries(deviceId: string, keyPrefix: string, callback: AsyncCallback<Entry[]>): void; -获取与指定设备 ID 和密钥前缀匹配的所有键值对,并通过callback方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 前缀匹配的所有键值对,并通过callback方式返回,此方法为异步方法。 - 参数: @@ -6271,6 +6848,7 @@ getEntries\(deviceId: string, keyPrefix: string, callback: AsyncCallback8+ ### -getEntries\(deviceId: string, keyPrefix: string\): Promise; +getEntries(deviceId: string, keyPrefix: string): Promise<Entry[]>; -获取与指定设备 ID 和密钥前缀匹配的所有键值对,并通过Promise方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 前缀匹配的所有键值对,并通过Promise方式返回,此方法为异步方法。 - 参数: @@ -6359,6 +6937,7 @@ getEntries\(deviceId: string, keyPrefix: string\): Promise; - 示例 ``` + let kvStore; try { let entries = []; for (var i = 0; i < 10; i++) { @@ -6366,16 +6945,16 @@ getEntries\(deviceId: string, keyPrefix: string\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } entries.push(entry); } console.log('entries: ' + entries); - kvStore.putBatch(entries).then(async (err) => { + kvStore.putBatch(entries).then(async (err) => { console.log('putBatch success'); - kvStore.getEntries(localDeviceId, 'batch_test_string_key').then((entrys) => { + await kvStore.getEntries('localDeviceId', 'batch_test_string_key').then((entrys) => { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); console.log('entrys[0]: ' + JSON.stringify(entrys[0])); @@ -6393,9 +6972,9 @@ getEntries\(deviceId: string, keyPrefix: string\): Promise; ``` -### getEntries ### +### getEntries8+ ### -getEntries\(query: Query, callback: AsyncCallback\): void; +getEntries(query: Query, callback: AsyncCallback<Entry[]>): void; 获取与指定 Query 对象匹配的键值对列表,并通过callback方式返回,此方法为异步方法。 @@ -6436,6 +7015,7 @@ getEntries\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { var arr = new Uint8Array([21,31]); let entries = []; @@ -6444,29 +7024,35 @@ getEntries\(query: Query, callback: AsyncCallback\): void; var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries, async function (err,data) { console.log('putBatch success'); - kvStore.getEntries(localDeviceId, 'batch_test_bool_key', function (err,entrys) { + expect(err == undefined).assertTrue(); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getEntries(query, function (err,entrys) { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); }); }); + console.log('GetEntries success'); }catch(e) { - console.log('PutBatch e ' + e); + console.log('GetEntries e ' + e); } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(query: Query\): Promise; +getEntries(query: Query): Promise<Entry[]>; 获取与指定 Query 对象匹配的键值对列表,并通过Promise方式返回,此方法为异步方法。 @@ -6515,6 +7101,7 @@ getEntries\(query: Query\): Promise; - 示例 ``` + let kvStore; try { var arr = new Uint8Array([21,31]); let entries = []; @@ -6523,32 +7110,35 @@ getEntries\(query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries).then(async (err) => { console.log('putBatch success'); - kvStore.getEntries(localDeviceId, 'batch_test_bool_key').then((entrys) => { + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getEntries(query).then((entrys) => { console.log('getEntries success'); }).catch((err) => { console.log('getEntries fail ' + JSON.stringify(err)); }); }).catch((err) => { - console.log('putBatch fail ' + JSON.stringify(err)); + console.log('GetEntries putBatch fail ' + JSON.stringify(err)) }); + console.log('GetEntries success'); }catch(e) { - console.log('PutBatch e ' + e); + console.log('GetEntries e ' + e); } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(deviceId: string, query: Query, callback: AsyncCallback\): void; +getEntries(deviceId: string, query: Query, callback: AsyncCallback<Entry[]>): void; 获取与指定设备 ID 和 Query 对象匹配的键值对列表,并通过callback方式返回,此方法为异步方法。 @@ -6598,6 +7188,7 @@ getEntries\(deviceId: string, query: Query, callback: AsyncCallback\) - 示例 ``` + let kvStore; try { var arr = new Uint8Array([21,31]); let entries = []; @@ -6606,29 +7197,35 @@ getEntries\(deviceId: string, query: Query, callback: AsyncCallback\) var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries, async function (err,data) { console.log('putBatch success'); - kvStore.getEntries(localDeviceId, 'batch_test_bool_key', function (err,entrys) { + expect(err == undefined).assertTrue(); + var query = new distributedData.Query(); + query.deviceId('localDeviceId'); + query.prefixKey("batch_test"); + await kvStore.getEntries('localDeviceId', query, function (err,entrys) { console.log('getEntries success'); console.log('entrys.length: ' + entrys.length); - }); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }) }); + console.log('GetEntries success'); }catch(e) { - console.log('PutBatch e ' + e); + console.log('GetEntries e ' + e); } ``` -### getEntries ### +### getEntries8+ ### -getEntries\(deviceId: string, query: Query\): Promise; +getEntries(deviceId: string, query: Query): Promise<Entry[]>; 获取与指定设备 ID 和 Query 对象匹配的键值对列表,并通过Promise方式返回,此方法为异步方法。 @@ -6686,6 +7283,7 @@ getEntries\(deviceId: string, query: Query\): Promise; - 示例 ``` + let kvStore; try { var arr = new Uint8Array([21,31]); let entries = []; @@ -6694,16 +7292,19 @@ getEntries\(deviceId: string, query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.BYTE_ARRAY, + type : distributedData.ValueType.BYTE_ARRAY, value : arr } } entries.push(entry); } - console.log('entries: ' + entries); + console.log('entries: ' + JSON.stringify(entries)); kvStore.putBatch(entries).then(async (err) => { console.log('putBatch success'); - kvStore.getEntries(localDeviceId, 'batch_test_bool_key').then((entrys) => { + var query = new distributedData.Query(); + query.deviceId('localDeviceId'); + query.prefixKey("batch_test"); + await kvStore.getEntries('localDeviceId', query).then((entrys) => { console.log('getEntries success'); }).catch((err) => { console.log('getEntries fail ' + JSON.stringify(err)); @@ -6711,17 +7312,18 @@ getEntries\(deviceId: string, query: Query\): Promise; }).catch((err) => { console.log('putBatch fail ' + JSON.stringify(err)); }); + console.log('GetEntries success'); }catch(e) { - console.log('PutBatch e ' + e); + console.log('GetEntries e ' + e); } ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(deviceId: string, keyPrefix: string, callback: AsyncCallback\): void; +getResultSet(deviceId: string, keyPrefix: string, callback: AsyncCallback<KvStoreResultSet>): void; -获取与指定设备 ID 和密钥前缀匹配的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 前缀匹配的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 - 参数: @@ -6769,12 +7371,13 @@ getResultSet\(deviceId: string, keyPrefix: string, callback: AsyncCallback8+ ### -getResultSet\(deviceId: string, keyPrefix: string\): Promise; +getResultSet(deviceId: string, keyPrefix: string): Promise<KvStoreResultSet>; -获取与指定设备 ID 和密钥前缀匹配的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 +获取与指定设备 ID 和 key 前缀匹配的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 - 参数: @@ -6844,9 +7447,10 @@ getResultSet\(deviceId: string, keyPrefix: string\): Promise; - 示例 ``` + let kvStore; try { let resultSet; - kvStore.getResultSet(localDeviceId, 'batch_test_string_key').then((result) => { + kvStore.getResultSet('localDeviceId', 'batch_test_string_key').then((result) => { console.log('getResultSet success'); resultSet = result; }).catch((err) => { @@ -6863,9 +7467,9 @@ getResultSet\(deviceId: string, keyPrefix: string\): Promise; ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(query: Query, callback: AsyncCallback\): void; +getResultSet(query: Query, callback: AsyncCallback<KvStoreResultSet>): void; 获取与指定 Query 对象匹配的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 @@ -6906,20 +7510,43 @@ getResultSet\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { let resultSet; - kvStore.getResultSet(function (err, result) { - console.log('getResultSet success'); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getResultSet(query, async function (err, result) { + console.log('getResultSet success'); + resultSet = result; + await kvStore.closeResultSet(resultSet, function (err, data) { + console.log('closeResultSet success'); + }) + }); }); - }catch(e) { + } catch(e) { console.log('GetResultSet e ' + e); } ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(query: Query\): Promise; +getResultSet(query: Query): Promise<KvStoreResultSet>; 获取与指定 Query 对象匹配的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 @@ -6968,6 +7595,7 @@ getResultSet\(query: Query\): Promise; - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -6976,31 +7604,31 @@ getResultSet\(query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } entries.push(entry); } kvStore.putBatch(entries).then(async (err) => { - console.log('GetResultSet putBatch success'); + console.log('putBatch success'); }).catch((err) => { - console.log('PutBatch putBatch fail ' + JSON.stringify(err)); + console.log('putBatch fail ' + err); }); - const query = new factory.Query(); - query.deviceId(localDeviceId); + const query = new distributedData.Query(); + query.deviceId('localDeviceId'); query.prefixKey("batch_test"); console.log("GetResultSet " + query.getSqlLike()); kvStore.getResultSet(query).then((result) => { - console.log('GetResultSet getResultSet success'); + console.log('getResultSet success'); resultSet = result; }).catch((err) => { - console.log('GetResultSet getResultSet fail ' + JSON.stringify(err)); + console.log('getResultSet fail ' + JSON.stringify(err)); }); kvStore.closeResultSet(resultSet).then((err) => { - console.log('GetResultSet closeResultSet success'); + console.log('closeResultSet success'); }).catch((err) => { - console.log('GetResultSet closeResultSet fail ' + JSON.stringify(err)); + console.log('closeResultSet fail ' + JSON.stringify(err)); }); }catch(e) { console.log('GetResultSet e ' + e); @@ -7008,9 +7636,9 @@ getResultSet\(query: Query\): Promise; ``` -### getResultSet ### +### getResultSet8+ ### -getResultSet\(deviceId: string, query: Query, callback: AsyncCallback\): void; +getResultSet(deviceId: string, query: Query, callback: AsyncCallback<KvStoreResultSet>): void; 获取与指定设备ID和Query对象匹配的KvStoreResultSet对象,并通过callback方式返回,此方法为异步方法。 @@ -7060,20 +7688,42 @@ getResultSet\(deviceId: string, query: Query, callback: AsyncCallback8+ ### -getResultSet\(deviceId: string, query: Query\): Promise; +getResultSet(deviceId: string, query: Query): Promise<KvStoreResultSet>; 获取与指定设备ID和Query对象匹配的KvStoreResultSet对象,并通过Promise方式返回,此方法为异步方法。 @@ -7131,6 +7781,7 @@ getResultSet\(deviceId: string, query: Query\): Promise; - 示例 ``` + let kvStore; try { let resultSet; let entries = []; @@ -7139,7 +7790,7 @@ getResultSet\(deviceId: string, query: Query\): Promise; var entry = { key : key + i, value : { - type : factory.ValueType.STRING, + type : distributedData.ValueType.STRING, value : 'batch_test_string_value' } } @@ -7150,15 +7801,15 @@ getResultSet\(deviceId: string, query: Query\): Promise; }).catch((err) => { console.log('PutBatch putBatch fail ' + JSON.stringify(err)); }); - const query = new factory.Query(); - prefixKey("batch_test"); - kvStore.getResultSet(localDeviceId, query).then((result) => { + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSet('localDeviceId', query).then((result) => { console.log('GetResultSet getResultSet success'); resultSet = result; }).catch((err) => { console.log('GetResultSet getResultSet fail ' + JSON.stringify(err)); }); - query.deviceId(localDeviceId); + query.deviceId('localDeviceId'); console.log("GetResultSet " + query.getSqlLike()); kvStore.closeResultSet(resultSet).then((err) => { console.log('GetResultSet closeResultSet success'); @@ -7172,9 +7823,9 @@ getResultSet\(deviceId: string, query: Query\): Promise; ``` -### closeResultSet ### +### closeResultSet8+ ### -closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): void; +closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback<void>): void; 关闭由 getResultSet 返回的 KvStoreResultSet 对象,并通过callback方式返回,此方法为异步方法。 @@ -7215,6 +7866,7 @@ closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): v - 示例 ``` + let kvStore; try { console.log('CloseResultSet success'); let resultSet = null; @@ -7231,9 +7883,9 @@ closeResultSet\(resultSet: KvStoreResultSet, callback: AsyncCallback\): v ``` -### closeResultSet ### +### closeResultSet8+ ### -closeResultSet\(resultSet: KvStoreResultSet\): Promise; +closeResultSet(resultSet: KvStoreResultSet): Promise<void>; 关闭由 getResultSet 返回的 KvStoreResultSet 对象,并通过Promise方式返回,此方法为异步方法。 @@ -7282,6 +7934,7 @@ closeResultSet\(resultSet: KvStoreResultSet\): Promise; - 示例 ``` + let kvStore; try { console.log('CloseResultSet success'); let resultSet = null; @@ -7296,9 +7949,9 @@ closeResultSet\(resultSet: KvStoreResultSet\): Promise; ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(query: Query, callback: AsyncCallback\): void; +getResultSize(query: Query, callback: AsyncCallback<number>): void; 获取与指定 Query 对象匹配的结果数,并通过callback方式返回,此方法为异步方法。 @@ -7339,18 +7992,38 @@ getResultSize\(query: Query, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); - }catch(e) { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getResultSize(query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { console.log('GetResultSize e ' + e); } ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(query: Query\): Promise; +getResultSize(query: Query): Promise<number>; 获取与指定 Query 对象匹配的结果数,并通过Promise方式返回,此方法为异步方法。 @@ -7399,18 +8072,42 @@ getResultSize\(query: Query\): Promise; - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + kvStore.getResultSize(query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); }catch(e) { console.log('GetResultSize e ' + e); } ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(deviceId: string, query: Query, callback: AsyncCallback\): void; +getResultSize(deviceId: string, query: Query, callback: AsyncCallback<number>): void; 获取与指定设备 ID 和 Query 对象匹配的结果数,并通过callback方式返回,此方法为异步方法。 @@ -7460,18 +8157,37 @@ getResultSize\(deviceId: string, query: Query, callback: AsyncCallback\ - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); - }catch(e) { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSize('localDeviceId', query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { console.log('GetResultSize e ' + e); } ``` -### getResultSize ### +### getResultSize8+ ### -getResultSize\(deviceId: string, query: Query\): Promise; +getResultSize(deviceId: string, query: Query): Promise<number>; 获取与指定设备 ID 和 Query 对象匹配的结果数,并通过Promise方式返回,此方法为异步方法。 @@ -7529,18 +8245,41 @@ getResultSize\(deviceId: string, query: Query\): Promise; - 示例 ``` + let kvStore; try { - // pass query - console.log('GetResultSize success'); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + var query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSize('localDeviceId', query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); }catch(e) { console.log('GetResultSize e ' + e); } ``` -### removeDeviceData ### +### removeDeviceData8+ ### -removeDeviceData\(deviceId: string, callback: AsyncCallback\): void; +removeDeviceData(deviceId: string, callback: AsyncCallback<void>): void; 从当前数据库中删除指定设备的数据,并通过callback方式返回,此方法为异步方法。 @@ -7581,32 +8320,33 @@ removeDeviceData\(deviceId: string, callback: AsyncCallback\): void; - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; try { kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) { console.log('RemoveDeviceData put success'); const deviceid = 'no_exist_device_id'; - kvStore.removeDeviceData(deviceid, async function (err,data) { + await kvStore.removeDeviceData(deviceid, async function (err,data) { if (err == undefined) { console.log('removeDeviceData success'); } else { - console.log('testDeviceKvStoreRemoveDeviceData101 removeDeviceData fail'); - kvStore.get(localDeviceId, KEY_TEST_STRING_ELEMENT, async function (err,data) { + console.log('removeDeviceData fail'); + await kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT, async function (err,data) { console.log('RemoveDeviceData get success'); }); } }); }); }catch(e) { - console.log('testDeviceKvStoreRemoveDeviceData101 e ' + e); + console.log('RemoveDeviceData e ' + e); } ``` -### removeDeviceData ### +### removeDeviceData8+ ### -removeDeviceData\(deviceId: string\): Promise; +removeDeviceData(deviceId: string): Promise<void>; 从当前数据库中删除指定设备的数据,并通过Promise方式返回,此方法为异步方法。 @@ -7655,6 +8395,7 @@ removeDeviceData\(deviceId: string\): Promise; - 示例 ``` + let kvStore; const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; try { @@ -7663,31 +8404,28 @@ removeDeviceData\(deviceId: string\): Promise; }).catch((err) => { console.log('RemoveDeviceData put fail ' + JSON.stringify(err)); }); - const deviceid = 'no_exist_device_id'; kvStore.removeDeviceData(deviceid).then((err) => { - console.log('RemoveDeviceData removeDeviceData success'); + console.log('removeDeviceData success'); }).catch((err) => { - console.log('RemoveDeviceData removeDeviceData fail ' + JSON.stringify(err)); + console.log('removeDeviceData fail ' + JSON.stringify(err)); }); - - kvStore.get(localDeviceId, KEY_TEST_STRING_ELEMENT).then((data) => { + kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => { console.log('RemoveDeviceData get success data:' + data); }).catch((err) => { console.log('RemoveDeviceData get fail ' + JSON.stringify(err)); }); - }catch(e) { console.log('RemoveDeviceData e ' + e); } ``` -### sync ### +### sync8+ ### -sync\(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number\): void; +sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void; -同步 DeviceKvStore 数据库,该方法为异步方法。 +在手动模式下,触发数据库同步,此方法为同步方法。 - 参数: @@ -7735,6 +8473,7 @@ sync\(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number\): void; - 示例 ``` + let kvStore; const KEY_TEST_SYNC_ELEMENT = 'key_test_sync'; const VALUE_TEST_SYNC_ELEMENT = 'value-string-001'; try { @@ -7743,8 +8482,8 @@ sync\(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number\): void; }); kvStore.put(KEY_TEST_SYNC_ELEMENT + 'testSync101', VALUE_TEST_SYNC_ELEMENT, function (err,data) { console.log('Sync put success'); - const devices = ['A12C1F9261528B21F95778D2FDC0B2E33943E6251AC5487F4473D005758905DB']; - const mode = factory.SyncMode.PULL_ONLY; + const devices = ['deviceList']; + const mode = distributedData.SyncMode.PULL_ONLY; kvStore.sync(devices, mode); }); }catch(e) { @@ -7752,11 +8491,11 @@ sync\(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number\): void; } ``` -### on ### +### on8+ ### -on\(event: 'syncComplete', syncCallback: Callback\>): void; +on(event: 'syncComplete', syncCallback: Callback\>): vo

-

设备状态改变时触发的事件名。

+

同步完成时触发的事件名。

syncCallback

-

Callback<Array<[string, number]>>>

+

Callback<Array<[string, number]>

@@ -7793,30 +8532,29 @@ on\(event: 'syncComplete', syncCallback: Callback\>): vo - 示例 - ``` const KEY_TEST_FLOAT_ELEMENT = 'key_test_float'; const VALUE_TEST_FLOAT_ELEMENT = 321.12; try { - kvStore.on('dataChange', 0, function (data) { - console.log('OnChange 0' + data) + kvStore.on('syncComplete', function (data) { + console.log('syncComplete ' + data) }); kvStore.put(KEY_TEST_FLOAT_ELEMENT, VALUE_TEST_FLOAT_ELEMENT).then((data) => { - console.log('OnChange put success'); + console.log('syncComplete put success'); }).catch((error) => { - console.log('OnChange put fail ' + error); + console.log('syncComplete put fail ' + error); }); }catch(e) { - console.log('OnChange put e ' + e); + console.log('syncComplete put e ' + e); } ``` -### off ### +### off8+ ### -off\(event: 'syncComplete', syncCallback: Callback>\): void; +off(event: 'syncComplete', syncCallback?: Callback>\): v

-

设备状态改变时触发的事件名。

+

同步完成时触发的事件名。

syncCallback

-

Callback<Array<[string, number]>>>

+

Callback<Array<[string, number]>

-

+

用于向调用方发送同步结果的回调。

@@ -7855,14 +8593,15 @@ off\(event: 'syncComplete', syncCallback: Callback>\): v - 示例 ``` + let kvStore; try { const func = function (data) { - console.log('OffChange 0' + data) + console.log('syncComplete ' + data) }; - kvStore.on('dataChange', 0, func); - kvStore.off('dataChange', func); + kvStore.on('syncComplete', func); + kvStore.off('syncComplete', func); }catch(e) { - console.log('OffChange001 e ' + e); + console.log('syncComplete e ' + e); } ``` @@ -7902,4 +8641,4 @@ off\(event: 'syncComplete', syncCallback: Callback>\): v - + \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/04.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" similarity index 91% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/04.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" index 470ad910215dfa6145e145066f35099704fe8274..c4dbb2d9bfa8829171003a61c964d7b3d4a752b9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/04.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/03.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223.md" @@ -1,6 +1,6 @@ --- title: 关系型数据库 -permalink: /pages/000b000303 +permalink: /pages/010c010503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 关系型数据库 @@ -45,7 +45,7 @@ getRdbStore(config: StoreConfig, version: number, callback: AsyncCallback<Rdb - 示例: ``` import dataRdb from '@ohos.data.rdb' - const STORE_CONFIG = { name: "RdbTest.db" } + const STORE_CONFIG = { name: "RdbTest.db"} const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" dataRdb.getRdbStore(STORE_CONFIG, 1, function (err, rdbStore) { rdbStore.executeSql(SQL_CREATE_TABLE) @@ -468,12 +468,12 @@ glob(field: string, value: string): RdbPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | string | 是 | 指示要与谓词匹配的值。 | + | value | string | 是 | 指示要与谓词匹配的值。
支持通配符,*表示0个、1个或多个数字或字符,?表示1个数字或字符。 | - 返回值: | 类型 | 说明 | | -------- | -------- | - | [RdbPredicates](#rdbpredicates) | 返回指定的Rdb谓词。 | + | [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 | - 示例: ``` @@ -1056,7 +1056,7 @@ query(rdbPredicates: RdbPredicates, columns: Array<string>, callback: Asyn | -------- | -------- | -------- | -------- | | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | | columns | Array<string> | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 | - + | callback | AsyncCallback<[ResultSet](/pages/010c010504)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | - 示例: ``` @@ -1070,7 +1070,7 @@ query(rdbPredicates: RdbPredicates, columns: Array<string>, callback: Asyn ### query -query(rdbPredicates: RdbPredicates, columns: Array<string>):Promise<ResultSet> +query(rdbPredicates: RdbPredicates, columns?: Array<string>):Promise<ResultSet> 根据指定条件查询数据库中的数据,结果以Promise形式返回。 @@ -1078,12 +1078,12 @@ query(rdbPredicates: RdbPredicates, columns: Array<string>):Promise<Res | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 | - | columns | Array<string> | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 | + | columns | Array<string> | 否 | 表示要查询的列。如果值为空,则查询应用于所有列。 | - 返回值: | 类型 | 说明 | | -------- | -------- | - + | Promise<[ResultSet](/pages/010c010504)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | - 示例: ``` @@ -1096,6 +1096,53 @@ query(rdbPredicates: RdbPredicates, columns: Array<string>):Promise<Res ``` +### querySql8+ + +querySql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallback<ResultSet>):void + +根据指定SQL语句查询数据库中的数据,结果以callback形式返回。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | sql | string | 是 | 指定要执行的SQL语句。 | + | bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | + | callback | AsyncCallback<[ResultSet](/pages/010c010504)> | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 | + +- 示例: + ``` + rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo'], function (err, resultSet) { + console.log(TAG + "resultSet column names:" + resultSet.columnNames) + console.log(TAG + "resultSet column count:" + resultSet.columnCount)}) + ``` + + +### querySql8+ + +querySql(sql: string, bindArgs?: Array<ValueType>):Promise<ResultSet> + +根据指定SQL语句查询数据库中的数据,结果以Promise形式返回。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | sql | string | 是 | 指定要执行的SQL语句。 | + | bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[ResultSet](/pages/010c010504)> | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 | + +- 示例: + ``` + let promise = rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo']) + promise.then((resultSet) => { + console.log(TAG + "resultSet column names:" + resultSet.columnNames) + console.log(TAG + "resultSet column count:" + resultSet.columnCount)}) + ``` + + ### executeSql executeSql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallback<void>):void @@ -1111,14 +1158,14 @@ executeSql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallbac - 示例: ``` - rdbStore.executeSql("DELETE FROM EMPLOYEE", function () { + rdbStore.executeSql("DELETE FROM EMPLOYEE", null, function () { console.info(TAG + 'delete done.')}) ``` ### executeSql -executeSql(sql: string, bindArgs: Array<ValueType>):Promise<void> +executeSql(sql: string, bindArgs?: Array<ValueType>):Promise<void> 执行包含指定参数但不返回值的SQL语句,结果以Promise形式返回。 @@ -1126,7 +1173,7 @@ executeSql(sql: string, bindArgs: Array<ValueType>):Promise<void> | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | sql | string | 是 | 指定要执行的SQL语句。 | - | bindArgs | Array<[ValueType](#valuetype)> | 是 | SQL语句中参数的值。 | + | bindArgs | Array<[ValueType](#valuetype)> | 否 | SQL语句中参数的值。 | - 返回值: | 类型 | 说明 | @@ -1139,8 +1186,6 @@ executeSql(sql: string, bindArgs: Array<ValueType>):Promise<void> promise.then(() => { console.info(TAG + 'delete done.')}) ``` - - ## StoreConfig 管理关系数据库配置。 @@ -1158,7 +1203,7 @@ executeSql(sql: string, bindArgs: Array<ValueType>):Promise<void> | -------- | -------- | | number | 表示值类型为数字。 | | string | 表示值类型为字符。 | -| boolean | 表示值类型为布尔值。 | +| boolean | 表示值类型为布尔值。| ## ValuesBucket diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/05.\347\273\223\346\236\234\351\233\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/04.\347\273\223\346\236\234\351\233\206.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/05.\347\273\223\346\236\234\351\233\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/04.\347\273\223\346\236\234\351\233\206.md" index be33925a003bd65ee1e714e2eda327f8bcca96b5..14cf65b8341a39f3d8cb234d227656ef2971135b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/05.\347\273\223\346\236\234\351\233\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/04.\347\273\223\346\236\234\351\233\206.md" @@ -1,6 +1,6 @@ --- title: 结果集 -permalink: /pages/000b000304 +permalink: /pages/010c010504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 结果集 @@ -19,7 +19,7 @@ date: 2021-12-30 18:31:36 ## 使用说明 -需要通过[RdbStore.query()](/pages/000b000303#query)获取resultSet对象。 +需要通过[RdbStore.query()](/pages/010c010503#query)获取resultSet对象。 ``` import dataRdb from '@ohos.data.rdb'; diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/06.DataAbility\350\260\223\350\257\215.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/05.DataAbility\350\260\223\350\257\215.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/06.DataAbility\350\260\223\350\257\215.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/05.DataAbility\350\260\223\350\257\215.md" index de2431e5b3a508563f6bca0a758d694f4bf40b0c..6ef4b40cb60cd085ea84d741daece879b9a31a72 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/06.DataAbility\350\260\223\350\257\215.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/05.DataAbility\350\260\223\350\257\215.md" @@ -1,6 +1,6 @@ --- title: DataAbility谓词 -permalink: /pages/000b000305 +permalink: /pages/010c010505 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # DataAbility 谓词 @@ -47,7 +47,7 @@ createRdbPredicates(name: string, dataAbilityPredicates: DataAbilityPredicates): - 返回值: | 类型 | 说明 | | -------- | -------- | - | rdb.[RdbPredicates](/pages/000b000303#rdbpredicates) | 返回RdbPredicates对象。 | + | rdb.[RdbPredicates](/pages/010c010503#rdbpredicates) | 返回RdbPredicates对象。 | - 示例: ``` @@ -75,7 +75,7 @@ equalTo(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -102,7 +102,7 @@ notEqualTo(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -414,8 +414,8 @@ between(field: string, low: ValueType, high: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | low | [ValueType](/pages/000b000303#valuetype) | 是 | 指示与谓词匹配的最小值。 | - | high | [ValueType](/pages/000b000303#valuetype) | 是 | 指示与谓词匹配的最大值。 | + | low | [ValueType](/pages/010c010503#valuetype) | 是 | 指示与谓词匹配的最小值。 | + | high | [ValueType](/pages/010c010503#valuetype) | 是 | 指示与谓词匹配的最大值。 | - 返回值: | 类型 | 说明 | @@ -442,8 +442,8 @@ notBetween(field: string, low: ValueType, high: ValueType): DataAbilityPredicate | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | low | [ValueType](/pages/000b000303#valuetype) | 是 | 指示与谓词匹配的最小值。 | - | high | [ValueType](/pages/000b000303#valuetype) | 是 | 指示与谓词匹配的最大值。 | + | low | [ValueType](/pages/010c010503#valuetype) | 是 | 指示与谓词匹配的最小值。 | + | high | [ValueType](/pages/010c010503#valuetype) | 是 | 指示与谓词匹配的最大值。 | - 返回值: | 类型 | 说明 | @@ -470,7 +470,7 @@ greaterThan(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -497,7 +497,7 @@ lessThan(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -524,7 +524,7 @@ greaterThanOrEqualTo(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -551,7 +551,7 @@ lessThanOrEqualTo(field: string, value: ValueType): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | [ValueType](/pages/000b000303#valuetype) | 是 | 指示要与谓词匹配的值。 | + | value | [ValueType](/pages/010c010503#valuetype) | 是 | 指示要与谓词匹配的值。 | - 返回值: | 类型 | 说明 | @@ -756,7 +756,7 @@ in(field: string, value: Array<ValueType>): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | Array<[ValueType](/pages/000b000303#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | + | value | Array<[ValueType](/pages/010c010503#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | - 返回值: @@ -784,7 +784,7 @@ notIn(field: string, value: Array<ValueType>): DataAbilityPredicates | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | | field | string | 是 | 数据库表中的列名。 | - | value | Array<[ValueType](/pages/000b000303#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | + | value | Array<[ValueType](/pages/010c010503#valuetype)> | 是 | 以ValueType型数组形式指定的要匹配的值。 | - 返回值: diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/06.\350\256\276\347\275\256\346\225\260\346\215\256\351\241\271\345\220\215\347\247\260.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/06.\350\256\276\347\275\256\346\225\260\346\215\256\351\241\271\345\220\215\347\247\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..f086c84d3e7ec6aebd1f1148746a1fa3853286f7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\346\225\260\346\215\256\347\256\241\347\220\206/06.\350\256\276\347\275\256\346\225\260\346\215\256\351\241\271\345\220\215\347\247\260.md" @@ -0,0 +1,118 @@ +--- +title: 设置数据项名称 +permalink: /pages/010c010506 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 设置数据项名称 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + + +本模块提供设置数据项的访问功能相关接口的说明及示例。 + + +## 导入模块 + +``` +import settings from '@ohos.settings'; +``` + + +## 权限 + +无 + + +## settings.getUri + +getUri(name: string): string + +获取数据项的URI。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | string | 是 | 数据项的名称。数据项名称分为以下两种:
  • 数据库中已存在的数据项,包括:
    • 亮度:'settings.screen.brightness'
    • 时间格式:'settings.time.format'
  • 开发者自行添加的数据项。
| + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 数据项的URI。 | + +- 示例: + ``` + // 获取数据项的URI + let urivar = settings.getUri('settings.screen.brightness'); + ``` + + +## settings.getValue + +getValue(dataAbilityHelper: DataAbilityHelper, name: string, defValue: string): string + +获取数据项的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | dataAbilityHelper | [DataAbilityHelper](/pages/010c010103) | 是 | 数据管理辅助类。 | + | name | string | 是 | 数据项的名称。数据项名称分为以下两种:
  • 数据库中已存在的数据项,包括:
    • 亮度:'settings.screen.brightness'
    • 时间格式:'settings.time.format'
  • 开发者自行添加的数据项。
| + | defValue | string | 是 | 默认值。由开发者设置,当未从数据库中查询到该数据时,则返回该默认值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回数据项的值。 | + +- 示例: + ``` + import featureAbility from '@ohos.featureAbility'; + + //获取数据项亮度的值(该数据项在数据库中已存在) + let brightness = 'settings.screen.brightness'; + let uri = settings.getUri(brightness); + let helper = featureAbility.acquireDataAbilityHelper(uri); + let value = settings.getValue(helper, brightness, '10'); + ``` + + +## settings.setValue + +setValue(dataAbilityHelper: DataAbilityHelper, name: string, value: string): boolean + +设置数据项的值。 +如果数据库中已经存在该数据项,则setValue方法将更新该数据项的值;如果数据库中尚未存在该数据项,则setValue方法将向数据库中插入该数据项。 + +使用此方法需获取ohos.permission.WRITE_SYSTEM_SETTING权限。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | dataAbilityHelper | [DataAbilityHelper](/pages/010c010103) | 是 | 数据管理辅助类。 | + | name | string | 是 | 数据项的名称。数据项名称分为以下两种:
  • 数据库中已存在的数据项,包括:
    • 亮度:'settings.screen.brightness'
    • 时间格式:'settings.time.format'
  • 开发者自行添加的数据项。
| + | value | string | 是 | 数据项的具体数值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回设置数据项的值是否成功的结果。true表示设置成功,false则表示设置失败。 | + +- 示例: + ``` + import featureAbility from '@ohos.featureAbility'; + + //更新数据项亮度的值(该数据项在数据库中已存在,故setValue方法将更新该数据项的值) + let brightness = 'settings.screen.brightness'; + let uri = settings.getUri(brightness); + let helper = featureAbility.acquireDataAbilityHelper(uri); + let ret = settings.setValue(helper, brightness, '100'); + ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..8bdc75caa14745dbc1d66ef3b719bb5d1ecb9d4d --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,2717 @@ +--- +title: 文件管理 +permalink: /pages/010c010601 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 文件管理 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 导入模块 + +``` +import fileio from '@ohos.fileio'; +``` + + +## 权限列表 + +无 + + +## 使用说明 + +使用该功能模块对文件/目录进行操作前,需要先获取其绝对路径,获取方式及其接口用法请参考:[Context模块的接口getOrCreateLocalDir](/pages/010c010108)。 + +“文件/目录绝对路径”=“应用目录路径”+“文件/目录名” + +通过上述接口获取到应用目录路径dir,文件名为“xxx.txt”,文件所在绝对路径为: + +``` +let path = dir + "/xxx.txt"; +``` + + +文件描述符fd: + + +``` +let fd = fileio.openSync(path); +``` + + +## fileio.stat + +stat(path: string): Promise<Stat> + +以异步方法获取文件信息,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待获取文件的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Stat](#stat)> | 表示文件的具体信息。 | + +- 示例: + ``` + let stat = await fileio.stat(path); + // example code in Stat + ``` + + +## fileio.stat + +stat(path:string, callback:AsyncCallback<Stat>): void + +以异步方法获取文件信息,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待获取文件的绝对路径。 | + | callback | AsyncCallback<[Stat](#stat)> | 是 | 异步获取文件的信息之后的回调。 | + +- 示例: + ``` + fileio.stat(path, function (err, stat) { + // example code in Stat + }); + ``` + + +## fileio.statSync + +statSync(path:string): Stat + +以同步方法获取文件的信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待获取文件的绝对路径。 | + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Stat](#stat) | 表示文件的具体信息。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + // example code in Stat + ``` + + +## fileio.opendir + +opendir(path: string): Promise<Dir> + +以异步方法打开文件目录,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件目录的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Dir](#dir)> | 返回Dir对象。 | + +- 示例: + ``` + let dir = fileio.opendir(path); + // example code in Dir + ``` + + +## fileio.opendir + +opendir(path: string, callback: AsyncCallback<Dir>): void + +以异步方法打开文件目录,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件目录的绝对路径。 | + | callback | AsyncCallback<[Dir](#dir)> | 是 | 异步打开文件目录之后的回调。 | + +- 示例: + ``` + fileio.opendir(path, function (err, dir) { + // example code in Dir struct + // use read/readSync/close + }); + ``` + + +## fileio.opendirSync + +opendirSync(path: string): Dir + +以同步方法打开文件目录。 + + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件目录的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Dir](#dir) | 返回Dir对象。 | + +- 示例: + ``` + let dir = fileio.opendirSync(path); + // example code in Dir struct + // use read/readSync/close + ``` + + +## fileio.access + +access(path: string, mode?: number): Promise<void> + +以异步方法检查当前进程是否可访问某文件,使用promise形式返回结果。 + +- 参数:. + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待访问文件的绝对路径。 | + | mode | number | 否 | 访问文件时的选项,可给定如下选项,以按位或的方式使用多个选项,默认给定0。
确认当前进程是否具有对应权限:
- 0:确认文件是否存在。
- 1:确认当前进程是否具有可执行权限。
- 2:确认当前进程是否具有写权限。
- 4:确认当前进程是否具有读权限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.access(path) + .then(function(err) { + // 文件存在,do something + }).catch(function(e) { + //若不符合条件则进入 + }); + ``` + + +## fileio.access + +access(path: String, mode?: number, callback: AsyncCallback<void>): void + +以异步方法检查当前进程是否可访问某文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待访问文件的绝对路径。 | + | mode | number | 否 | 访问文件时的选项,可给定如下选项,以按位或的方式使用多个选项,默认给定0。
确认当前进程是否具有对应权限:
- 0:确认文件是否存在。
- 1:确认当前进程是否具有可执行权限。
- 2:确认当前进程是否具有写权限。
- 4:确认当前进程是否具有读权限。 | + | callback | AsyncCallback<void> | 是 | 异步检查当前进程是否可访问某文件之后的回调。 | + +- 示例: + ``` + fileio.access(path, function (err) { + }); + ``` + + +## fileio.accessSync + +accessSync(path: string, mode?: number): void + +以同步方法检查当前进程是否可访问某文件。 + + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待访问文件的绝对路径。 | + | mode | number | 否 | 访问文件时的选项,可给定如下选项,以按位或的方式使用多个选项,默认给定0。
确认当前进程是否具有对应权限:
- 0:确认文件是否存在。
- 1:确认当前进程是否具有可执行权限。
- 2:确认当前进程是否具有写权限。
- 4:确认当前进程是否具有读权限。 | + +- 示例: + ``` + try { + fileio.accessSync(path); + } catch(e) { + //不符合条件则进入 + } + ``` + + +## fileio.close7+ + +close(fd: number):Promise<void> + +以异步方法关闭文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待关闭文件的文件描述符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + await fileio.close(fd); + ``` + + +## fileio.close7+ + +close(fd: number, callback:AsyncCallback<void>): void + +以异步方法关闭文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待关闭文件的文件描述符。 | + | callback | AsyncCallback<void> | 是 | 异步关闭文件之后的回调。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + await fileio.close(fd, function (err) { + }); + ``` + + +## fileio.closeSync + +closeSync(fd: number): void + +以同步方法关闭文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待关闭文件的文件描述符。 | + +- 示例: + ``` + fileio.closeSync(fd); + ``` + + +## fileio.close7+ + +close(): Promise<void> + +以异步方法关闭文件流,使用promise形式返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.close(); + ``` + + +## fileio.close7+ + +close(callback: AsyncCallback<void>): void + +以异步方法关闭文件流,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 异步关闭文件流之后的回调。 | + +- 示例: + ``` + await fileio.close(function(err){ + }); + ``` + + +## fileio.copyFile + +copyFile(src:string | number, dest:string | number, mode?:number):Promise<void> + +以异步方法复制文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | string \| number | 是 | 待复制文件的路径或待复制文件的描述符。 | + | dest | string \| number | 是 | 目标文件路径或目标文件描述符。 | + | mode | number | 否 | mode提供覆盖文件的选项,当前仅支持0,且默认为0。
0:完全覆盖目标文件,未覆盖部分将被裁切掉。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + await fileio.copyFile(src, dest); + ``` + + +## fileio.copyFile + +copyFile(src:string | number, dest:string | number, mode?: number, callback: AsyncCallbak<void>): void + +以异步方法复制文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | string \| number | 是 | 待复制文件的路径或待复制文件的描述符。 | + | dest | string \| number | 是 | 目标文件路径或目标文件描述符。 | + | mode | number | 否 | mode提供覆盖文件的选项,当前仅支持0,且默认为0。
0:完全覆盖目标文件,未覆盖部分将被裁切掉。 | + | callback | AsyncCallback<void> | 是 | 异步复制文件之后的回调。 | + +- 示例: + ``` + await fileio.copyFile(src, dest, function (err) { + }); + ``` + + +## fileio.copyFileSync + +fileio.copyFileSync(src:string | number, dest:string | number, mode?:number): void + +以同步方法复制文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | string \| number | 是 | 待复制文件的路径或待复制文件的描述符。 | + | dest | string \| number | 是 | 目标文件路径或目标文件描述符。 | + | mode | number | 否 | mode提供覆盖文件的选项,当前仅支持0,且默认为0。
0:完全覆盖目标文件,未覆盖部分将被裁切掉。 | + +- 示例: + ``` + fileio.copyFileSync(src, dest); + ``` + + +## fileio.mkdir + +mkdir(path:string, mode?: number): Promise<void> + +以异步方法创建目录,使用promise形式返回结果。 + + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待创建目录的绝对路径。 | + | mode | number | 否 | 创建目录的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o775。
- 0o775:所有者具有读、写及可执行权限,其余用户具有读及可执行权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + await fileio.mkdir(path) + .then(function(err) { + // 目录创建成功,do something + }).catch(function (e){ + }); + ``` + + +## fileio.mkdir + +mkdir(path:string, mode?:number, callback:AsyncCallbak<void>): void + +以异步方法创建目录,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待创建目录的绝对路径。 | + | mode | number | 否 | 创建目录的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o775。
- 0o775:所有者具有读、写及可执行权限,其余用户具有读及可执行权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + | callback | AsyncCallback<void> | 是 | 异步创建目录操作完成之后的回调。 | + +- 示例: + ``` + await fileio.mkdir(path, function(err) { + if (!err) { + // do something + } + }); + ``` + + +## fileio.mkdirSync + +fileio.mkdirSync(path: string, mode?: number): void + +以同步方法创建目录。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待创建目录的绝对路径。 | + | mode | number | 否 | 创建目录的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o775。
- 0o775:所有者具有读、写及可执行权限,其余用户具有读及可执行权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 示例: + ``` + fileio.mkdirSync(path); + ``` + + +## fileio.open7+ + +open(path: string, flags?: number, mode?: number): Promise<number> + +以异步的方法打开文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | flags | number | 否 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开:
- 0o0:只读打开。
- 0o1:只写打开。
- 0o2:读写打开。
同时,也可给定如下选项,以按位或的方式追加,默认不给定任何额外选项:
- 0o100:若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。
- 0o200:如果追加了0o100选项,且文件已经存在,则出错。
- 0o1000:如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。
- 0o2000:以追加方式打开,后续写将追加到文件末尾。
- 0o4000:如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续 IO 进行非阻塞操作。
- 0o200000:如果path指向目录,则出错。
- 0o400000:如果path指向符号链接,则出错。
- 0o4010000:以同步IO的方式打开文件。 | + | mode | number | 否 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o666。
- 0o666:所有者具有读、写权限,所有用户组具有读、写权限,其余用户具有读、写权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 打开文件的文件描述符。 | + +- 示例: + ``` + let fd = await fileio.open(path, 0o1, 0o0200); + ``` + + +## fileio.open7+ + +open(path: string, flags: number, mode: number, callback: AsyncCallback<number>): void + +以异步的方法打开文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | flags | number | 是 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开:
- 0o0:只读打开。
- 0o1:只写打开。
- 0o2:读写打开。
同时,也可给定如下选项,以按位或的方式追加,默认不给定任何额外选项:
- 0o100:若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。
- 0o200:如果追加了0o100选项,且文件已经存在,则出错。
- 0o1000:如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。
- 0o2000:以追加方式打开,后续写将追加到文件末尾。
- 0o4000:如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续 IO 进行非阻塞操作。
- 0o200000:如果path指向目录,则出错。
- 0o400000:如果path指向符号链接,则出错。
- 0o4010000:以同步IO的方式打开文件。 | + | mode | number | 是 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o666。
- 0o666:所有者具有读、写权限,所有用户组具有读、写权限,其余用户具有读、写权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + | callback | AsyncCallback <void> | 是 | 异步打开文件之后的回调。 | + +- 示例: + ``` + await fileio.open(path, 0, function(err, fd) { + }); + ``` + + +## fileio.openSync + +openSync(path:string, flags?:number, mode?:number): number + +以同步方法打开文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | flags | number | 否 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开:
- 0o0:只读打开。
- 0o1:只写打开。
- 0o2:读写打开。
同时,也可给定如下选项,以按位或的方式追加,默认不给定任何额外选项:
- 0o100:若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。
- 0o200:如果追加了0o100选项,且文件已经存在,则出错。
- 0o1000:如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。
- 0o2000:以追加方式打开,后续写将追加到文件末尾。
- 0o4000:如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续 IO 进行非阻塞操作。
- 0o200000:如果path指向目录,则出错。
- 0o400000:如果path指向符号链接,则出错。
- 0o4010000:以同步IO的方式打开文件。 | + | mode | number | 否 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o666。
- 0o666:所有者具有读、写权限,所有用户组具有读、写权限,其余用户具有读、写权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 打开文件的文件描述符。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + ``` + + +## fileio.read + +read(fd: number, buffer: ArrayBuffer, options?: Object): Promise<Readout> + +以异步方法从文件读取数据,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待读取文件的文件描述符。 | + | buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Readout](#readout)> | 读取的结果。 | + +- 示例: + ``` + let fd = fileio.openSync(path, 0o2); + let buf = new ArrayBuffer(4096); + let res = await fileio.read(fd, buf); + ``` + + +## fileio.read + +read(fd: number, buffer: ArrayBuffer, options?: Object, callback: AsyncCallback<Readout>): void + +以异步方法从文件读取数据,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待读取文件的文件描述符。 | + | buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + | callback | AsyncCallback<[Readout](#readout)> | 是 | 异步读取数据之后的回调。 | + +- 示例: + ``` + let fd = fileio.openSync(path, 0o2); + let buf = new ArrayBuffer(4096); + await fileio.read(fd, buf, function (err, readOut) { + if (!err) { + console.log(String.fromCharCode.apply(null, new Uint8Array(readOut.buffer))) + } + }); + ``` + + +## fileio.readSync + +readSync(fd: number, buffer: ArrayBuffer, options?: Object): number + +以同步方法从文件读取数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待读取文件的文件描述符。 | + | buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 实际读取的长度。 | + +- 示例: + ``` + let fd = fileio.openSync(path, 0o2); + let buf = new ArrayBuffer(4096); + let num = fileio.readSync(fd, buf); + ``` + + +## fileio.rmdir7+ + +rmdir(path: string): Promise<void> + +以异步方法删除目录,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除目录的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.rmdir(path) + .then(function(err) { + // 删除目录成功,do something + }).catch(function(e){ + }); + ``` + + +## fileio.rmdir7+ + +rmdir(path: string, callback:AsyncCallback<void>): void + +以异步方法删除目录,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除目录的绝对路径。 | + | callback | AsyncCallback<void> | 是 | 异步删除目录之后的回调。 | + +- 示例: + ``` + fileio.rmdir(path, function(err){ + }); + ``` + + +## fileio.rmdirSync + +rmdirSync(path:string) + +以同步方法删除目录。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除目录的绝对路径。 | + +- 示例: + ``` + fileio.rmdirSync(path); + ``` + + +## fileio.unlink + +unlink(path:string): Promise<void> + +以异步方法删除文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除文件的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + await fileio.unlink(path); + ``` + + +## fileio.unlink + +unlink(path:string, callback:AsyncCallback<void>): void + +以异步方法删除文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除文件的绝对路径。 | + | callback | AsyncCallback<void> | 是 | 异步删除文件之后的回调。 | + +- 示例: + ``` + await fileio.unlink(path, function(err) { + if (!err) { + // do something + } + }); + ``` + + +## fileio.unlinkSync + +unlinkSync(path: string): void + +以同步方法删除文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待删除文件的绝对路径。 | + +- 示例: + ``` + fileio.unlinkSync(path); + ``` + + +## fileio.write + +write(fd: number, buffer: ArrayBuffer | string, options?: Object): Promise<number> + +以异步方法将数据写入文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待写入文件的文件描述符。 | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 实际写入的长度。 | + +- 示例: + ``` + let fd = fileio.openSync(fpath, 0o100 | 0o2, 0o666); + let num = await fileio.write(fd, "hello, world"); + ``` + + +## fileio.write + +write(fd:number, buffer:ArrayBuffer | string,options?:Object, callback:AsyncCallback<number>): void + +以异步方法将数据写入文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待写入文件的文件描述符。 | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + | callback | AsyncCallback<number> | 是 | 异步将数据写入完成后执行的回调函数。 | + +- 示例: + ``` + let fd = fileio.openSync(path, 0o100 | 0o2, 0o666); + fileio.write(fd, "hello, world", function (err, bytesWritten) { + if (!err) { + console.log(bytesWritten) + } + }); + ``` + + +## fileio.writeSync + +writeSync(fd: number, buffer: ArrayBuffer | string, options?:Object): number + +以同步方法将数据写入文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待写入文件的文件描述符。 | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 实际写入的长度。 | + +- 示例: + ``` + let fd = fileio.openSync(path, 0o100 | 0o2, 0o666); + let num = fileio.writeSync(fd, "hello, world"); + ``` + + +## fileio.hash + +hash(path: string, algorithm: string): Promise<string> + +以异步方法计算文件的哈希值,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待计算哈希值文件的绝对路径。 | + | algorithm | string | 是 | 哈希计算采用的算法。可选 "md5"、"sha1" 或 "sha256"。建议采用安全强度更高的 "sha256"。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<string> | 文件的哈希值。表示为十六进制数字串,所有字母均大写。 | + +- 示例: + ``` + let hashStr = await fileio.hash(path, "sha256"); + ``` + + +## fileio.hash + +hash(psth:string, algorithm:string, callback:AsyncCallback<string>): void + +以异步方法计算文件的哈希值,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待计算哈希值文件的绝对路径。 | + | algorithm | string | 是 | 哈希计算采用的算法。可选 "md5"、"sha1" 或 "sha256"。建议采用安全强度更高的 "sha256"。 | + | callback | AsyncCallback<string> | 是 | 异步计算文件哈希操之后的回调函数(其中给定文件哈希值表示为十六进制数字串,所有字母均大写)。 | + +- 示例: + ``` + fileio.hash(fpath, "sha256", function(err, hashStr) { + if (!err) { + console.log(hashStr) + } + }); + ``` + + +## fileio.chmod7+ + +chmod(path: string, mode: number):Promise<void> + +以异步方法基于文件路径改变文件权限,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件权限的绝对路径。 | + | mode | number | 是 | 改变文件权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.chmod(path, mode) + .then(function(err) { + // 改变文件权限成功,do something + }).catch(function(e){ + }); + ``` + + +## fileio.chmod7+ + +chmod(path: string, mode: number, callback: AsyncCallback<void>): void + +以异步方法基于文件路径改变文件权限,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件权限的绝对路径。 | + | mode | number | 是 | 改变文件权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + | callback | AsyncCallback<void> | 是 | 异步改变文件权限之后的回调。 | + +- 示例: + ``` + fileio.chmod(path, mode, function (err) { + }); + ``` + + +## fileio.chmodSync7+ + +chmodSync(path: string, mode: number): void + +以同步方法基于文件路径改变文件权限。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件权限的绝对路径。 | + | mode | number | 是 | 改变文件权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 示例: + ``` + fileio.chmodSync(fpath, mode); + ``` + + +## fileio.fstat7+ + +fstat(fd: number): Promise<Stat> + +以异步方法基于文件描述符获取文件状态信息,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待获取文件的文件描述符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Stat](#stat)> | 表示文件的具体信息。 | + +- 示例: + ``` + let stat = await fileio.fstat(fd); + ``` + + +## fileio.fstat7+ + +fstat(fd: number, callback: AsyncCallback<Stat>): void + +以异步方法基于文件描述符获取文件状态信息,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待获取文件的文件描述符。 | + | callback | AsyncCallback<[Stat](#stat)> | 是 | 异步获取文件状态信息之后的回调。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + fileio.fstat(fd, function (err) { + }); + ``` + + +## fileio.fstatSync7+ + +fstatSync(fd: number): Stat + +以同步方法基于文件描述符获取文件状态信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待获取文件的文件描述符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Stat](#stat) | 表示文件的具体信息。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + let stat = fileio.fstatSync(fd); + ``` + + +## fileio.ftruncate7+ + +ftruncate(fd: number, len: number): Promise<void> + +以异步方法基于文件描述符截断文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待截断文件的文件描述符。 | + | len | number | 是 | 文件截断后的长度,以字节为单位。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + let fd = fileio.openSync(path); + fileio.ftruncate(fd, 5) + .then(function(err) { + // 截断文件成功, do something + }).catch(function(e){ + }); + ``` + + +## fileio.ftruncate7+ + +ftruncate(fd: number, len: number, callback:AsyncCallback<void>): void + +以异步方法基于文件描述符截断文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待截断文件的文件描述符。 | + | len | number | 是 | 文件截断后的长度,以字节为单位。 | + | callback | AsyncCallback<void> | 是 | 异步截断文件的信息之后的回调。 | + +- 示例: + ``` + fileio.ftruncate(fd, len, function(err){ + }); + ``` + + +## fileio.ftruncateSync7+ + +ftruncateSync(fd: number, len?: number): void + +以同步方法基于文件描述符截断文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待截断文件的文件描述符。 | + | len | number | 否 | 文件截断后的长度,以字节为单位。 | + +- 示例: + ``` + fileio.ftruncate(fd, len); + ``` + + +## fileio.truncate7+ + +truncate(path: string, len: number): Promise<void> + +以异步方法基于文件路径截断文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待截断文件的绝对路径。 | + | len | number | 是 | 文件截断后的长度,以字节为单位。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.truncate(path, len) + .then(function(err) { + // 截断文件成功,do something + }).catch(function(e){ + }); + ``` + + +## fileio.truncate7+ + +truncate(path: string, len: number, callback:AsyncCallback<void>): void + +以异步方法基于文件路径截断文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待截断文件的绝对路径。 | + | len | number | 是 | 文件截断后的长度,以字节为单位。 | + | callback | AsyncCallback<void> | 是 | 异步截断文件的信息之后的回调。 | + +- 示例: + ``` + fileio.truncate(path, len, function(err){ + }); + ``` + + +## fileio.truncateSync7+ + +truncateSync(fpath: string, len?: number): void + +以同步方法基于文件路径截断文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待截断文件的绝对路径。 | + | len | number | 否 | 文件截断后的长度,以字节为单位。 | + +- 示例: + ``` + fileio.ftruncate(path, len); + ``` + + +## fileio.readText7+ + +readText(filePath: string, options?:Object): Promise<string> + +以异步方法基于文本方式读取文件(即直接读取文件的文本内容),使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | filePath | string | 是 | 待读取文件的绝对路径。 | + | options | Object | 否 | 支持如下选项:
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读取。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<string> | 返回读取文件的内容。 | + +- 示例: + ``` + fileio.readText(path) + .then(function(str) { + // 读取文件成功,do something + }).catch(function(e){ + }); + ``` + + +## fileio.readText7+ + +readText(filePath: string, options?:Object, callback:AsyncCallback<string>): void + +以异步方法基于文本方式读取文件(即直接读取文件的文本内容),使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | filePath | string | 是 | 待读取文件的绝对路径。 | + | options | Object | 否 | 支持如下选项:
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读取。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | + | callback | AsyncCallback<string> | 是 | 异步通过文本方式读取文件之后的回调。 | + +- 示例: + ``` + fileio.readText(path, function(err, str){ + }); + ``` + + +## fileio.readTextSync7+ + +readTextSync(filePath: string, options?:Object): string + +以同步方法基于文本方式读取文件(即直接读取文件的文本内容)。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | filePath | string | 是 | 待读取文件的绝对路径。 | + | options | Object | 否 | 支持如下选项:
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读取。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<string> | 返回读取文件的内容。 | + +- 示例: + ``` + let str = fileio.readTextSync(path, {position: pos, length: len}); + ``` + + +## fileio.lstat7+ + +lstat(path: string): Promise<Stat> + +以异步方法获取链接状态信息,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 目标文件的绝对路径,指向链接状态。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Stat](#stat)> | 表示文件的具体信息。 | + +- 示例: + ``` + let stat = await fileio.lstat(path); + ``` + + +## fileio.lstat7+ + +lstat(path:string, callback:AsyncCallback<Stat>): void + +以异步方法获取链接状态信息,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 目标文件的绝对路径,指向链接状态。 | + | callback | AsyncCallback<[Stat](#stat)> | 是 | 异步获取链接状态信息之后的回调。 | + +- 示例: + ``` + fileio.lstat(path, function (err, stat) { + )); + ``` + + +## fileio.lstatSync7+ + +lstatSync(path:string): Stat + +以同步方法获取链接状态信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 目标文件的绝对路径,指向链接状态。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Stat](#stat) | 表示文件的具体信息。 | + +- 示例: + ``` + let stat = fileio.lstatSync(path); + ``` + + +## fileio.read7+ + +read(buffer: ArrayBuffer, options?: Object): Promise<Readout> + +以异步方法从文件读取数据,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Readout](#readout)> | 读取的结果。 | + +- 示例: + ``` + let readout = await fileio.read(new ArrayBuffer(4096)); + ``` + + +## fileio.read7+ + +read(buffer: ArrayBuffer, options?: Object, callback: AsyncCallback<Readout>): void + +异步方法从文件读取数据,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。 | + | callback | AsyncCallback<[Readout](#readout)> | 是 | 异步从文件读取数据之后的回调。 | + +- 示例 + ``` + let buf = new ArrayBuffer(4096); + fileio.read(buf, function (err, readOut) { + if (!err) { + console.log(String.fromCharCode.apply(null, new Uint8Array(readOut.buffer))) + } + }); + ``` + + +## fileio.rename7+ + +rename(oldPath: string, newPath: string): Promise<void> + +以异步方法重命名文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | oldPath | string | 是 | 目标文件的当前绝对路径。 | + | Newpath | String | 是 | 目标文件的新绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + fileio.rename(oldPath, Newpath) + .then(function(err) { + // 重命名文件成功,do something + }).catch(function(e){ + + }); + ``` + + +## fileio.rename7+ + +rename(oldPath: string, newPath: string, callback: AsyncCallback<void>): void + +以异步方法重命名文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | oldpath | string | 是 | 目标文件的当前绝对路径。 | + | Newpath | String | 是 | 目标文件的新绝对路径。 | + | Callback | AsyncCallback<void> | 是 | 异步重命名文件之后的回调。 | + +- 示例: + ``` + fileio.rename(oldpath, Newpath, function(err){ + }); + ``` + + +## fileio.renameSync7+ + +renameSync(oldPath: string, newPath: string): void + +以同步方法重命名文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | oldPath | string | 是 | 目标文件的当前绝对路径。 | + | Newpath | String | 是 | 目标文件的新绝对路径。 | + +- 示例: + ``` + fileio.renameSync(oldpath, newpath); + ``` + + +## fileio.fsync7+ + +fsync(fd: number): Promise<void> + +以异步方法同步文件数据,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + await fileio.fsync(fd); + ``` + + +## fileio.fsync7+ + +fsync(fd: number, callback: AsyncCallback<void>): void + +以异步方法同步文件数据,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + | Callback | AsyncCallback<void> | 是 | 异步将文件数据同步之后的回调。 | + +- 示例: + ``` + fileio.fsync(fd, function(err){ + }); + ``` + + +## fileio.fsyncSync7+ + +fsyncSync(fd: number): void + +以同步方法同步文件数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + +- 示例: + ``` + fileio.fyncsSync(fd); + ``` + + +## fileio.fdatasync7+ + +fdatasync(fd: number): Promise<void> + +以异步方法实现文件内容数据同步,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果,本调用将返回空值。 | + +- 示例: + ``` + fileio.fdatasync(fd) + .then(function(err) { + // 数据同步成功,do something + }).catch(function(e){ + }); + ``` + + +## fileio.fdatasync7+ + +fdatasync(fd: number, callback:AsyncCallback<void>): void + +以异步方法实现文件内容数据同步,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + | callback | AsyncCallback <void> | 是 | 异步将文件内容数据同步之后的回调。 | + +- 示例: + ``` + fileio.fdatasync (fd, function (err) { + }); + ``` + + +## fileio.fdatasyncSync7+ + +fdatasyncSync(fd: number): void + +以同步方法实现文件内容数据同步。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待同步文件的文件描述符。 | + +- 示例: + ``` + let stat = fileio.fdatasyncSync(fd); + ``` + + +## fileio.symlink7+ + +symlink(target: string, srcPath: string): Promise<void> + +以异步方法基于文件路径创建符号链接,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | target | string | 是 | 目标文件的绝对路径。 | + | srcPath | string | 是 | 符号链接文件的绝对路径。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果,本调用将返回空值。 | + +- 示例: + ``` + fileio.symlink(target, srcPath) + .then(function(err) { + // 创建符号链接成功,do something + }).catch(function(e){ + + }); + ``` + + +## fileio.symlink7+ + +symlink(target: string, srcPath: string, callback: AsyncCallback<void>): void + +以异步方法基于文件路径创建符号链接,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | target | string | 是 | 目标文件的绝对路径。 | + | srcPath | string | 是 | 符号链接文件的绝对路径。 | + | callback | AsyncCallback<void> | 是 | 异步创建符号链接信息之后的回调。 | + +- 示例: + ``` + fileio.symlink(target, srcPath, function (err) { + }); + ``` + + +## fileio.symlinkSync7+ + +symlinkSync(target: string, srcPath: string): void + +以同步的方法基于文件路径创建符号链接。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | target | string | 是 | 目标文件的绝对路径。 | + | srcPath | string | 是 | 符号链接文件的绝对路径。 | + +- 示例: + ``` + fileio.symlinkSync(target, srcPath); + ``` + + +## fileio.chown7+ + +chown(path: string, uid: number, gid: number): Promise<void> + +以异步的方法基于文件路径改变文件所有者,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件的绝对路径。 | + | uid | number | 是 | 新的UID(UserID)。 | + | gid | number | 是 | 新的GID(GroupID)。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果,本调用将返回空值。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + await fileio.chown(path, stat.uid, stat.gid)); + ``` + + +## fileio.chown7+ + +chown(path: string, uid: number, gid: number, callback: AsyncCallback<void>): void + +以异步的方法基于文件路径改变文件所有者,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件的绝对路径。 | + | uid | number | 是 | 新的UID。 | + | gid | number | 是 | 新的GID。 | + | callback | AsyncCallback<void> | 是 | 异步改变文件所有者之后的回调。 | + +- 示例: + ``` + let stat = fileio.statSync(fpath) + fileio.chown(path, stat.uid, stat.gid, function (err){ + }); + ``` + + +## fileio.chownSync7+ + +chownSync(path: string, uid: number, gid: number): void + +以同步的方法基于文件路径改变文件所有者。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待改变文件的绝对路径。 | + | uid | number | 是 | 新的UID。 | + | gid | number | 是 | 新的GID。 | + +- 示例: + ``` + let stat = fileio.statSync(fpath) + fileio.chownSync(path, stat.uid, stat.gid); + ``` + + +## fileio.mkdtemp7+ + +mkdtemp(prefix: string): Promise<string> + +以异步的方法创建临时目录,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | prefix | string | 是 | 用随机产生的字符串替换以“XXXXXX”结尾目录路径。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | Promise<string> | 生成的唯一目录路径。 | + +- 示例: + ``` + let res = await fileio.mkdtempSync(path + "XXXX"); + ``` + + +## fileio.mkdtemp7+ + +mkdtemp(prefix: string, callback: AsyncCallback<string>): void + +以异步的方法创建临时目录,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | prefix | string | 是 | 用随机产生的字符串替换以“XXXXXX”结尾目录路径。 | + | callback | AsyncCallback<string> | 是 | 异步创建临时目录之后的回调。 | + +- 示例: + ``` + fileio.mkdtemp(path + "XXXX", function (err, res) { + }); + ``` + + +## fileio.mkdtempSync7+ + +mkdtempSync(prefix: string): string + +以同步的方法创建临时目录。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | prefix | string | 是 | 用随机产生的字符串替换以“XXXXXX”结尾目录路径。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | string | 产生的唯一目录路径。 | + +- 示例: + ``` + let res = fileio.mkdtempSync(path + "XXXX"); + ``` + + +## fileio.fchmod7+ + +fchmod(fd: number, mode: number): Promise<void> + +以异步方法基于文件描述符改变文件权限,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | mode | number | 是 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果,本调用将返回空值。 | + +- 示例: + ``` + fileio.fchmod(fd, mode) + .then(function(err) { + // 改变文件权限成功,do something + }).catch(function(e){ + + }); + ``` + + +## fileio.fchmod7+ + +fchmod(fd: number, mode: number, callback: AsyncCallback<void>): void + +以异步方法基于文件描述符改变文件权限,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | mode | number | 是 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + | callback | AsyncCallback <void> | 是 | 异步改变文件权限之后的回调。 | + +- 示例: + ``` + fileio.fchmod(fd, mode, function (err) { + }); + ``` + + +## fileio.fchmodSync7+ + +fchmodSync(existingPath: string, newPath: string): void + +以同步方法基于文件描述符改变文件权限。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | mode | number | 是 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | + +- 示例: + ``` + fileio.fchmodSync(fd, mode); + ``` + + +## fileio.createStream7+ + +createStream(path: string, mode: string): Promise<Stream> + +以异步方法基于文件路径打开文件流,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Stream](#stream7)> | 返回文件流的结果。 | + +- 示例: + ``` + let ss = filrio.createStream(path, "r+"); + ``` + + +## fileio.createStream7+ + +createStream(path: string, mode: string, callback: AsyncCallback<Stream>): void + +以异步方法基于文件路径打开文件流,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + | callback | AsyncCallback<[Stream](#stream7)> | 是 | 异步打开文件流之后的回调。 | + +- 示例: + ``` + fileio.createStream(path, mode, function(err, stream){ + }); + ``` + + +## fileio.createStreamSync7+ + +createStreamSync(path: string, mode: string): Stream + +以同步方法基于文件路径打开文件流。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | [Stream](#stream7) | 返回文件流的结果。 | + +- 示例: + ``` + let ss = fileio.createStreamSync(path, "r+"); + ``` + + +## fileio.fdopenStream7+ + +fdopenStream(fd: number, mode: string): Promise<Stream> + +以异步方法基于文件描述符打开文件流,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待打开文件的文件描述符。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | Promise<[Stream](#stream7)> | 返回文件流的结果。 | + +- 示例: + ``` + let fp = await fileio.fdopenStream(fd, mode); + ``` + + +## fileio.fdopenStream7+ + +fdopenStream(fd: number, mode: string, callback: AsyncCallback<Stream>): void + +以异步方法基于文件描述符打开文件流,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待打开文件的文件描述符。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + | callback | AsyncCallback <[Stream](#stream7)> | 是 | 异步打开文件流之后的回调。 | + +- 示例: + ``` + fileio.fdopenStream(fd, mode, function (err, fp) { + }); + ``` + + +## fileio.fdopenStreamSync7+ + +fdopenStreamSync(fd: number, mode: string): Stream + +以同步方法基于文件描述符打开文件流。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待打开文件的文件描述符。 | + | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | [Stream](#stream7) | 返回文件流的结果。 | + +- 示例: + ``` + let ss = fileio.fdopenStreamSync(fd, "r+"); + ``` + + +## fileio.fchown7+ + +fchown(fd: number, uid: number, gid: number): Promise<void> + +以异步方法基于文件描述符改变文件所有者,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | uid | number | 是 | 文件所有者的UID。 | + | gid | number | 是 | 文件所有组的GID。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + fileio.fchown(fd, stat.uid, stat.gid) + .then(function(err) { + // 改变文件所有者成功,do something + }).catch(function(e){ + + }); + ``` + + +## fileio.fchown7+ + +fchown(fd: number, uid: number, gid: number, callback: AsyncCallback<void>): void + +以异步方法基于文件描述符改变文件所有者,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | uid | number | 是 | 文件所有者的UID。 | + | gid | number | 是 | 文件所有组的GID。 | + | callback | AsyncCallback<void> | 是 | 异步改变文件所有者之后的回调。 | + +- 示例: + ``` + let stat = fileio.statSync(fpath); + fileio.fchown(fd, stat.uid, stat.gid, function (err){ + }); + ``` + + +## fileio.fchownSync7+ + +fchownSync(fd: number, uid: number, gid: number): void + +以同步方法基于文件描述符改变文件所有者。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fd | number | 是 | 待改变文件的文件描述符。 | + | uid | number | 是 | 文件所有者的UID。 | + | gid | number | 是 | 文件所有组的GID。 | + +- 示例: + ``` + let stat = fileio.statSync(fpath); + fileio.fchownSync(fd, stat.uid, stat.gid); + ``` + + +## fileio.lchown7+ + +lchown(path: string, uid: number, gid: number): Promise<void> + +以异步方法基于文件路径改变文件所有者,更改符号链接本身的所有者,而不是符号链接所指向的实际文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | uid | number | 是 | 新的UID。 | + | gid | number | 是 | 新的GID。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise实例,用于异步获取结果。本调用将返回空值。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + fileio.lchown(path, stat.uid, stat.gid) + .then(function(err) { + // 改变文件所有者,do something + }).catch(function(e){ + + }); + ``` + + +## fileio.lchown7+ + +lchown(path: string, uid: number, gid: number, callback: AsyncCallback<void>): void + +以异步方法基于文件路径改变文件所有者,更改符号链接本身的所有者,而不是更改符号链接所指向的实际文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | uid | number | 是 | 新的UID。 | + | gid | number | 是 | 新的GID。 | + | callback | AsyncCallback<void> | 是 | 异步改变文件所有者之后的回调。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + fileio.lchown(path, stat.uid, stat.gid, function (err){ + }); + ``` + + +## fileio.lchownSync7+ + +lchownSync(path: string, uid: number, gid: number): void + +以同步方法基于文件路径改变文件所有者,更改符号链接本身的所有者,而不是更改符号链接所指向的实际文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 待打开文件的绝对路径。 | + | uid | number | 是 | 新的UID。 | + | gid | number | 是 | 新的GID。 | + +- 示例: + ``` + let stat = fileio.statSync(path); + fileio.lchownSync(path, stat.uid, stat.gid); + ``` + + +## fileio.createWatcher7+ + +createWatcher(filename: string, events: number, callback: AsyncCallback<number>): Watcher + +以异步方法监听文件或者目录的变化,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | filename | string | 是 | 待监视文件的绝对路径。 | + | events | Number | 是 | - 1: 监听文件或者目录是否发生重命名。
- 2:监听文件或者目录内容的是否修改。
- 3:两者都有。 | + | callback | AsyncCallback<number > | 是 | 每发生变化一次,调用一次此函数。 | + +- 返回值: + | 参数名 | 说明 | + | -------- | -------- | + | [Watcher](#watcher7) | 文件变化监听的实例。 | + +- 示例: + ``` + let ob = await fileio.createWatcher(filename, events, function(event){ + }); + ``` + + +## Readout + +仅用于read方法,获取文件的读取结果。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| bytesRead | number | 是 | 是 | 实际读取长度。 | +| offset | number | 是 | 是 | 读取数据相对于缓冲区首地址的偏移。 | +| buffer | ArrayBufer | 是 | 是 | 保存读取数据的缓冲区。 | + + +## Stat + +文件具体信息,在调用Stat的方法前,需要先通过[stat()](#fileiostat)方法(同步或异步)来构建一个Stat实例。 + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| dev | number | 是 | 否 | 标识包含该文件的主设备号。 | +| ino | number | 是 | 否 | 标识该文件。通常同设备上的不同文件的INO不同。 | +| mode | number | 是 | 否 | 表示文件类型及权限,其首 4 位表示文件类型,后 12 位表示权限。各特征位的含义如下:
- 0o170000:可用于获取文件类型的掩码。
- 0o140000:文件是套接字。
- 0o120000:文件是符号链接。
- 0o100000:文件是一般文件。
- 0o060000:文件属于块设备。
- 0o040000:文件是目录。
- 0o020000:文件是字符设备。
- 0o010000:文件是具名管道,即FIFO。
- 0o0700:可用于获取用户权限的掩码。
- 0o0400:用户读,对于普通文件,所有者可读取文件;对于目录,所有者可读取目录项。
- 0o0200:用户写,对于普通文件,所有者可写入文件;对于目录,所有者可创建/删除目录项。
- 0o0100:用户执行,对于普通文件,所有者可执行文件;对于目录,所有者可在目录中搜索给定路径名。
- 0o0070:可用于获取用户组权限的掩码。
- 0o0040:用户组读,对于普通文件,所有用户组可读取文件;对于目录,所有用户组可读取目录项。
- 0o0020:用户组写,对于普通文件,所有用户组可写入文件;对于目录,所有用户组可创建/删除目录项。
- 0o0010:用户组执行,对于普通文件,所有用户组可执行文件;对于目录,所有用户组是否可在目录中搜索给定路径名。
- 0o0007:可用于获取其他用户权限的掩码。
- 0o0004:其他读,对于普通文件,其余用户可读取文件;对于目录,其他用户组可读取目录项。
- 0o0002:其他写,对于普通文件,其余用户可写入文件;对于目录,其他用户组可创建/删除目录项。
- 0o0001:其他执行,对于普通文件,其余用户可执行文件;对于目录,其他用户组可在目录中搜索给定路径名。 | +| nlink | number | 是 | 否 | 文件的硬链接数。 | +| uid | number | 是 | 否 | 文件所有者的ID。 | +| gid | number | 是 | 否 | 文件所有组的ID。 | +| rdev | number | 是 | 否 | 标识包含该文件的从设备号。 | +| size | number | 是 | 否 | 文件的大小,以字节为单位。仅对普通文件有效。 | +| blocks | number | 是 | 否 | 文件占用的块数,计算时块大小按512B计算。 | +| atime | number | 是 | 否 | 上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | +| mtime | number | 是 | 否 | 上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | +| ctime | number | 是 | 否 | 最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。 | + + +### isBlockDevice + +isBlockDevice(): boolean + +用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是块特殊设备。 | + +- 示例: + ``` + let isBLockDevice = fileio.statSync(path).isBlockDevice(); + ``` + + +### isCharacterDevice + +isCharacterDevice(): boolean + +用于判断当前目录项是否是字符特殊文件。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是字符特殊设备。 | + +- 示例: + ``` + let isCharacterDevice = fileio.statSync(path).isCharacterDevice(); + ``` + + +### isDirectory + +isDirectory(): boolean + +用于判断当前目录项是否是目录。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是目录。 | + +- 示例: + ``` + let isDirectory = fileio.statSync(path).isDirectory(); + ``` + + +### isFIFO + +isFIFO(): boolean + +用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是 FIFO。 | + +- 示例: + ``` + let isFIFO = fileio.statSync(path).isFIFO(); + ``` + + +### isFile + +isFile(): boolean + +用于判断当前目录项是否是普通文件。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是普通文件。 | + +- 示例: + ``` + let isFile = fileio.statSync(fpath).isFile(); + ``` + + +### isSocket + +isSocket(): boolean + +用于判断当前目录项是否是套接字。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是套接字。 | + +- 示例: + ``` + let isSocket = fileio.statSync(path).isSocket(); + ``` + + +### isSymbolicLink + +isSymbolicLink(): boolean + +用于判断当前目录项是否是符号链接。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是符号链接。 | + +- 示例: + ``` + let isSymbolicLink = fileio.statSync(path).isSymbolicLink(); + ``` + + +## Watcher7+ + +Watcher是文件变化监听的实例,调用Watcher.stop()方法(同步或异步)来停止文件监听。 + + +### stop7+ + +stop(): void + +以异步方法关闭watcher监听,使用promise形式返回结果。 + +- 示例: + ``` + fileio.stop(); + ``` + + +### stop7+ + +stop(callback: AsyncCallback): void + +以异步方法关闭watcher监听,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 以异步方法关闭watcher监听之后的回调。 | + +- 示例: + ``` + fileio.stop(function(err){ + }); + ``` + + +## Stream7+ + +文件流,在调用Stream的方法前,需要先通过createStream()方法(同步或异步)来构建一个Stream实例。 + + +### close7+ + +close(): Promise<void> + +异步关闭文件流,使用promise形式返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 表示异步关闭文件流的结果。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + await ss.close(); + ``` + + +### close7+ + +close(callback: AsyncCallback<void>): void + +异步关闭文件流,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 异步关闭文件流之后的回调。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + ss.close(function (err) { + }); + ``` + + +### closeSync7+ + +closeSync(): void + +同步关闭文件流。 + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + ss.closeSync(); + ``` + + +### flush7+ + +flush(): Promise<void> + +异步刷新文件流,使用promise形式返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 表示异步刷新文件流的结果。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + await ss.flush(); + ``` + + +### flush7+ + +flush(callback: AsyncCallback<void>): void + +异步刷新文件流,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 异步刷新文件流后的回调函数。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + ss.flush(function (err) { + expect(fileio.unlinkSync(fpath)).assertNull(); + }); + ``` + + +### flushSync7+ + +flushSync(): void + +同步刷新文件流。 + +- 示例: + ``` + let ss= fileio.createStreamSync(path); + ss.flushSync(); + ``` + + +### write7+ + +write(buffer: ArrayBuffer | string, options?: Object): Promise<number> + +以异步方法将数据写入流文件,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 实际写入的长度。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(fpath, "r+"); + let num = await ss.write("hello, world",{offset: 1,length: 5,position: 5,encoding :'utf-8'}); + ``` + + +### write7+ + +write(buffer:ArrayBuffer | string,options?:Object, callback:AsyncCallback<number>): void + +以异步方法将数据写入流文件,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + | callback | AsyncCallback<number> | 是 | 异步写入完成后执行的回调函数。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(fpath, "r+"); + ss.write("hello, world", {offset: 1, length: 5, position: 5, encoding :'utf-8'}, function (err, bytesWritten) { + if (!err) { + console.log(bytesWritten) + } + }); + ``` + + +### writeSync7+ + +writeSync(buffer: ArrayBuffer | string, options?:Object): number + +以同步方法将数据写入流文件。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。仅支持 'utf-8'。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 实际写入的长度。 | + +- 示例: + ``` + let ss= fileio.createStreamSync(fpath,"r+"); + let num = ss.writeSync("hello, world", {offset: 1, length: 5, position: 5, encoding :'utf-8'}); + ``` + + +### read7+ + +read(buffer: ArrayBuffer, options?: Object): Promise<Readout> + +以异步方法从流文件读取数据,使用promise形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Readout](#readout)> | 读取的结果。 | + +- 示例: + ``` + let ss = fileio.createStreamSync(fpath, "r+"); + let readOut = await ss.read(new ArrayBuffer(4096), {offset: 1, length: 5, position: 5}); + ``` + + +### read7+ + +read(buffer: ArrayBuffer, options?: Object, callback: AsyncCallback<Readout>): void + +以异步方法从流文件读取数据,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + | callback | AsyncCallback<[Readout](#readout)> | 是 | 异步从流文件读取数据之后的回调。 | + +- 示例: + ``` + let ss = fileio.createStreamSync(fpath, "r+"); + ss.read(new ArrayBuffer(4096),{offset: 1, length: 5, position: 5},function (err, readOut) { + if (!err) { + console.log(readOut) + } + }); + ``` + + +### readSync7+ + +readSync(buffer: ArrayBuffer, options?: Object): number + +以同步方法从流文件读取数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | + | options | Object | 否 | 支持如下选项:
- offset,number类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 实际读取的长度。 | + +- 示例: + ``` + let ss = fileio.createStreamSync(fpath, "r+"); + let num = ss.readSync(new ArrayBuffer(4096), {offset: 1, length: 5, position: 5}); + ``` + + +## Dir + +管理目录,在调用Dir的方法前,需要先通过[opendir()](#fileioopendir)方法(同步或异步)来构建一个Dir实例。 + + +### read + +read(): Promise<Dirent> + +异步读取下一个目录项,使用promise形式返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[Dirent](#dirent)> | 表示异步读取目录项的结果。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let dirent = await dir.read(); + ``` + + +### read + +read(callback: AsyncCallback<Dirent>): void + +异步读取下一个目录项,使用callback形式返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<[Dirent](#dirent)> | 是 | 异步读取下一个目录项之后的回调。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + dir.read(function (err, dirent) { + if (!err) { + console.log(dirent.name) + } + }); + ``` + + +### readSync + +readSync(): Dirent + +同步读取下一个目录项。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Dirent](#dirent) | 表示一个目录项。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let dirent = dir.readSync(); + ``` + + +### closeSync + +closeSync(): void + +用于关闭目录。目录被关闭后,Dir中持有的文件描述将被释放,后续将无法从Dir中读取目录项。 + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + dir.closeSync(); + ``` + + +## Dirent + +在调用Dirent的方法前,需要先通过[dir.read()](#read)方法(同步或异步)来构建一个Dirent实例。 + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| name | string | 是 | 否 | 目录项的名称。 | + + +### isBlockDevice + +isBlockDevice(): boolean + +用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是块特殊设备。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isBLockDevice = dir.readSync().isBlockDevice(); + ``` + + +### isCharacterDevice + +isCharacterDevice(): boolean + +用于判断当前目录项是否是字符特殊设备。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是字符特殊设备。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isCharacterDevice = dir.readSync().isCharacterDevice(); + ``` + + +### isDirectory + +isDirectory(): boolean + +用于判断当前目录项是否是目录。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是目录。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isDirectory = dir.readSync().isDirectory(); + ``` + + +### isFIFO + +isFIFO(): boolean + +用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是FIFO。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isFIFO = dir.readSync().isFIFO(); + ``` + + +### isFile + +isFile(): boolean + +用于判断当前目录项是否是普通文件。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是普通文件。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isFile = dir.readSync().isFile(); + ``` + + +### isSocket + +isSocket(): boolean + +用于判断当前目录项是否是套接字。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是套接字。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isSocket = dir.readSync().isSocket(); + ``` + + +### isSymbolicLink + +isSymbolicLink(): boolean + +用于判断当前目录项是否是符号链接。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 表示当前目录项是否是符号链接。 | + +- 示例: + ``` + let dir = fileio.opendirSync(dpath); + let isSymbolicLink = dir.readSync().isSymbolicLink(); + ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/02.Statfs\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/02.Statfs\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..9753b95806dbe8fd201d5b0de17023c594340b23 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/02.Statfs\347\256\241\347\220\206.md" @@ -0,0 +1,129 @@ +--- +title: Statfs管理 +permalink: /pages/010c010602 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# statfs + + + +## 导入模块 + +``` +import statfs from '@ohos.statfs' +``` + +## 使用说明 + +使用该功能模块对文件/目录进行操作前,需要先获取其绝对路径,获取方式及其接口用法请参考:[Context模块的接口getOrCreateLocalDir](/pages/010c010108)。 + +“文件/目录绝对路径”=“应用目录路径”+“文件/目录名” + +通过上述接口获取到应用目录路径dir,文件名为“xxx.txt”,文件所在绝对路径为: + +``` +let path = dir + "xxx.txt" +``` + +## 权限列表 + +无 + +## statfs.getFreeBytes + +getFreeBytes(path:string):Promise<number> + +异步方法获取指定文件系统空闲字节数,以Promise形式返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------------- | + | path | string | 是 | 需要查询的文件系统的文件路径 | + +- 返回值: + + | 类型 | 说明 | + | --------------------- | -------------- | + | Promise<number> | 返回空闲字节数 | + +- 示例: + + ``` + let num = await statfs.getFreeBytes(path); + ``` + +## statfs.getFreeBytes + +getFreeBytes(path:string, callback:AsyncCallback<number>): void + +异步方法获取指定文件系统空闲字节数,使用callback形式返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------------- | ---- | ---------------------------- | + | path | string | 是 | 需要查询的文件系统的文件路径 | + | callback | AsyncCallback<number> | 是 | 异步获取空闲字节数之后的回调 | + +- 示例: + + ``` + statfs.getFreeBytes(path, function(err, number){ + //do something + }); + ``` + +## statfs.getTotalBytes + +getTotalBytes.(path:string):Promise<number> + +异步方法获取指定文件系统总字节数,以Promise形式返回结果。 + +- 参数: + + | 参数 | 类型 | 必填 | 说明 | + | ---- | ------ | ---- | ---------------------------- | + | path | string | 是 | 需要查询的文件系统的文件路径 | + +- 返回值: + + | 类型 | 说明 | + | --------------------- | ------------ | + | Promise<number> | 返回总字节数 | + +- 示例: + + ``` + let num = await statfs.getTotalBytes(path); + ``` + +## statfs.getTotalBytes + +getTotalBytes(path:string, callback:AsyncCallback<number>): void + +异步方法获取指定文件系统总字节数,使用callback形式返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------------- | ---- | ---------------------------- | + | path | string | 是 | 需要查询的文件系统的文件路径 | + | callback | AsyncCallback<number> | 是 | 异步获取总字节数之后的回调 | + +- 示例: + + ``` + statfs.getTotalBytes(path, function(err, number){ + //do something + }); + ``` + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/03.\347\233\256\345\275\225\347\216\257\345\242\203.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/03.\347\233\256\345\275\225\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..3f7ab8771688cc8899df1b365ba56fb9ac38b28a --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\346\226\207\344\273\266\347\256\241\347\220\206/03.\347\233\256\345\275\225\347\216\257\345\242\203.md" @@ -0,0 +1,113 @@ +--- +title: 目录环境 +permalink: /pages/010c010603 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 目录环境能力 + + + +## 导入模块 + +``` +import environment from '@ohos.environment'; +``` + + + +## 权限列表 + +无 + +## environment.getStorageDataDir + +getStorageDataDir():Promise<string> + +异步方法获取内存存储根目录,以promise形式返回结果。 + +- 返回值: + + | 类型 | 说明 | + | --------------------- | ---------------- | + | Promise<string> | 返回存存储根目录 | + +- 示例: + + ``` + environment.getStorageDataDir().then(function(path){ + // do something + }).catch(function(error){ + + }); + ``` + +## environment.getStorageDataDir + +getStorageDataDir(callback:AsyncCallback<string>):void + +异步方法获取内存存储根目录,以callback形式返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------------- | ---- | -------------------------------- | + | callback | AsyncCallback<string> | 是 | 异步获取内存存储根目录之后的回调 | + +- 示例: + + ``` + environment.getStorageDataDir(function(error, path){ + // do something + }); + ``` + +## environment.getUserDataDir + +getUserDataDir():Promise<string> + +异步方法获取公共文件根目录,以promise形式返回结果。 + +- 返回值: + + | 类型 | 说明 | + | --------------------- | ------------------ | + | Promise<string> | 返回公共文件根目录 | + +- 示例: + + ``` + environment.getUserDataDir().then(function(path){ + // do something + }).catch(function(error){ + + }); + ``` + +## environment.getUserDataDir + +getUserDataDir(callback:AsyncCallback<string>): void + +异步方法获取公共文件根目录,以callback形式返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------------- | ---- | -------------------------------- | + | callback | AsyncCallback<string> | 是 | 异步获取公共文件根目录之后的回调 | + +- 示例: + + ``` + environment.getUserDataDir(function(error, path){ + // do something + }); + ``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" index b37c2f9d89e1066e022a4a322e4e2e353ba8a8a2..4503b9c89d1b89313466a8f0e6808999692fe84d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/05.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/01.\345\210\206\345\270\203\345\274\217\345\270\220\345\217\267\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 分布式帐号管理 -permalink: /pages/000b000400 +permalink: /pages/010c010701 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 分布式帐号管理 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/02.\345\272\224\347\224\250\345\270\220\345\217\267\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/02.\345\272\224\347\224\250\345\270\220\345\217\267\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..7cf0548c784082b9d930e8e824b36a37c1ddea4d --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\350\264\246\345\217\267\347\256\241\347\220\206/02.\345\272\224\347\224\250\345\270\220\345\217\267\347\256\241\347\220\206.md" @@ -0,0 +1,896 @@ +--- +title: 应用帐号管理 +permalink: /pages/010c010702 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:50 +--- +# 应用帐号管理 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import account_appAccount from '@ohos.account.appAccount'; +``` + + +## account_appAccount.createAppAccountManager + +createAppAccountManager(): AppAccountManager; + +应用帐号管理:获取应用帐号模块对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | AppAccountManager | 获取应用帐号模块的实例。 | + +- 示例: + ``` + var appAccountManager = account.createAppAccountManager(); + ``` + +## AppAccountManager + +管理应用帐号模块的实例。 + +### addAccount + +addAccount(name: string, callback: AsyncCallback<void>): void; + +将此应用的帐号名添加到帐号管理服务中,使用callback回调异步返回结果。 + +需要权限:无。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------- | ---- | ------------------------------------------ | + | name | string | 是 | 要添加的应用帐户的名称。 | + | callback | AsyncCallback<void> | 是 | 将此应用的帐号名添加到帐号管理服务的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.addAccount("WangWu", (err) => { + console.log("addAccount err: " + JSON.stringify(err)); + }); + ``` + +### addAccount + +addAccount(name: string, extraInfo: string, callback: AsyncCallback<void>): void; + +将此应用程序的帐号名和额外信息添加到帐号管理服务中,使用callback回调异步返回结果。 + +需要权限:无。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | name | string | 是 | 要添加的应用帐户的名称。 | + | extraInfo | string | 是 | 要添加的应用帐户的额外信息(例如token等),额外的信息不能是应用帐号的敏感信息。 | + | callback | AsyncCallback<void> | 是 | 将此应用程序的帐号名和额外信息添加到帐号管理服务中的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.addAccount("LiSi", "token101", (err) => { + console.log("addAccount err: " + JSON.stringify(err)); + }); + ``` + + + +### addAccount + +addAccount(name: string, extraInfo?: string): Promise<void>; + +将此应用的帐号名或额外信息添加到帐号管理服务中,使用Promise方式异步返回结果。 + +需要权限:无。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------ | ---- | ------------------------------------------------------------ | + | name | string | 是 | 要添加的应用帐户的名称。 | + | extraInfo | string | 是 | 要添加的应用帐户的额外信息,额外的信息不能是应用帐号的敏感信息。 | + +- 返回值: + + | 类型 | 说明 | + | ------------- | ---------------------------------- | + | Promise<void> | romise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.addAccount("LiSi", "token101").then(()=> { + console.log('addAccount Success'); + }).catch((err) => { + console.log("addAccount err: " + JSON.stringify(err)); + }); + ``` + +### deleteAccount + +deleteAccount(name: string, callback: AsyncCallback<void>): void; + +从帐号管理服务中删除应用帐号,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------- | ---- | ---------------------------------- | + | name | string | 是 | 要删除的应用帐户的名称。 | + | callback | AsyncCallback<void> | 是 | 帐号管理服务中删除应用帐号的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.deleteAccount("ZhaoLiu", (err) => { + console.log("deleteAccount err: " + JSON.stringify(err)); + }); + ``` + +### deleteAccount + +deleteAccount(name: string): Promise<void>; + +从帐号管理服务中删除应用帐号,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------ | + | name | string | 是 | 要删除的应用帐户的名称。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.deleteAccount("ZhaoLiu").then(() => { + console.log('deleteAccount Success'); + }).catch((err) => { + console.log("deleteAccount err: " + JSON.stringify(err)); + }); + ``` + +### disableAppAccess + +disableAppAccess(name: string, bundleName: string, callback: AsyncCallback<void>): void; + +禁止指定第三方应用帐户的名称访问指定包名称的第三方应用,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ---------- | ------------------- | ---- | ------------------------------------------------------------ | + | name | string | 是 | 要禁用访问的第三方应用帐户的名称。 | + | bundleName | string | 是 | 第三方应用的包名。 | + | callback | AsyncCallback<void> | 是 | 禁止指定第三方应用帐户的名称访问指定包名称的第三方应用的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.disableAppAccess("ZhangSan", "com.example.ohos.accountjsdemo", (err) => { + console.log("disableAppAccess err: " + JSON.stringify(err)); + }); + ``` + +### disableAppAccess + +disableAppAccess(name: string, bundleName: string): Promise<void>; + +禁止指定第三方应用帐户的名称访问指定包名称的第三方应用,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ---------- | ------ | ---- | ---------------------------------- | + | name | string | 是 | 要禁用访问的第三方应用帐户的名称。 | + | bundleName | string | 是 | 第三方应用的包名。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.disableAppAccess("ZhangSan", "com.example.ohos.accountjsdemo").then(() => { + console.log('disableAppAccess Success'); + }).catch((err) => { + console.log("disableAppAccess err: " + JSON.stringify(err)); + }); + ``` + +### enableAppAccess + +enableAppAccess(name: string, bundleName: string, callback: AsyncCallback<void>): void; + +允许指定第三方应用帐户的名称访问指定包名称的第三方应用,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ---------- | ------------------- | ---- | ------------------------------------------------------------ | + | name | string | 是 | 应用帐号名称。 | + | bundleName | string | 是 | 第三方应用的包名。 | + | callback | AsyncCallback<void> | 是 | 允许指定第三方应用帐户的名称访问指定包名称的第三方应用的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.enableAppAccess("ZhangSan", "com.example.ohos.accountjsdemo", (err) => { + console.log("enableAppAccess: " + JSON.stringify(err)); + }); + ``` + +### enableAppAccess + +enableAppAccess(name: string, bundleName: string): Promise<void>; + +允许指定第三方应用帐户的名称访问指定包名称的第三方应用,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ---------- | ------ | ---- | ------------------ | + | name | string | 是 | 应用帐号名称。 | + | bundleName | string | 是 | 第三方应用的包名。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + app_account_instance.enableAppAccess("ZhangSan", "com.example.ohos.accountjsdemo").then(() => { + console.log('enableAppAccess Success'); + }).catch((err) => { + console.log("enableAppAccess err: " + JSON.stringify(err)); + }); + ``` + +### checkAppAccountSyncEnable + +checkAppAccountSyncEnable(name: string, callback: AsyncCallback<boolean>): void; + +检查指定应用帐号是否允许应用数据同步,使用callback回调异步返回结果。 + +需要权限:ohos.permission.DISTRIBUTED_DATASYNC,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ---------------------- | ---- | -------------------------------------------- | + | name | string | 是 | 应用帐号名称。 | + | callback | AsyncCallback<boolean> | 是 | 检查指定应用帐号是否允许应用数据同步的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.checkAppAccountSyncEnable("ZhangSan", (err, result) => { + console.log("checkAppAccountSyncEnable err: " + JSON.stringify(err)); + console.log('checkAppAccountSyncEnable result: ' + result); + }); + ``` + +### checkAppAccountSyncEnable + +checkAppAccountSyncEnable(name: string): Promise<boolean>; + +检查指定应用帐号是否允许应用数据同步,使用Promise方式异步返回结果。 + +需要权限:ohos.permission.DISTRIBUTED_DATASYNC,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | -------------- | + | name | string | 是 | 应用帐号名称。 | + +- 返回值: + + | 类型 | 说明 | + | :--------------- | :---------------------------------- | + | Promise<boolean> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.checkAppAccountSyncEnable("ZhangSan").then((data) => { + console.log('checkAppAccountSyncEnable, result: ' + data); + }).catch((err) => { + console.log("checkAppAccountSyncEnable err: " + JSON.stringify(err)); + }); + ``` + +### setAccountCredential + +setAccountCredential(name: string, credentialType: string, credential: string,callback: AsyncCallback<void>): void; + +设置此应用程序帐号的凭据,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------------- | ------------------- | ---- | ---------------------------- | + | name | string | 是 | 应用程序帐户的名称。 | + | credentialType | string | 是 | 要设置的凭据的类型。 | + | credential | string | 是 | 要设置的凭据。 | + | callback | AsyncCallback<void> | 是 | 设置此应用帐号的凭据的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAccountCredential("ZhangSan", "credentialType001", "credential001", (err) => { + console.log("setAccountCredential err: " + JSON.stringify(err)); + }); + ``` + +### setAccountCredential + +setAccountCredential(name: string, credentialType: string, credential: string): Promise<void>; + +设置此应用程序帐号的凭据,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------------- | ------ | ---- | -------------------- | + | name | string | 是 | 应用帐户的名称。 | + | credentialType | string | 是 | 要设置的凭据的类型。 | + | credential | string | 是 | 要设置的凭据。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAccountCredential("ZhangSan", "credentialType001", "credential001").then(() => { + console.log('setAccountCredential Success'); + }).catch((err) => { + console.log("setAccountCredential err: " + JSON.stringify(err)); + }); + ``` + +### setAccountExtraInfo + +setAccountExtraInfo(name: string, extraInfo: string, callback: AsyncCallback<void>): void; + +设置此应用程序帐号的额外信息,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | -------------------------------- | + | name | string | 是 | 应用帐户的名称。 | + | extraInfo | string | 是 | 要设置的额外信息。 | + | callback | AsyncCallback<void> | 是 | 设置此应用帐号的额外信息的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAccountExtraInfo("ZhangSan", "Tk002", (err) => { + console.log("setAccountExtraInfo err: " + JSON.stringify(err)); + }); + ``` + +### setAccountExtraInfo + +setAccountExtraInfo(name: string, extraInfo: string): Promise<void>; + +设置此应用程序帐号的额外信息,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------ | ---- | ------------------ | + | name | string | 是 | 应用帐户的名称。 | + | extraInfo | string | 是 | 要设置的额外信息。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAccountExtraInfo("ZhangSan", "Tk002").then(() => { + console.log('setAccountExtraInfo Success'); + }).catch((err) => { + console.log("setAccountExtraInfo err: " + JSON.stringify(err)); + }); + ``` + +### setAppAccountSyncEnable + +setAppAccountSyncEnable(name: string, isEnable: boolean, callback: AsyncCallback<void>): void; + +设置指定的应用程序帐号是否允许应用程序数据同步,使用callback回调异步返回结果。 + +需要权限:ohos.permission.DISTRIBUTED_DATASYNC,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------- | ---- | -------------------------------------------------- | + | name | string | 是 | 应用帐户的名称。 | + | isEnable | boolean | 是 | 是否允许应用数据同步。 | + | callback | AsyncCallback<void> | 是 | 设置指定的应用帐号是否允许应用程序数据同步的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAppAccountSyncEnable("ZhangSan", true, (err) => { + console.log("setAppAccountSyncEnable err: " + JSON.stringify(err)); + }); + ``` + +### setAppAccountSyncEnable + +setAppAccountSyncEnable(name: string, isEnable: boolean): Promise<void>; + +设置指定的应用程序帐号是否允许应用程序数据同步,使用Promise方式异步返回结果。 + +需要权限:ohos.permission.DISTRIBUTED_DATASYNC,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------- | ---- | ---------------------- | + | name | string | 是 | 应用帐户的名称。 | + | isEnable | boolean | 是 | 是否允许应用数据同步。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager .setAppAccountSyncEnable("ZhangSan", true).then(() => { + console.log('setAppAccountSyncEnable Success'); + }).catch((err) => { + console.log("setAppAccountSyncEnable err: " + JSON.stringify(err)); + }); + ``` + +### setAssociatedData + +setAssociatedData(name: string, key: string, value: string, callback: AsyncCallback<void>): void; + +设置与此应用程序帐号关联的数据,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------- | ---- | ---------------------------------- | + | name | string | 是 | 应用帐户的名称。 | + | key | string | 是 | 要设置的数据的键,密钥可以自定义。 | + | value | string | 是 | 要设置的数据的值。 | + | callback | AsyncCallback<void> | 是 | 设置与此应用帐号关联的数据的回调。 | + +- 示例: + + ``` + app_account_instance.setAssociatedData("ZhangSan", "k001", "v001", (err) => { + console.log("setAssociatedData err: " + JSON.stringify(err)); + }); + ``` + +### setAssociatedData + +setAssociatedData(name: string, key: string, value: string): Promise<void>; + +设置与此应用程序帐号关联的数据,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------------------- | + | name | string | 是 | 应用帐户的名称。 | + | key | string | 是 | 要设置的数据的键,密钥可以自定义。 | + | value | string | 是 | 要设置的数据的值。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<void> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.setAssociatedData("ZhangSan", "k001", "v001").then(() => { + console.log('setAssociatedData Success'); + }).catch((err) => { + console.log("setAssociatedData err: " + JSON.stringify(err)); + }); + ``` + +### getAccountCredential + +getAccountCredential(name: string, credentialType: string, callback: AsyncCallback<string>): void; + +获取此应用帐号的凭据,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------------- | --------------------- | ---- | ---------------------------- | + | name | string | 是 | 应用帐号名称。 | + | credentialType | string | 是 | 要获取的凭据的类型。 | + | callback | AsyncCallback<string> | 是 | 获取此应用帐号的凭据的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAccountCredential("ZhangSan", "credentialType001", (err, result) => { + console.log("getAccountCredential err: " + JSON.stringify(err)); + console.log('getAccountCredential result: ' + result); + }); + ``` + +### getAccountCredential + +getAccountCredential(name: string, credentialType: string): Promise<string>; + +获取此应用程序帐号的凭据,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------------- | ------ | ---- | -------------------- | + | name | string | 是 | 应用帐号名称。 | + | credentialType | string | 是 | 要获取的凭据的类型。 | + +- 返回值: + + | 类型 | 说明 | + | :-------------- | :---------------------------------- | + | Promise<string> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAccountCredential("ZhangSan", "credentialType001").then((data) => { + console.log('getAccountCredential, result: ' + data); + }).catch((err) => { + console.log("getAccountCredential err: " + JSON.stringify(err)); + }); + ``` + +### getAccountExtraInfo + +getAccountExtraInfo(name: string, callback: AsyncCallback<string>): void; + +获取此应用帐号的额外信息,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------- | ---- | -------------------------------- | + | name | string | 是 | 应用帐号名称。 | + | callback | AsyncCallback<string> | 是 | 获取此应用帐号的额外信息的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAccountExtraInfo("ZhangSan", (err, result) => { + console.log("getAccountExtraInfo err: " + JSON.stringify(err)); + console.log('getAccountExtraInfo result: ' + result); + }); + ``` + +### getAccountExtraInfo + +getAccountExtraInfo(name: string): Promise<string>; + +获取此应用程序帐号的额外信息,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | -------------- | + | name | string | 是 | 应用帐号名称。 | + +- 返回值: + + | 类型 | 说明 | + | :-------------- | :---------------------------------- | + | Promise<string> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAccountExtraInfo("ZhangSan").then((data) => { + console.log('getAccountExtraInfo, result: ' + data); + }).catch((err) => { + console.log("getAccountExtraInfo err: " + JSON.stringify(err)); + }); + ``` + +### getAssociatedData + +getAssociatedData(name: string, key: string, callback: AsyncCallback<string>): void; + +获取与此应用程序帐号关联的数据,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | --------------------- | ---- | ---------------------------------- | + | name | string | 是 | 应用帐号名称。 | + | key | string | 是 | 要获取的数据的key。 | + | callback | AsyncCallback<string> | 是 | 获取与此应用帐号关联的数据的回调。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAssociatedData("ZhangSan", "k001", (err, result) => { + console.log("getAssociatedData err: " + JSON.stringify(err)); + console.log('getAssociatedData result: ' + result); + }); + ``` + +### getAssociatedData + +getAssociatedData(name: string, key: string): Promise<string>; + +获取与此应用程序帐号关联的数据,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------- | + | name | string | 是 | 应用帐号名称。 | + | key | string | 是 | 要获取的数据的key。 | + +- 返回值: + + | 类型 | 说明 | + | :-------------- | :---------------------------------- | + | Promise<string> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAssociatedData("ZhangSan", "k001").then((data) => { + console.log('getAssociatedData: ' + data); + }).catch((err) => { + console.log("getAssociatedData err: " + JSON.stringify(err)); + }); + ``` + +### getAllAccessibleAccounts + +getAllAccessibleAccounts(callback: AsyncCallback<Array<AppAccountInfo>>): void; + +获取全部应用已授权帐号信息。 + +需要权限:ohos.permission.GET_ACCOUNTS_PRIVILEGED,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------------------ | ---- | ---------------- | + | callback | AsyncCallback<Array<AppAccountInfo>> | 是 | 应用帐号信息列表 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAllAccessibleAccounts((err, data)=>{ + console.debug("getAllAccessibleAccounts err:" + JSON.stringify(err)); + console.debug("getAllAccessibleAccounts data:" + JSON.stringify(data)); + }); + ``` + +### getAllAccessibleAccounts + +getAllAccessibleAccounts(): Promise<Array<AppAccountInfo>>; + +获取全部应用已授权帐号信息。 + +需要权限:ohos.permission.GET_ACCOUNTS_PRIVILEGED,系统应用可用。 + +- 参数: + + | 类型 | 说明 | + | ------------------------------ | ----------------------------------- | + | Promise<Array<AppAccountInfo>> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + appAccountManager.getAllAccessibleAccounts().then((data) => { + console.log('getAllAccessibleAccounts: ' + data); + }).catch((err) => { + console.log("getAllAccessibleAccounts err: " + JSON.stringify(err)); + }); + ``` + +### getAllAccounts + +getAllAccounts(owner: string, callback: AsyncCallback<Array<AppAccountInfo>>): void; + +获取指定应用全部帐号信息。 + +需要权限:ohos.permission.GET_ACCOUNTS_PRIVILEGED,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------------------ | ---- | ---------------- | + | owner | string | 是 | 应用包名称 | + | callback | AsyncCallback<Array<AppAccountInfo>> | 是 | 应用帐号信息列表 | + +- 示例: + + ``` + const appAccountManager = account.createAppAccountManager(); + const selfBundle = "com.example.actsgetallaaccounts"; + appAccountManager.getAllAccounts(selfBundle, (err, data)=>{ + console.debug("getAllAccounts err:" + JSON.stringify(err)); + console.debug("getAllAccounts data:" + JSON.stringify(data)); + }); + ``` + +### getAllAccounts + +getAllAccounts(owner: string): Promise<Array<AppAccountInfo>>; + +获取指定应用全部帐号信息。 + +需要权限:ohos.permission.GET_ACCOUNTS_PRIVILEGED,系统应用可用。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------- | + | owner | string | 是 | 应用包名称 | + +- 参数: + + | 类型 | 说明 | + | ------------------------------ | ----------------------------------- | + | Promise<Array<AppAccountInfo>> | Promise实例,用于获取异步返回结果。 | + +- 示例: + + ``` + const appAccountManager = account_appAccount.createAppAccountManager(); + const selfBundle = "com.example.actsgetallaaccounts"; + appAccountManager.getAllAccounts(selfBundle).then((data) => { + console.log('getAllAccounts: ' + data); + }).catch((err) => { + console.log("getAllAccounts err: " + JSON.stringify(err)); + }); + ``` + +### on('change') + +on(type: 'change', owners: Array<string>, callback: Callback<Array<AppAccountInfo>>): void; + +订阅指定帐号所有者的帐户变更事件,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------------- | ---- | ------------------------------------------------------------ | + | type | 'change' | 是 | 关于帐户更改事件,当帐户所有者更新帐户时,订阅者将收到通知。 | + | owners | Array<string> | 是 | 指示帐户的所有者。 | + | callback | Callback<Array<AppAccountInfo>> | 是 | 订阅指定帐号所有者的帐户变更事件的回调。 | + +- 示例: + + ``` + const appAccountManager = account.createAppAccountManager(); + function changeOnCallback(data){ + console.debug("receive change data:" + JSON.stringify(data)); + } + try{ + appAccountManager.on('change', ["com.example.actsaccounttest"], changeOnCallback); + } + catch(err){ + console.error("on accountOnOffDemo err:" + JSON.stringify(err)); + } + ``` + +### off('change') + +off(type: 'change', callback?: Callback<void>): void; + +取消订阅帐号事件,使用callback回调异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------------------- | ---- | ------------------------ | + | type | 'change' | 是 | 关于帐户更改事件。 | + | callback | Callback<void> | 否 | 取消订阅帐号事件的回调。 | + +- 示例: + + ``` + const appAccountManager = account.createAppAccountManager(); + function changeOnCallback(data){ + console.debug("receive change data:" + JSON.stringify(data)); + appAccountManager.off('change', function(){ + console.debug("off finish"); + }) + } + try{ + appAccountManager.on('change', ["com.example.actsaccounttest"], changeOnCallback); + } + catch(err){ + console.error("on accountOnOffDemo err:" + JSON.stringify(err)); + } + ``` + +## AppAccountInfo + + + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | ------------------ | +| owner | string | 是 | 所有者是应用帐户。 | +| name | string | 是 | 应用帐户的名称。 | + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" index 8328518879a1b7dfbbf1e106d70b1b85b9b0018a..df3bae4190af98d7d40c25b60b9d14dfebb8a565 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/01.\346\213\250\346\211\223\347\224\265\350\257\235.md" @@ -1,6 +1,6 @@ --- title: 拨打电话 -permalink: /pages/000b000500 +permalink: /pages/010c010801 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 拨打电话 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" index 00b2e8975aa0478319406515f3a804c467422ab2..2d066b408357d192834cdc0a3f875f47a349f14e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/02.\347\237\255\344\277\241\346\234\215\345\212\241.md" @@ -1,6 +1,6 @@ --- title: 短信服务 -permalink: /pages/000b000501 +permalink: /pages/010c010802 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # 短信服务 @@ -40,8 +40,9 @@ createMessage\(pdu: Array, specification: string, callback: AsyncCallba - 示例 ``` - let specification = '3gpp'; - let pdu = [0x08, 0x91, ...]; + const specification = '3gpp'; + // 以数组的形式显示协议数据单元(PDU),类型为number,例如[0x08, 0x91, ...] + const pdu = [0x08, 0x91]; sms.createMessage(pdu, specification, (err, data) => { console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); }); @@ -70,8 +71,9 @@ createMessage\(pdu: Array, specification: string\): Promise { console.log(`createMessage success, promise: data->${JSON.stringify(data)}`); diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" index 623bc4746bcb4b8cca41d409633e9c420b16b69f..b0857e57de75e0e3e7541d6b72dda0bbab70026b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/03.SIM\345\215\241\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: SIM卡管理 -permalink: /pages/000b000502 +permalink: /pages/010c010803 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:50 --- # SIM卡管理 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" index 6869bb32849704760312f9cfdfa741f2ce56d01e..42addc3077ca435013b18470c22dd50ee1e2bf6d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/06.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\347\224\265\350\257\235\346\234\215\345\212\241/04.\347\275\221\347\273\234\346\220\234\347\264\242.md" @@ -1,6 +1,6 @@ --- title: 网络搜索 -permalink: /pages/000b000503 +permalink: /pages/010c010804 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 网络搜索 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" new file mode 100644 index 0000000000000000000000000000000000000000..91e5fe00eb8fc6466cc498476d085f4f7b302cba --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" @@ -0,0 +1,485 @@ +--- +title: WLAN +permalink: /pages/010c010901 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# WLAN + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import wifi from '@ohos.wifi'; +``` + + +## wifi.isWifiActive + +isWifiActive(): boolean + +查询WLAN是否已激活。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | boolean | true:已激活, false:未激活。 | + + +## wifi.scan + +scan(): boolean + +启动WLAN扫描。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | boolean | true:扫描操作成功, false:扫描操作执行失败。 | + + +## wifi.getScanInfos + +getScanInfos(): Promise<Array<WifiScanInfo>> + +获取扫描结果,使用promise方式作为异步方法。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | Promise< Array<[WifiScanInfo](#wifiscaninfo)> > | 返回扫描到的热点列表。 | + + +## wifi.getScanInfos + +getScanInfos(callback: AsyncCallback<Array<WifiScanInfo>>): void + +获取扫描结果,使用callback方式作为异步方法。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback< Array<[WifiScanInfo](#wifiscaninfo)>> | 是 | 扫描到的热点列表结果回调函数。 | + +- 示例 + ``` + import wifi from '@ohos.wifi'; + + wifi.getScanInfos(result => { + var len = Object.keys(result).length; + console.log("wifi received scan info call back: " + len); + for (var i = 0; i < len; ++i) { + console.info("ssid: " + result[i].ssid); + console.info("bssid: " + result[i].bssid); + console.info("securityType: " + result[i].securityType); + console.info("rssi: " + result[i].rssi); + console.info("band: " + result[i].band); + console.info("frequency: " + result[i].frequency); + console.info("timestamp: " + result[i].timestamp); + } + }); + + wifi.getScanInfos().then(result => { + var len = Object.keys(result).length; + console.log("wifi received scan info promise: " + len); + for (var i = 0; i < len; ++i) { + console.info("ssid: " + result[i].ssid); + console.info("bssid: " + result[i].bssid); + console.info("securityType: " + result[i].securityType); + console.info("rssi: " + result[i].rssi); + console.info("band: " + result[i].band); + console.info("frequency: " + result[i].frequency); + console.info("timestamp: " + result[i].timestamp); + } + }); + ``` + + +## WifiScanInfo + +WLAN热点信息。 + +| **参数名** | **类型** | **读写属性** | **说明** | +| -------- | -------- | -------- | -------- | +| ssid | string | 只读 | 热点的SSID,编码格式为UTF-8。 | +| bssid | string | 只读 | 热点的BSSID。 | +| securityType | [WifiSecurityType](#wifisecuritytype) | 只读 | WLAN加密类型。 | +| rssi | number | 只读 | 热点的信号强度(dBm)。 | +| band | number | 只读 | WLAN接入点的频段。 | +| frequency | number | 只读 | WLAN接入点的频率。 | +| timestamp | number | 只读 | 时间戳。 | + + +## WifiSecurityType + +表示加密类型的枚举。 + +| **名称** | **默认值** | **说明** | +| -------- | -------- | -------- | +| WIFI_SEC_TYPE_INVALID | 0 | 无效加密类型。 | +| WIFI_SEC_TYPE_OPEN | 1 | 开放加密类型。 | +| WIFI_SEC_TYPE_WEP | 2 | Wired Equivalent Privacy (WEP)加密类型。 | +| WIFI_SEC_TYPE_PSK | 3 | Pre-shared key (PSK)加密类型。 | +| WIFI_SEC_TYPE_SAE | 4 | Simultaneous Authentication of Equals (SAE)加密类型。 | + + +## wifi.getSignalLevel + +getSignalLevel(rssi: number, band: number): number + +查询WLAN信号强度。 + +- 参数: + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | rssi | number | 是 | 热点的信号强度(dBm)。 | + | band | number | 是 | WLAN接入点的频段。 | + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | number | 信号强度,取值范围为[0, 4]。 | + + +## wifi.getIpInfo7+ + +getIpInfo(): IpInfo + +获取IP信息。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | [IpInfo](#ipinfo) | 返回IP信息。 | + + +## IpInfo + +IP信息。 + +| **参数名** | **类型** | **读写属性** | **说明** | +| -------- | -------- | -------- | -------- | +| ipAddress | number | 只读 | IP地址。 | +| gateway | number | 只读 | 网关。 | +| netmask | number | 只读 | 掩码。 | +| primaryDns | number | 只读 | 主DNS服务器IP地址。 | +| secondDns | number | 只读 | 备DNS服务器IP地址。 | +| serverIp | number | 只读 | DHCP服务端IP地址。 | +| leaseDuration | number | 只读 | IP地址租用时长。 | + + +## wifi.isConnected7+ + +isConnected(): boolean + +查询WLAN是否已连接。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | boolean | true:已连接, false:未连接。 | + + +## wifi.getLinkedInfo7+ + +getLinkedInfo(): Promise<WifiLinkedInfo> + +获取WLAN连接信息,使用promise方式作为异步方法。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<[WifiLinkedInfo](#wifilinkedinfo)> | 返回WLAN连接的相关信息。 | + + +## wifi.getLinkedInfo7+ + +getLinkedInfo(callback: AsyncCallback<WifiLinkedInfo>): void + +获取WLAN连接信息,使用callback方式作为异步方法。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<[WifiLinkedInfo](#wifilinkedinfo)> | 是 | 获取WLAN连接信息结果回调函数。 | + +- 示例 + ``` + import wifi from '@ohos.wifi'; + + wifi.getLinkedInfo(data => { + console.info("get wifi linked info [callback]: " + JSON.stringify(data)); + }); + + wifi.getLinkedInfo().then(data => { + console.info("get wifi linked info [promise]: " + JSON.stringify(data)); + }).catch(error => { + console.info("linked info promise then error"); + }); + ``` + + +## WifiLinkedInfo + +提供WLAN连接的相关信息。 + +| 参数名 | 类型 | 读写属性 | 说明 | +| -------- | -------- | -------- | -------- | +| ssid | string | 只读 | 热点的SSID,编码格式为UTF-8。 | +| bssid | string | 只读 | 热点的BSSID。 | +| rssi | number | 只读 | 热点的信号强度(dBm)。 | +| band | number | 只读 | WLAN接入点的频段。 | +| linkSpeed | number | 只读 | WLAN接入点的速度。 | +| frequency | number | 只读 | WLAN接入点的频率。 | +| isHidden | boolean | 只读 | WLAN接入点是否是隐藏网络。 | +| isRestricted | boolean | 只读 | WLAN接入点是否限制数据量。 | +| macAddress | string | 只读 | 设备的MAC地址。 | +| ipAddress | number | 只读 | WLAN连接的IP地址。 | +| connState | ConnState | 只读 | WLAN连接状态。 | + + +## ConnState + +表示WLAN连接状态的枚举。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| SCANNING | 0 | 设备正在搜索可用的AP。 | +| CONNECTING | 1 | 正在建立WLAN连接。 | +| AUTHENTICATING | 2 | WLAN连接正在认证中。 | +| OBTAINING_IPADDR | 3 | 正在获取WLAN连接的IP地址。 | +| CONNECTED | 4 | WLAN连接已建立。 | +| DISCONNECTING | 5 | WLAN连接正在断开。 | +| DISCONNECTED | 6 | WLAN连接已断开。 | +| UNKNOWN | 7 | WLAN连接建立失败。 | + + +## wifi.getCountryCode7+ + +getCountryCode(): string + +获取国家码信息。 + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | string | 国家码。 | + + +## wifi.isFeatureSupported7+ + +isFeatureSupported(featureId: number): boolean + +判断设备是否支持相关WLAN特性。 + +- 参数: + | **参数名** | **类型** | 必填 | **说明** | + | -------- | -------- | -------- | -------- | + | featureId | number | 是 | 特性ID值。 | + +- 返回值: + | **类型** | **说明** | + | -------- | -------- | + | boolean | true:支持, false:不支持。 | + +- 特性ID值枚举。 + | 枚举值 | 说明 | + | -------- | -------- | + | 0x0001 | 基础结构模式特性。 | + | 0x0002 | 5 GHz带宽特性。 | + | 0x0004 | GAS/ANQP特性。 | + | 0x0008 | Wifi-Direct特性。 | + | 0x0010 | Soft AP特性。 | + | 0x0040 | Wi-Fi AWare组网特性。 | + | 0x8000 | AP STA共存特性。 | + | 0x8000000 | WPA3-Personal SAE特性。 | + | 0x10000000 | WPA3-Enterprise Suite-B | + | 0x20000000 | 增强开放特性。 | + + +## wifi.on('wifiStateChange')7+ + +on(type: "wifiStateChange", callback: Callback<number>): void + +注册WLAN状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiStateChange"字符串 | + | callback | Callback<number> | 是 | 状态改变回调函数。 | + +- 状态改变事件的枚举。 + | **枚举值** | **说明** | + | -------- | -------- | + | 0 | 未激活。 | + | 1 | 已激活。 | + | 2 | 激活中。 | + | 3 | 去激活中。 | + + +## wifi.off('wifiStateChange')7+ + +off(type: "wifiStateChange", callback?: Callback<number>): void + +取消注册WLAN状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiStateChange"字符串 | + | callback | Callback<number> | 否 | 状态改变回调函数。如果callback不填,将去注册该事件关联的所有回调函数。 | + +- 示例 + ``` + import wifi from '@ohos.wifi'; + import { EventListener } from '@ohos.wifi'; + + var WIFI_POWER_STATE = "wifiStateChange"; + var listener = new EventListener(); + + var recvPowerNotifyFunc = result => { + console.info("power state receive event: " + result); + } + + // Register event + listener.on(WIFI_POWER_STATE, recvPowerNotifyFunc); + + // Unregister event + listener.off(WIFI_POWER_STATE, recvPowerNotifyFunc); + ``` + + +## wifi.on('wifiConnectionChange')7+ + +on(type: "wifiConnectionChange", callback: Callback<number>): void + +注册WLAN连接状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiConnectionChange"字符串 | + | callback | Callback<number> | 是 | 状态改变回调函数。 | + +- 连接状态改变事件的枚举。 + | **枚举值** | **说明** | + | -------- | -------- | + | 0 | 已断开。 | + | 1 | 已连接。 | + + +## wifi.off('wifiConnectionChange')7+ + +off(type: "wifiConnectionChange", callback?: Callback<number>): void + +取消注册WLAN连接状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiConnectionChange"字符串 | + | callback | Callback<number> | 否 | 连接状态改变回调函数。如果callback不填,将去注册该事件关联的所有回调函数。 | + + +## wifi.on('wifiScanStateChange')7+ + +on(type: "wifiScanStateChange", callback: Callback<number>): void + +注册扫描状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiScanStateChange"字符串 | + | callback | Callback<number> | 是 | 状态改变回调函数。 | + +- 扫描状态改变事件的枚举。 + | **枚举值** | **说明** | + | -------- | -------- | + | 0 | 扫描失败。 | + | 1 | 扫描成功。 | + + +## wifi.off('wifiScanStateChange')7+ + +off(type: "wifiScanStateChange", callback?: Callback<number>): void + +取消注册扫描状态改变事件。 + +- 参数 + +| **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | -------- | -------- | +| type | string | 是 | 固定填"wifiScanStateChange"字符串 | +| callback | Callback<number> | 否 | 状态改变回调函数。如果callback不填,将去注册该事件关联的所有回调函数。 | + + +## wifi.on('wifiRssiChange')7+ + +on(type: "wifiRssiChange", callback: Callback<number>): void + +注册RSSI状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiRssiChange"字符串 | + | callback | Callback<number> | 是 | 状态改变回调函数,返回以dBm为单位的RSSI值。 | + + +## wifi.off('wifiRssiChange')7+ + +off(type: "wifiRssiChange", callback?: Callback<number>): void + +取消注册RSSI状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"wifiRssiChange"字符串 | + | callback | Callback<number> | 否 | 状态改变回调函数。如果callback不填,将去注册该事件关联的所有回调函数。 | + + +## wifi.on('hotspotStateChange')7+ + +on(type: "hotspotStateChange", callback: Callback<number>): void + +注册热点状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"hotspotStateChange"字符串 | + | callback | Callback<number> | 是 | 状态改变回调函数。 | + +- 热点状态改变事件的枚举。 + | **枚举值** | **说明** | + | -------- | -------- | + | 0 | 未激活。 | + | 1 | 已激活。 | + | 2 | 激活中。 | + | 3 | 去激活中。 | + + +## wifi.off('hotspotStateChange')7+ + +off(type: "hotspotStateChange", callback?: Callback<number>): void + +取消注册热点状态改变事件。 + +- 参数 + | **参数名** | **类型** | **必填** | **说明** | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 固定填"hotspotStateChange"字符串 | + | callback | Callback<number> | 否 | 状态改变回调函数。如果callback不填,将去注册该事件关联的所有回调函数。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" similarity index 67% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" index d7a8af4541758ec45837e858d3e68288f43b6069..9c8cb22a0998baa33f7f612fdcc60bd9a5ea336a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/01.\344\274\240\346\204\237\345\231\250.md" @@ -1,6 +1,6 @@ --- title: 传感器 -permalink: /pages/000b000700 +permalink: /pages/010c010a01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 传感器 @@ -35,9 +35,9 @@ import sensor from '@ohos.sensor'; 陀螺仪:ohos.permission.GYROSCOPE -## sensor.on(SensorType.SENSOR_TYPE_ID_ACCELEROMETER) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER) -on(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>,options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>,options?: Options): void 监听加速度传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -52,24 +52,23 @@ on(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<Acc - 示例: ``` - sensor.on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 - console.info('X-coordinate component: ' + data.x); + console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - }, - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION) -on(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>, options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>, options?: Options): void 监听线性加速度传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -82,24 +81,23 @@ on(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback< - 示例: ``` - sensor.on(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELEROMETER,function(error,data){ - if (error) { + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,function(error,data){ + if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED) -on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>, options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>, options?: Options): void 监听未校准加速度计传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -112,28 +110,26 @@ on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallb - 示例: ``` - sensor.on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - //打印data在x,y,z轴坐标的偏移量 console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_GRAVITY) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GRAVITY) -on(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>,options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>,options?: Options): void 监听重力传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -146,24 +142,23 @@ on(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityRe - 示例: ``` - sensor.on(type:SensorType.SENSOR_TYPE_ID_GRAVITY,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GRAVITY,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 - console.info('X-coordinate component: ' + data.x); + console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_GYROSCOPE) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE) -on(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>, options?: Options): void 监听陀螺仪传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -176,24 +171,23 @@ on(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<Gyrosco - 示例: ``` - sensor.on(type:SensorType.SENSOR_TYPE_ID_GUROSCOPE,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 - console.info('X-coordinate component: ' + data.x); + console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED) -on(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>, options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>, options?: Options): void 监听未校准陀螺仪传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -206,55 +200,53 @@ on(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback& - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 - console.info('X-coordinate component: ' + data.x); + console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - //打印data的x,y,z轴坐标的偏移量 - console.info('X-coordinate bias: ' + data.biasX); + console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION) -on(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback<SignificantMotionResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback<SignificantMotionResponse>, options?: Options): void -监听有效运动传感器数据变化。如果多次调用该接口,仅最后一次调用生效。 +监听大幅动作传感器数据变化。如果多次调用该接口,仅最后一次调用生效。 - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | type | [SensorType](#sensortype) | 是 | 要订阅的有效运动传感器类型为SENSOR_TYPE_ID_SIGNIFICANT_MOTION。 | + | type | [SensorType](#sensortype) | 是 | 要订阅的大幅动作传感器类型为SENSOR_TYPE_ID_SIGNIFICANT_MOTION。 | | callback | AsyncCallback<[SignificantMotionResponse](#significantmotionresponse)> | 是 | 注册有效运动传感器的回调函数,上报的数据类型为SignificantMotionResponse。 | | options | [Options](#options) | 否 | 可选参数列表,设置上报频率,默认值为200000000ns。 | - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } console.info('Scalar data: ' + data.scalar); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION) -on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback<PedometerDetectResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback<PedometerDetectResponse>, options?: Options): void 监听计步检测传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -267,21 +259,21 @@ on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback& - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,function(error,data){ if (error) { - console.error(""Subscription failed. Error code: " + error.code + "; message: " + error.message); + console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } console.info('Scalar data: ' + data.scalar); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_PEDOMETER) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER) -on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>, options?: Options): void 监听计步传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -294,22 +286,21 @@ on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<Pedomet - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的步数 console.info('Steps: ' + data.steps); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE) -on(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>, options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>, options?: Options): void 监听环境温度传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -322,22 +313,21 @@ on(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback< - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的温度值 console.info('Temperature: ' + data.temperature); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD) -on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>,options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>,options?: Options): void 监听磁场传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -350,24 +340,23 @@ on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<Ma - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED) -on(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>, options: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>, options: Options): void 监听未校准磁场传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -380,28 +369,26 @@ on(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCall - 示例: ``` - ensor.on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 - console.info('X-coordinate component: ' + data.x); - console.info('Y-coordinate component: ' + data.y); - console.info('Z-coordinate component: ' + data.z); - //打印data的x,y,z轴坐标的偏移量 - console.info('X-coordinate bias: ' + data.biasX); + console.info('X-coordinate component: ' + data.x); + console.info('Y-coordinate component: ' + data.y); + console.info('Z-coordinate component: ' + data.z); + console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); - } - {interval: 10000000} //设置数据的上报频率。 + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_PROXIMITY) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY) -on(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>,options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>,options?: Options): void 监听接近光传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -414,22 +401,21 @@ on(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<Proximi - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_PROXIMITY,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的距离值 console.info('Distance: ' + data.distance); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_HUMIDITY) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY) -on(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>,options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>,options?: Options): void 监听湿度传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -442,22 +428,21 @@ on(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<Humidity - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_HUMIDITY,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的湿度值 console.info('Humidity: ' + data.humidity); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_BAROMETER) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_BAROMETER) -on(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>,options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>,options?: Options): void 监听气压计传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -470,22 +455,21 @@ on(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<Baromet - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_BAROMETER,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_BAROMETER,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的压强值 console.info('Atmospheric pressure: ' + data.pressure); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_HALL) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_HALL) -on(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>, options?: Options): void 监听霍尔传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -498,22 +482,21 @@ on(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_HALL,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_HALL,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的状态值 console.info('Status: ' + data.status); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT) -on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>, options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>, options?: Options): void 监听环境光传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -526,22 +509,21 @@ on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<Lig - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的光强值 - console.info(''Illumination: ' + data.intensity); - } - {interval: 10000000} + console.info(' Illumination: ' + data.intensity); + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_ORIENTATION) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION) -on(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>, options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>, options?: Options): void 监听方向传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -554,24 +536,23 @@ on(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<Orien - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_ORIENTATION,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR) -on(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback<RotationVectorResponse>,options?: Options): void +on(type:sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback<RotationVectorResponse>,options?: Options): void 监听旋转矢量传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -584,24 +565,23 @@ on(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback<Rota - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.on(SensorType.SENSOR_TYPE_ID_WEAR_DETECTION) +## sensor.on(sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION) -on(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>,options?: Options): void +on(type: sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>,options?: Options): void 监听佩戴检测传感器的数据变化。如果多次调用该接口,仅最后一次调用生效。 @@ -614,22 +594,21 @@ on(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<We - 示例: ``` - sensor.on(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION,function(error,data){ + sensor.on(sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的佩戴状态 console.info('Wear status: ' + data.value); - } - {interval: 10000000} + }, + {interval: 10000000} ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_ACCELEROMETER) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER) -once(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>): void 监听加速度传感器的数据变化一次。 @@ -641,12 +620,11 @@ once(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<A - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER,function(error,data){ if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -655,9 +633,9 @@ once(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<A ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION) -once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>): void 监听线性加速度传感器数据变化一次。 @@ -669,12 +647,11 @@ once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback&l - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -683,9 +660,9 @@ once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback&l ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED) -once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>): void 监听未校准加速度传感器的数据变化一次。 @@ -697,16 +674,14 @@ once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCal - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - //打印data的x,y,z轴坐标的偏移量 console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); @@ -715,9 +690,9 @@ once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCal ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_GRAVITY) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GRAVITY) -once(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>): void 监听重力传感器的数据变化一次。 @@ -729,12 +704,11 @@ once(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<Gravity - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_GRAVITY, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GRAVITY, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -743,9 +717,9 @@ once(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<Gravity ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_GYROSCOPE) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE) -once(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>): void 监听陀螺仪传感器的数据变化一次。 @@ -757,12 +731,11 @@ once(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<Gyros - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -771,9 +744,9 @@ once(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<Gyros ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED) -once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>): void 监听未校准陀螺仪传感器的数据变化一次。 @@ -785,16 +758,14 @@ once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallbac - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - //打印data的x,y,z轴坐标的偏移量 console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); @@ -803,9 +774,9 @@ once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallbac ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION) -once(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,callback:AsyncCallback<SignificantMotionResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,callback:AsyncCallback<SignificantMotionResponse>): void 监听有效运动传感器的数据变化一次。 @@ -817,7 +788,7 @@ once(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,callback:AsyncCallback&l - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; @@ -828,9 +799,9 @@ once(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION,callback:AsyncCallback&l ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION) -once(type:SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,callback:AsyncCallback<PedometerDetectResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,callback:AsyncCallback<PedometerDetectResponse>): void 监听计步检测传感器数据变化一次。 @@ -842,7 +813,7 @@ once(type:SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,callback:AsyncCallback&l - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; @@ -853,9 +824,9 @@ once(type:SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION,callback:AsyncCallback&l ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_PEDOMETER) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER) -once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>): void 监听计步器传感器数据变化一次。 @@ -867,21 +838,20 @@ once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<Pedom - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_PEDOMETER, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PEDOMETER, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的步数 console.info('Steps: ' + data.steps); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE) -once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>): void 监听环境温度传感器数据变化一次。 @@ -893,21 +863,20 @@ once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback&l - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的温度值 console.info('Temperature: ' + data.temperature); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD) -once(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>): void 监听磁场传感器数据变化一次。 @@ -919,12 +888,11 @@ once(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback< - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -933,9 +901,9 @@ once(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback< ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED) -once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>): void +once(type:sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>): void 监听未校准磁场传感器数据变化一次。 @@ -947,16 +915,14 @@ once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCa - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); - //打印data的x,y,z轴坐标的偏移量 console.info('X-coordinate bias: ' + data.biasX); console.info('Y-coordinate bias: ' + data.biasY); console.info('Z-coordinate bias: ' + data.biasZ); @@ -965,9 +931,9 @@ once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCa ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_PROXIMITY) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY) -once(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>): void 监听接近光传感器数据变化一次。 @@ -979,21 +945,20 @@ once(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<Proxi - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_PROXIMITY, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的距离值 console.info('Distance: ' + data.distance); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_HUMIDITY) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY) -once(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>): void 监听湿度传感器数据变化一次。 @@ -1005,21 +970,20 @@ once(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<Humidi - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_HUMIDITY, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HUMIDITY, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的湿度值 console.info('Humidity: ' + data.humidity); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_BAROMETER) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_BAROMETER) -once(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>): void 监听气压计传感器数据变化一次。 @@ -1031,21 +995,20 @@ once(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<Barom - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_BAROMETER, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_BAROMETER, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的压强值 console.info('Atmospheric pressure: ' + data.pressure); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_HALL) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HALL) -once(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>): void 监听霍尔传感器数据变化一次。 @@ -1057,21 +1020,20 @@ once(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResp - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_HALL, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HALL, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的状态值 console.info('Status: ' + data.status); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT) -once(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>): void 监听环境光传感器数据变化一次。 @@ -1083,21 +1045,20 @@ once(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<L - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的光强值 - console.info(''Illumination: ' + data.intensity); + console.info(' Illumination: ' + data.intensity); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_ORIENTATION) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION) -once(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>): void 监听方向传感器数据变化一次。 @@ -1109,12 +1070,11 @@ once(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<Ori - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_ORIENTATION, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ORIENTATION, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -1123,9 +1083,9 @@ once(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<Ori ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR) -once(type: SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, callback: AsyncCallback<RotationVectorResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, callback: AsyncCallback<RotationVectorResponse>): void 监听旋转矢量传感器数据变化一次。 @@ -1137,12 +1097,11 @@ once(type: SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, callback: AsyncCallback< - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的x,y,z轴坐标的分量 console.info('X-coordinate component: ' + data.x); console.info('Y-coordinate component: ' + data.y); console.info('Z-coordinate component: ' + data.z); @@ -1151,9 +1110,9 @@ once(type: SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR, callback: AsyncCallback< ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_HEART_RATE) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HEART_RATE) -once(type: SensorType.SENSOR_TYPE_ID_HEART_RATE, callback: AsyncCallback<HeartRateResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_HEART_RATE, callback: AsyncCallback<HeartRateResponse>): void 监听心率传感器数据变化一次。 @@ -1165,21 +1124,20 @@ once(type: SensorType.SENSOR_TYPE_ID_HEART_RATE, callback: AsyncCallback<Hear - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_HEART_RATE, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_HEART_RATE, function(error, data) { if (error) { console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message); return; } - //打印data的心率值 console.info("Heart rate: " + data.heartRate); } ); ``` -## sensor.once(SensorType.SENSOR_TYPE_ID_WEAR_DETECTION) +## sensor.once(sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION) -once(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>): void +once(type: sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>): void 监听佩戴检测传感器数据变化一次。 @@ -1191,12 +1149,11 @@ once(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback< - 示例: ``` - sensor.once(type:SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, function(error, data) { + sensor.once(sensor.SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, function(error, data) { if (error) { console.error("Failed to register data, error code is" + error.code + ", message: " + error.message); return; } - //打印data的佩戴状态 console.info("Wear status: "+ data.value); } ); @@ -1217,7 +1174,7 @@ off(type: SensorType, callback?: AsyncCallback<void>): void - 示例: ``` - sensor.off(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER, function(error) { + sensor.off(sensor.SensorType.SENSOR_TYPE_ID_ACCELEROMETER, function(error) { if (error) { console.error("Failed to unsubscribe from acceleration sensor data. Error code: " + error.code + "; message: " + error.message); return; @@ -1229,35 +1186,63 @@ off(type: SensorType, callback?: AsyncCallback<void>): void ``` -## sensor.createRotationMatrix +## sensor.getGeomagneticField -createRotationMatrix(rotationVector: Array<number>): Promise<Array<number>> +getGeomagneticField(locationOptions: LocationOptions, timeMillis: number, callback: AsyncCallback<GeomagneticResponse>): void -将旋转矢量转换为旋转矩阵,返回值为数组。 +获取地球上特定位置的地磁场。 - 参数 | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | rotationVector | Array<number> | 是 | 旋转矢量指示旋转矢量。 | + | locationOptions | [LocationOptions](#locationoptions) | 是 | 地理位置。 | + | timeMillis | number | 是 | 表示获取磁偏角的时间,单位为毫秒。 | + | callback | AsyncCallback<[GeomagneticResponse](#geomagneticresponse)> | 是 | 返回磁场信息。 | + +- 示例 + ``` + sensor.getGeomagneticField([80, 0, 0], {'timeMillis':1580486400000}, function(err, data) { + if (err) { + console.error('Operation failed. Error code: ' + err.code + '; message: ' + err.message); + return; + } + console.info('sensor_getGeomagneticField_promise x: ' + data.x + ',y: ' + data.y + ',z: ' + + data.z + ',geomagneticDip: ' + data.geomagneticDip + ',deflectionAngle: ' + data.deflectionAngle + + ',levelIntensity: ' + data.levelIntensity + ',totalIntensity: ' + data.totalIntensity); + }); + ``` + + +## sensor.getGeomagneticField + +getGeomagneticField(locationOptions: LocationOptions, timeMillis: number): Promise<GeomagneticResponse> + +获取地球上特定位置的地磁场。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | locationOptions | [LocationOptions](#locationoptions) | 是 | 地理位置。 | + | timeMillis | number | 是 | 表示获取磁偏角的时间,单位为毫秒。 | - 返回值 | 类型 | 说明 | | -------- | -------- | - | Promise<Array<number>> | 返回角度变化的数字(z、x和y)数组。 | + | Promise<[GeomagneticResponse](#geomagneticresponse)> | 返回磁场信息。 | - 示例 ``` - const promise = sensor.createRotationMatrix([0.20046076, 0.21907, 0.73978853, 0.60376877]); + const promise = sensor.getGeomagneticField([80, 0, 0], {'timeMillis':1580486400000}); promise.then((data) => { - console.info(LABEL + 'createRotationMatrix_promise success'); - for (var i=0; i < data.length; i++) { - console.info(LABEL + "data[" + i + "]: " + data[i]); - } + console.info('sensor_getGeomagneticField_promise x: ' + data.x + ',y: ' + data.y + ',z: ' + + data.z + ',geomagneticDip: ' + data.geomagneticDip + ',deflectionAngle: ' + data.deflectionAngle + + ',levelIntensity: ' + data.levelIntensity + ',totalIntensity: ' + data.totalIntensity); }).catch((reason) => { - console.info(LABEL + "promise::catch", reason); - }); + console.info('Operation failed.'); + }) ``` + ## SensorType 表示要订阅或取消订阅的传感器类型。 @@ -1288,111 +1273,120 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n | SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED | 281 | 未校准加速度计传感器。 | +## Response + +传感器数据的时间戳。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| timestamp | number | 是 | 是 | 传感器数据上报的时间戳。 | + + ## AccelerometerResponse -加速度传感器数据。 +加速度传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 施加在设备x轴的加速度,单位 : m/s2。 | +| y | number | 是 | 是 | 施加在设备y轴的加速度,单位 : m/s2。 | +| z | number | 是 | 是 | 施加在设备z轴的加速度,单位 : m/s2。 | ## LinearAccelerometerResponse -线性加速度传感器数据。 +线性加速度传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 施加在设备x轴的线性加速度,单位 : m/s2。 | +| y | number | 是 | 是 | 施加在设备y轴的线性加速度,单位 : m/s2。 | +| z | number | 是 | 是 | 施加在设备z轴的线性加速度,单位 : m/s2。 | ## AccelerometerUncalibratedResponse -未校准加速度计传感器数据。 +未校准加速度计传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | -| biasX | number | 是 | 是 | x轴坐标偏移量。 | -| biasY | number | 是 | 是 | y轴坐标偏移量。 | -| biasZ | number | 是 | 是 | z轴坐标偏移量。 | +| x | number | 是 | 是 | 施加在设备x轴未校准的加速度,单位 : m/s2。 | +| y | number | 是 | 是 | 施加在设备y轴未校准的加速度,单位 : m/s2。 | +| z | number | 是 | 是 | 施加在设备z轴未校准的加速度,单位 : m/s2。 | +| biasX | number | 是 | 是 | 施加在设备x轴未校准的加速度偏量,单位 : m/s2。 | +| biasY | number | 是 | 是 | 施加在设备上y轴未校准的加速度偏量,单位 : m/s2。 | +| biasZ | number | 是 | 是 | 施加在设备z轴未校准的加速度偏量,单位 : m/s2。 | ## GravityResponse -重力传感器数据。 +重力传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 施加在设备x轴的重力加速度,单位 : m/s2。 | +| y | number | 是 | 是 | 施加在设备y轴的重力加速度,单位 : m/s2。 | +| z | number | 是 | 是 | 施加在设备z轴的重力加速度,单位 : m/s2。 | ## OrientationResponse -方向传感器数据。 +方向传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 设备围绕x轴的旋转角度,单位 : rad。 | +| y | number | 是 | 是 | 设备围绕y轴的旋转角度,单位 : rad。 | +| z | number | 是 | 是 | 设备围绕z轴的旋转角度,单位 : rad。 | ## RotationVectorResponse -旋转矢量传感器数据。 +旋转矢量传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 旋转矢量x轴分量。 | +| y | number | 是 | 是 | 旋转矢量y轴分量。 | +| z | number | 是 | 是 | 旋转矢量z轴分量。 | ## GyroscopeResponse -陀螺仪传感器数据。 +陀螺仪传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | 设备x轴的旋转角速度,单位rad/s。 | +| y | number | 是 | 是 | 设备y轴的旋转角速度,单位rad/s。 | +| z | number | 是 | 是 | 设备z轴的旋转角速度,单位rad/s。 | ## GyroscopeUncalibratedResponse -未校准陀螺仪传感器数据。 +未校准陀螺仪传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | -| biasX | number | 是 | 是 | x轴坐标偏移量。 | -| biasY | number | 是 | 是 | y轴坐标偏移量。 | -| biasZ | number | 是 | 是 | z轴坐标偏移量。 | +| x | number | 是 | 是 | 设备x轴未校准的旋转角速度,单位rad/s。 | +| y | number | 是 | 是 | 设备y轴未校准的旋转角速度,单位rad/s。 | +| z | number | 是 | 是 | 设备z轴未校准的旋转角速度,单位rad/s。 | +| biasX | number | 是 | 是 | 设备x轴未校准的旋转角速度偏量,单位rad/s。 | +| biasY | number | 是 | 是 | 设备y轴未校准的旋转角速度偏量,单位rad/s。 | +| biasZ | number | 是 | 是 | 设备z轴未校准的旋转角速度偏量,单位rad/s。 | ## SignificantMotionResponse -有效运动传感器数据。 +有效运动传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1402,7 +1396,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## ProximityResponse -接近光传感器数据。 +接近光传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1412,7 +1406,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## LightResponse -环境光传感器数据。 +环境光传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1422,7 +1416,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## HallResponse -霍尔传感器数据。 +霍尔传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1432,44 +1426,44 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## MagneticFieldResponse -磁场传感器数据。 +磁场传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | +| x | number | 是 | 是 | x轴环境磁场强度,单位 : μT。 | +| y | number | 是 | 是 | y轴环境磁场强度,单位 : μT。 | +| z | number | 是 | 是 | z轴环境磁场强度,单位 : μT。。 | ## MagneticFieldUncalibratedResponse -未校准磁场传感器数据。 +未校准磁场传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | -| biasX | number | 是 | 是 | x轴坐标偏移量。 | -| biasY | number | 是 | 是 | y轴坐标偏移量。 | -| biasZ | number | 是 | 是 | z轴坐标偏移量。 | +| x | number | 是 | 是 | x轴未校准环境磁场强度,单位 : μT。 | +| y | number | 是 | 是 | y轴未校准环境磁场强度,单位 : μT。 | +| z | number | 是 | 是 | z轴未校准环境磁场强度,单位 : μT。 | +| biasX | number | 是 | 是 | x轴未校准环境磁场强度偏量,单位 : μT。 | +| biasY | number | 是 | 是 | y轴未校准环境磁场强度偏量,单位 : μT。 | +| biasZ | number | 是 | 是 | z轴未校准环境磁场强度偏量,单位 : μT。 | ## PedometerResponse -计步传感器数据。 +计步传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| steps | number | 是 | 是 | 计数的步骤数。每次设备重新启动时,该值将从0重新计算。 | +| steps | number | 是 | 是 | 用户的行走步数。 | ## HumidityResponse -湿度传感器数据。 +湿度传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1479,7 +1473,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## PedometerDetectResponse -计步检测传感器数据。 +计步检测传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1489,7 +1483,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## AmbientTemperatureResponse -温度传感器数据。 +温度传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1499,7 +1493,7 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## BarometerResponse -气压计传感器数据。 +气压计传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -1509,66 +1503,46 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n ## HeartRateResponse -心率传感器数据。 +心率传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| heartRate | number | 是 | 是 | 心率值。测量用户的心率数值,单位是次/分。 | +| heartRate | number | 是 | 是 | 心率值。测量用户的心率数值,单位:bpm。 | ## WearDetectionResponse -佩戴检测传感器数据。 +佩戴检测传感器数据,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| value | boolean | 是 | 是 | 表示设备是否被穿戴(true 表示已穿戴,false表示未穿戴)。 | +| value | number | 是 | 是 | 表示设备是否被穿戴(1表示已穿戴,0表示未穿戴)。 | ## Options -设置传感器上报频率 +设置传感器上报频率。 | 名称 | 参数类型 | 说明 | | -------- | -------- | -------- | | interval | number | 表示传感器的上报频率,默认值为200000000ns。 | -## RotationMatrixResponse - -设置旋转矩阵响应对象 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| rotation | Array<number> | 是 | 是 | 旋转矩阵。 | -| inclination | Array<number> | 是 | 是 | 倾斜矩阵。 | - - -## CoordinatesOptions - -设置坐标选项对象 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x坐标偏移量。 | -| y | number | 是 | 是 | y坐标偏移量。 | - - ## GeomagneticResponse -设置地磁响应对象 +设置地磁响应对象,继承于[Response](#response)。 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| x | number | 是 | 是 | x轴坐标分量。 | -| y | number | 是 | 是 | y轴坐标分量。 | -| z | number | 是 | 是 | z轴坐标分量。 | -| geomagneticDip | number | 是 | 是 | 地磁倾角。 | -| deflectionAngle | number | 是 | 是 | 偏转角。 | -| levelIntensity | number | 是 | 是 | 水平强度。 | -| totalIntensity | number | 是 | 是 | 总强度。 | +| x | number | 是 | 是 | 地磁场的北分量。 | +| y | number | 是 | 是 | 地磁场的东分量。 | +| z | number | 是 | 是 | 地磁场的垂直分量。 | +| geomagneticDip | number | 是 | 是 | 地磁倾角,即地球磁场线与水平面的夹角。 | +| deflectionAngle | number | 是 | 是 | 地磁偏角,即地磁北方向与正北方向在水平面上的角度。 | +| levelIntensity | number | 是 | 是 | 地磁场的水平强度。 | +| totalIntensity | number | 是 | 是 | 地磁场的总强度。 | ## LocationOptions @@ -1577,4 +1551,4 @@ createRotationMatrix(rotationVector: Array<number>): Promise<Array<n | -------- | -------- | -------- | -------- | -------- | | latitude | number | 是 | 是 | 纬度。 | | longitude | number | 是 | 是 | 经度。 | -| altitude | number | 是 | 是 | 海拔。 | +| altitude | number | 是 | 是 | 海拔高度。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" similarity index 71% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" index 0a261296e1764985544923abb0621325717201b1..0f3eedeb35cc8c1bc85886f587a76990833f89e3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/02.\346\214\257\345\212\250.md" @@ -1,6 +1,6 @@ --- title: 振动 -permalink: /pages/000b000701 +permalink: /pages/010c010a02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 振动 @@ -20,7 +20,7 @@ date: 2021-12-30 18:31:36 ## 导入模块 ``` -import vibrate from '@ohos.vibrator'; +import vibrator from '@ohos.vibrator'; ``` @@ -29,7 +29,7 @@ import vibrate from '@ohos.vibrator'; ohos.permission.VIBRATE -## vibrate.vibrate +## vibrator.vibrate vibrate(duration: number): Promise<void> @@ -50,17 +50,15 @@ vibrate(duration: number): Promise<void> - 示例: ``` - vibrator.vibrate(1000).then(error)=>{ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - console.log(“Promise returned to indicate a successful vibration.”); - } - } + vibrator.vibrate(1000).then(()=>{ + console.log("Promise returned to indicate a successful vibration."); + }, (error)=>{ + console.log("error.code"+error.code+"error.message"+error.message); + }); ``` -## vibrate.vibrate +## vibrator.vibrate vibrate(duration: number, callback?: AsyncCallback<void>): void @@ -75,16 +73,16 @@ vibrate(duration: number, callback?: AsyncCallback<void>): void - 示例**:** ``` vibrator.vibrate(1000,function(error){ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - console.log(“Callback returned to indicate a successful vibration.”); - } + if(error){ + console.log("error.code"+error.code+"error.message"+error.message); + }else{ + console.log("Callback returned to indicate a successful vibration."); + } }) ``` -## vibrate.vibrate +## vibrator.vibrate vibrate(effectId: EffectId): Promise<void> @@ -102,17 +100,15 @@ vibrate(effectId: EffectId): Promise<void> - 示例: ``` - vibrator.vibrate(effectId:EffectId).then(error)=>{ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - Console.log(“Promise returned to indicate a successful vibration.”); - } - } + vibrator.vibrate(vibrator.EffectId.EFFECT_CLOCK_TIMER).then(()=>{ + console.log("Promise returned to indicate a successful vibration."); + }, (error)=>{ + console.log("error.code"+error.code+"error.message"+error.message); + }); ``` -## vibrate.vibrate +## vibrator.vibrate vibrate(effectId: EffectId, callback?: AsyncCallback<void>): void @@ -126,17 +122,17 @@ vibrate(effectId: EffectId, callback?: AsyncCallback<void>): void - 示例: ``` - vibrator.vibrate(effectId:EffectId,function(error){ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - console.log(“Callback returned to indicate a successful vibration.”); - } + vibrator.vibrate(vibrator.EffectId.EFFECT_CLOCK_TIMER, function(error){ + if(error){ + console.log("error.code"+error.code+"error.message"+error.message); + }else{ + console.log("Callback returned to indicate a successful vibration."); + } }) ``` -## vibrate.stop +## vibrator.stop stop(stopMode: VibratorStopMode): Promise<void> @@ -154,17 +150,15 @@ stop(stopMode: VibratorStopMode): Promise<void> - 示例: ``` - vibrator.stop(stopMode:VibratorStopMode).then((error)=>{ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - Console.log(“Promise returned to indicate successful.”); - } - }) + vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_PRESET).then(()=>{ + console.log("Promise returned to indicate a successful vibration."); + }, (error)=>{ + console.log("error.code"+error.code+"error.message"+error.message); + }); ``` -## vibrate.stop +## vibrator.stop stop(stopMode: VibratorStopMode, callback?: AsyncCallback<void>): void; @@ -178,12 +172,12 @@ stop(stopMode: VibratorStopMode, callback?: AsyncCallback<void>): void; - 示例: ``` - vibrator.stop(stopMode:VibratorStopMode,function(error){ - if(error){ - console.log(“error.code”+error.code+“error.message”+error.message); - }else{ - Console.log(“Callback returned to indicate successful.”); - } + vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_PRESET, function(error){ + if(error){ + console.log("error.code"+error.code+"error.message"+error.message); + }else{ + console.log("Callback returned to indicate successful."); + } }) ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" similarity index 86% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" index 3d5f0cb5f4b6cb16a101e4acd86004004f6d26ac..544f2f74d34c8831627d9a80216f4d69fc461002 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/03.\345\261\217\345\271\225\344\272\256\345\272\246.md" @@ -1,6 +1,6 @@ --- title: 屏幕亮度 -permalink: /pages/000b000702 +permalink: /pages/010c010a03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 屏幕亮度 @@ -23,6 +23,9 @@ date: 2021-12-30 18:31:36 import brightness from '@ohos.brightness'; ``` +## 系统能力 + +SystemCapability.PowerManager.DisplayPowerManager ## brightness.setValue diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" index 7545090c896b90a92a896ddffce967eccd52c649..4579524d0726ccadc770d4d6331bf1fcc58c1a66 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/04.\347\224\265\351\207\217\344\277\241\346\201\257.md" @@ -1,6 +1,6 @@ --- title: 电量信息 -permalink: /pages/000b000703 +permalink: /pages/010c010a04 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 电量信息 @@ -23,6 +23,9 @@ date: 2021-12-30 18:31:36 import batteryInfo from '@ohos.batteryInfo'; ``` +## 系统能力 + +SystemCapability.PowerManager.BatteryManager ## 属性 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" similarity index 88% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" index 0ce5c5f421400626ee3b44e83bc0749d347e91d1..8cb7f9538fe57ee3ebde75bdcfeb11b540248034 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/05.\347\263\273\347\273\237\347\224\265\346\272\220\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 系统电源管理 -permalink: /pages/000b000704 +permalink: /pages/010c010a05 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 系统电源管理 @@ -23,14 +23,9 @@ date: 2021-12-30 18:31:36 import power from '@ohos.power'; ``` +## 系统能力 -## 权限 - -关机权限: ohos.permission.SHUTDOWN - -重启权限: ohos.permission.REBOOT - -重启并进入recovery模式的权限:ohos.permission.REBOOT_RECOVERY +SystemCapability.PowerManager.PowerManager ## power.shutdownDevice @@ -39,6 +34,8 @@ shutdownDevice(reason: string): void 系统关机。 +需要权限:ohos.permission.SHUTDOWN + - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | @@ -57,6 +54,8 @@ rebootDevice(reason: string): void 重启设备。 +需要权限:ohos.permission.REBOOT(重启权限)、ohos.permission.REBOOT_RECOVERY(重启并进入recovery模式的权限) + - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" index b91a507939c178341fcedc9f46ecf986bfc7065b..cfffbaa8c12895cd1d79853944e5df3196fc8a70 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/06.Runninglock\351\224\201.md" @@ -1,6 +1,6 @@ --- title: Runninglock锁 -permalink: /pages/000b000705 +permalink: /pages/010c010a06 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # Runninglock锁 @@ -24,9 +24,9 @@ import runninglock from '@ohos.runningLock'; ``` -## 权限 +## 系统能力 -申请、使用锁的权限:ohos.permission.RUNNING_LOCK +SystemCapability.PowerManager.PowerManager ## RunningLockType @@ -97,6 +97,8 @@ createRunningLock(name: string, type: RunningLockType, callback: AsyncCallback&l 创建RunningLock锁。 +需要权限:ohos.permission.RUNNING_LOCK + - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | @@ -126,6 +128,8 @@ createRunningLock(name: string, type: RunningLockType): Promise<RunningLock&g 创建Runninglock锁。 +需要权限:ohos.permission.RUNNING_LOCK + - 参数: | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" index d6dd5250f4d9ece92b7836671a17e2f8bb213874..5de150a048559da8f927df3c294fc28993f3cffa 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/07.\350\256\276\345\244\207\344\277\241\346\201\257.md" @@ -1,6 +1,6 @@ --- title: 设备信息 -permalink: /pages/000b000706 +permalink: /pages/010c010a07 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 设备信息 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" index caff37872f59565f31864d907373d56d99a51514..0250ca145070bf3114413cf7846a7b70d8e96369 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/08.\347\263\273\347\273\237\345\261\236\346\200\247.md" @@ -1,6 +1,6 @@ --- title: 系统属性 -permalink: /pages/000b000707 +permalink: /pages/010c010a08 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 系统属性 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" index 5c65bc06a5675a4ee153f49b31ce8b12e0395ec8..f4f752a30d8435024cf02065df7dd62c4cf82bb2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/09.\350\256\276\345\244\207\347\256\241\347\220\206.md" @@ -1,6 +1,6 @@ --- title: 设备管理 -permalink: /pages/000b000708 +permalink: /pages/010c010a09 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 设备管理 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/10.\347\252\227\345\217\243.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/10.\347\252\227\345\217\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..9cd3cf539d60edb99da57b13cdcf9cde92d6bbfa --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/10.\347\252\227\345\217\243.md" @@ -0,0 +1,975 @@ +--- +title: 窗口 +permalink: /pages/010c010a0a +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 窗口 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import window from '@ohos.window'; +``` + + +## 系统能力 +SystemCapability.WindowManager.WindowManager.Core + + + +## 权限列表 + +ohos.permission.SYSTEM_FLOAT_WINDOW + + +## SystemBarProperties + +状态栏导航栏的属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| statusBarColor | string | 是 | 是 | 状态栏颜色,为16进制颜色,例如"\#00FF00"或"\#FF00FF00"。 | +| isStatusBarLightIcon7+ | boolean | 是 | 是 | 状态栏图标是否为高亮状态。 | +| navigationBarColor | string | 是 | 是 | 导航栏颜色,为16进制颜色,例如"\#00FF00"或"\#FF00FF00"。 | +| isNavigationBarLightIcon7+ | boolean | 是 | 是 | 导航栏图标是否为高亮状态。 | + + +## Rect7+ + +矩形。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| left | number | 是 | 是 | 矩形区域的左边界。 | +| top | number | 是 | 是 | 矩形区域的上边界。 | +| width | number | 是 | 是 | 矩形区域的宽度。 | +| height | number | 是 | 是 | 矩形区域的高度。 | + + +## AvoidArea7+ + +表示窗口内容规避区域。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| leftRect | [Rect](#rect) | 是 | 是 | 屏幕左侧的矩形区。 | +| topRect | [Rect](#rect) | 是 | 是 | 屏幕顶部的矩形区。 | +| rightRect | [Rect](#rect) | 是 | 是 | 屏幕右侧的矩形区。 | +| bottomRect | [Rect](#rect) | 是 | 是 | 屏幕底部的矩形区。 | + + +## Size7+ + +窗口大小。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| width | number | 是 | 是 | 窗口宽度。 | +| height | number | 是 | 是 | 窗口高度。 | + + +## WindowProperties + +窗口属性。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| windowRect7+ | [Rect](#rect) | 是 | 否 | 窗口尺寸。 | +| type7+ | [WindowType](#windowtype) | 是 | 否 | 窗口类型。 | +| brightness | number | 是 | 是 | 屏幕亮度,取值范围为0~1,1表示最大亮度值。 | +| isTransparent7+ | boolean | 是 | 是 | 窗口是否透明,默认为false。 | +| isFullScreen | boolean | 是 | 是 | 是否全屏,默认为false。 | +| isKeepScreenOn | boolean | 是 | 是 | 屏幕是否常亮,默认为false。 | +| dimBehindValue7+ | number | 是 | 是 | 靠后的窗口的暗度值,取值范围为0~1,1表示最暗。 | +| isLayoutFullScreen7+ | boolean | 是 | 是 | 窗口是否为沉浸式,默认为false。 | +| focusable7+ | boolean | 是 | 是 | 窗口是否可聚焦,默认为true。 | +| touchable7+ | boolean | 是 | 是 | 窗口是否可触摸,默认为true。 | +| isPrivacyMode7+ | boolean | 是 | 是 | 隐私模式,默认为false。 | +| isRoundCorner7+ | boolean | 是 | 是 | 窗口是否为圆角。 | + + +## SplitScreenBoundsInfo7+ + +分屏边界相关信息。 + +| 名称 | 类型 | 说明 | +| -------- | -------- | -------- | +| [splitMode](#splitmode) | number | 表示分屏模式。 | +| primaryBounds | [Rect](#rect) | 表示主要边界信息,返回Rect类实例。 | +| secondaryBounds | [Rect](#rect) | 表示次要边界信息,返回Rect类实例。 | + + +## window.getTopWindow + +getTopWindow(callback: AsyncCallback<Window>): void + +获取当前窗口,用于获取到window实例。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<[Window](#window)> | 是 | 回调返回当前窗口对象。 | + +- 示例 + ``` + window.getTopWindow((err, data) => { + if (err) { + console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data)); + windowClass = data; + }); + ``` + + +## window.create7+ + +create(id: string, type: WindowType, callback: AsyncCallback<Window>): void + +创建子窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | id | string | 是 | 窗口id。 | + | type | [WindowType](#windowtype) | 是 | 窗口类型。 | + | callback | AsyncCallback<[Window](#window)> | 是 | 回调返回当前窗口对象。 | + +- 示例 + + +``` + window.create("first", 1, (err, data) => { + windowClass = data; + if (err) { + console.error('Failed to create the subWindow. Cause: ' + JSON.stringify(err)); + return; + } + console.info('SubWindow created. Data: ' + JSON.stringify(data)) + windowClass.resetSize(500, 1000); + windowClass.setOutsideTouchable(true); + windowClass.loadContent("pages/index/index", (err, data) => { + }); +}) +``` + + +## window.find7+ + +find(id: string, callback: AsyncCallback<Window>): void + +查找子窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | id | string | 是 | 窗口id。 | + | callback | AsyncCallback<[Window](#window)> | 是 | 回调返回当前窗口对象。 | + +- 示例 + ``` + window.find("first", (err, data) => { + if (err) { + console.error('Failed to find the subWindow. Cause: ' + JSON.stringify(err)); + return; + } + console.info('SubWindow found. Data: ' + JSON.stringify(data)) + windowClass = data; + }) + ``` + + +## window.getAbilityWindowMode7+ + +getAbilityWindowMode(callback: AsyncCallback<WindowMode>): void + +获取当前窗口模式。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<[WindowMode](#windowmode)> | 是 | 回调返回当前窗口模式。 | + +- 示例 + ``` + window.getAbilityWindowMode((err, data) => { + if (err) { + console.error('Failed to obtain the window mode. Cause:' + JSON.stringify(err)); + return; + } + console.info('Window mode obtained. Data:' + JSON.stringify(data)) + + }); + ``` + + +## window.getSplitScreenBounds7+ + +getSplitScreenBounds(splitRatio: SplitRatio, callback: AsyncCallback<SplitScreenBoundsInfo>): void + +获取分屏多窗口的位置和区域.。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | splitRatio | SplitRatio | 是 | 表示分屏比例,默认值为1:1,传值1表示1:2,传值2为2:1。 | + | callback | AsyncCallback<[SplitScreenBoundsInfo](#splitscreenboundsinfo)> | 是 | 回调返回一个SplitScreenBoundsInfo对象,表示分屏边界相关信息。 | + +- 示例 + ``` + var splitRatio = '1:1'; + window.getSplitScreenBounds(splitRatio, (err, data) => { + if (err) { + console.error('Failed to obtain the split-screen boundary information. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Split-screen boundary information obtained. Data: ' + JSON.stringify(data)) + + }); + ``` + + +## window.isFloatingAbilityWindowVisible7+ + +isFloatingAbilityWindowVisible(callback:AsyncCallback<boolean>): void + +悬浮窗是否显示可见。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<boolean> | 是 | 回调返回一个boolean对象,表示悬浮窗是否可见。 | + +- 示例 + ``` + window.isFloatingAbilityWindowVisible( (err, data) => { + if (err) { + console.error('Failed to check whether the floating window is visible. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in checking whether the floating window is visible. Data:' + JSON.stringify(data)) + + }); + ``` + + +## window.setSplitBarVisibility7+ + +setSplitBarVisibility(isVisibility: boolean, callback: AsyncCallback<void>): void + +设置分屏线是否可见。 + +- 参数 + | 参数名 | 类型 | 说明 | + | -------- | -------- | -------- | + | isVisibility | boolean | 表示分屏线是否是否显示,true为显示,false为显示。 | + | callback | AsyncCallback<void> | callback形式返回结果。 | + +- 示例 + ``` + var isVisibility = false; + window.setSplitBarVisibility(isVisibility , (err, data) => { + if (err) { + console.error('Failed to set the divider to be invisible. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the divider to be invisible. Data:' + JSON.stringify(data)) + }); + ``` + + +## WindowType7+ + +窗口类型。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| TYPE_APP | 0 | 表示应用窗口。 | +| TYPE_SYSTEM_ALERT | 1 | 表示系统弹窗。 | + + +## AvoidAreaType7+ + +窗口内容需要规避区域的类型。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| TYPE_SYSTEM | 0 | 表示系统默认。 | +| TYPE_CUTOUT | 1 | 表示刘海屏区域。 | + + +## WindowMode7+ + +窗口模式。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| UNDEFINED | 1 | 表示APP未定义窗口模式。 | +| FULLSCREEN | 2 | 表示APP全屏模式。 | +| PRIMARY | 3 | 表示APP分屏多窗口主要模式。 | +| SECONDARY | 4 | 表示APP分屏多窗口次要模式。 | +| FLOATING | 5 | 表示APP自由悬浮形式窗口模式。 | + + +## splitMode7+ + +分屏模式。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| VERTICAL | 0 | 表示垂直上下分屏模式 | +| HORIZONTAL | 1 | 表示水平左右分屏模式 | + + +## Window + +下列API示例中都需使用[getTopWindow()](#window-gettopwindow)先获取到Window实例,再通过此实例调用对应方法。 + + +### setBrightness + +setBrightness(brightness:number, callback: AsyncCallback<void>): void + +设置屏幕亮度值。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | brightness | number | 是 | 屏幕亮度值,值为0-1之间。1表示最亮。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var brightness = 10; + windowClass.setBrightness(brightness, (err, data) => { + if (err) { + console.error('Failed to set the brightness. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the brightness. Data: ' + JSON.stringify(data)); + }); + ``` + + +### setBackgroundColor + +setBackgroundColor(color: string, callback: AsyncCallback<void>): void + +设置窗口的背景色。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | color | string | 是 | 需要设置的背景色,为16进制颜色,例如"\#00FF00"或"\#FF00FF00"。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var color = '#00ff33'; + windowClass.setBackgroundColor(color, (err, data) => { + if (err) { + console.error('Failed to set the background color. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the background color. Data: ' + JSON.stringify(data)); + }); + ``` + +### setTransparent7+ + +setTransparent(isTransparent: boolean, callback: AsyncCallback<void>): void + +设置窗口是否透明。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isTransparent | boolean | 是 | 窗口是否透明。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isTransparent = true; + windowClass.setTransparent(isTransparent, (err, data) => { + if (err) { + console.error('Failed to set the window to be transparent. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window to be transparent. Data: ' + JSON.stringify(data)) + }); + ``` + +### setFullScreen + +setFullScreen(isFullScreen: boolean, callback: AsyncCallback<void>): void + +设置是否为全屏状态。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isFullScreen | boolean | 是 | 是否设为全屏状态。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isFullScreen = true; + windowClass.setFullScreen(isFullScreen, (err, data) => { + if (err) { + console.error('Failed to enable the full-screen mode. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); + }); + ``` + +### setKeepScreenOn + +setKeepScreenOn(isKeepScreenOn: boolean, callback: AsyncCallback<void>): void + +设置屏幕是否为常亮状态。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isKeepScreenOn | boolean | 是 | 是否设置为屏幕常亮状态。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isKeepScreenOn = true; + windowClass.setKeepScreenOn(isKeepScreenOn, (err, data) => { + if (err) { + console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the screen to be always on. Data: ' + JSON.stringify(data)); + }); + ``` + +### setWindowType7+ + +setWindowType(type: WindowType, callback: AsyncCallback<void>): void + +设置窗口类型。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | [WindowType](#windowtype7) | 是 |窗口类型。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var type = window.TYPE_APP; + windowClass.setWindowType(type, (err, data) => { + if (err) { + console.error('Failed to set the window type. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window type. Data: ' + JSON.stringify(data)) + }); + ``` + +### setDimBehind7+ + +setDimBehind(dimBehindValue: number, callback: AsyncCallback<void>): void + +窗口叠加时,设备有子窗口的情况下设置靠后的窗口的暗度值。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | dimBehindValue | number | 是 | 表示靠后的窗口的暗度值,取值范围为0-1,1表示最暗。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.setDimBehind(0.5, (err, data) => { + if (err) { + console.error('Failed to set the dimness. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the dimness. Data:' + JSON.stringify(data)); + }); + ``` + +### setLayoutFullScreen7+ + +setLayoutFullScreen(isLayoutFullScreen: boolean, callback: AsyncCallback<void>): void + +设置窗口的布局是否为全屏显示状态。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isLayoutFullScreen | boolean | 是 | 窗口的布局是否为全屏显示状态。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isLayoutFullScreen= true; + windowClass.setLayoutFullScreen(isLayoutFullScreen, (err, data) => { + if (err) { + console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window layout to full-screen mode. Data:' + JSON.stringify(data)); + }); + ``` + +### setFocusable7+ + +setFocusable(isFocusable: boolean, callback: AsyncCallback<void>): void + +设置点击时是否支持切换焦点窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isFocusable | boolean | 是 | 点击时是否支持切换焦点窗口。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isFocusable= true; + windowClass.setFocusable(isFocusable, (err, data) => { + if (err) { + console.error('Failed to set the window to be focusable. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window to be focusable. Data: ' + JSON.stringify(data)); + }); + ``` + +### setTouchable7+ + +setTouchable(isTouchable: boolean, callback: AsyncCallback<void>): void + +设置窗口是否为可触状态。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isTouchable | boolean | 是 | 窗口是否为可触状态。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isTouchable = true; + windowClass.setTouchable(isTouchable, (err, data) => { + if (err) { + console.error('Failed to set the window to be touchable. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window to be touchable. Data:' + JSON.stringify(data)); + + }); + ``` + +### setPrivacyMode7+ + +setPrivacyMode(isPrivacyMode: boolean, callback: AsyncCallback<void>): void + +设置窗口是否为隐私模式。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isPrivacyMode | boolean | 是 | 窗口是否为隐私模式。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var isPrivacyMode = true; + windowClass.setPrivacyMode(isPrivacyMode, (err, data) => { + if (err) { + console.error('Failed to set the window to privacy mode. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the window to privacy mode. Data:' + JSON.stringify(data)); + + }); + ``` + +### setSystemBarEnable7+ + +setSystemBarEnable(names: Array, callback: AsyncCallback<void>): void + +设置导航栏、状态栏的可见模式。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | names | Array | 是 | 设置状态栏和导航栏是否显示。例如,需全部显示,该参数设置为["status", "navigation"]。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var names = ["status", "navigation"]; + windowClass.setSystemBarEnable(names, (err, data) => { + if (err) { + console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the system bar to be visible. Data: ' + JSON.stringify(data)); + }); + ``` + +### setSystemBarProperties + +setSystemBarProperties(systemBarProperties: SystemBarProperties, callback: AsyncCallback<void>): void + +设置窗口内导航条状态栏的属性。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | SystemBarProperties | [SystemBarProperties](#systembarproperties) | 是 | 导航条状态栏的属性。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + var SystemBarProperties={ + statusBarColor: '#ff00ff', + navigationBarColor: '#00ff00', + //以下两个属性从API Version7开始支持 + isStatusBarLightIcon: true, + isNavigationBarLightIcon:false + }; + windowClass.setSystemBarProperties(SystemBarProperties, (err, data) => { + if (err) { + console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the system bar properties. Data: ' + JSON.stringify(data)); + }); + ``` + +### getProperties + +getProperties(callback: AsyncCallback<WindowProperties>): void + +获取当前窗口的属性,异步返回WindowProperties。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<[WindowProperties](#windowproperties)> | 是 | 回调返回窗口属性。 | + +- 示例 + ``` + windowClass.getProperties((err, data) => { + if (err) { + console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in obtaining the window properties. Data: ' + JSON.stringify(data)); + }); + ``` + +### getAvoidArea7+ + +getAvoidArea(type: AvoidAreaType, callback: AsyncCallback<AvoidArea>): void + +获取窗口内容规避的区域。如系统的系统栏区域 、凹口区域。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | [AvoidAreaType](#avoidareatype) | 是 | 表示规避区类型。type为TYPE_SYSTEM,表示系统默认区域。type为TYPE_CUTOUT,表示刘海屏区域。 | + | callback | AsyncCallback<[AvoidArea](#avoidarea)> | 是 | 回调返回窗口内容规避区域。 | + +- 示例 + ``` + var type = window.AvoidAreaType.TYPE_SYSTEM; + windowClass.getAvoidArea(type, (err, data) => { + if (err) { + console.error('Failed to obtain the area. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in obtaining the area. Data:' + JSON.stringify(data)); + }); + ``` + +### moveTo7+ + +moveTo(x: number, y: number, callback: AsyncCallback<void>): void + +窗口位置移动。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | x | number | 是 | 窗口在x轴方向移动的值,值为正表示右移。 | + | y | number | 是 | 窗口在y轴方向移动的值,值为正表示下移。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.moveTo(300, 300, (err, data)=>{ + if (err) { + console.error('Failed to move the window. Cause:' + JSON.stringify(err)); + return; + } + console.info('Window moved. Data:' + JSON.stringify(data)); + + }); + ``` + +### resetSize7+ + +resetSize(width: number, height: number, callback: AsyncCallback<void>): void + +改变当前窗口大小。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | width | number | 是 | 目标窗口的宽度。 | + | height | number | 是 | 目标窗口的高度。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.resetSize(500, 1000, (err, data) => { + if (err) { + console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); + return; + } + console.info('Window size changed. Data:' + JSON.stringify(data)); + }); + ``` + +### loadContent7+ + +loadContent(path: string, callback: AsyncCallback<void>): void + +子窗口加载具体页面内容。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | path | string | 是 | 设置加载页面的代码路径。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.loadContent("pages/page2/page2", (err, data) => { + if (err) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in loading the content. Data:' + JSON.stringify(data)); + }); + ``` + +### hide7+ + +hide (callback: AsyncCallback<void>): void + +隐藏子窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.hide((err, data) => { + if (err) { + console.error('Failed to hide the subwindow. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Subwindow hidden. Data:' + JSON.stringify(data)) + }) + ``` + +### show7+ + +show(callback: AsyncCallback<void>): void + +显示子窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.show((err, data) => { + if (err) { + console.error('Failed to show the subwindow. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in showing the subwindow. Data: ' + JSON.stringify(data)) + }) + ``` + +### isShowing7+ + +isShowing(callback: AsyncCallback<boolean>): void + +判断子窗口是否已显示。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<boolean> | 是 | 回调函数返回是否显示子窗口结果。 | + +- 示例 + ``` + windowClass.isShowing((err, data) => { + if (err) { + console.error('Failed to check whether the subwindow is showing. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in checking whether the subwindow is showing. Cause:' + JSON.stringify(data)) + }) + ``` + +### destroy7+ + +destroy(callback: AsyncCallback<void>): void + +销毁子窗口。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.destroy((err, data) => { + if (err) { + console.error('Failed to destroy the subwindow. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in destroying the subwindow. Data:' + JSON.stringify(data)) + }) + ``` + +### setOutsideTouchable7+ + +setOutsideTouchable(touchable: boolean, callback: AsyncCallback<void>): void; + +设置是否允许可点击子窗口以外的区域。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | touchable | boolean | 是 | 设置是否可点击。 | + | callback | AsyncCallback<void> | 是 | 回调函数。 | + +- 示例 + ``` + windowClass.setOutsideTouchable(true, (err, data) => { + if (err) { + console.error('Failed to set the area to be touchable. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in setting the area to be touchable. Data: ' + JSON.stringify(data)) + }) + ``` + +### on('keyboardHeightChange') + +on(type: string, callback: AsyncCallback<number>): void + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 从 API Version 7 开始废弃。 + +开启监听键盘高度变化。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 设置监听类型为监听键盘高度变化,应设置type为'keyboardHeightChange'。 | + | callback | AsyncCallback<number> | 是 | 回调返回监听到的键盘高度。 | + +- 示例 + ``` + var type= 'keyboardHeightChange'; + windowClass.on(type, (err, data) => { + if (err) { + console.error('Failed to enable the listener for keyboard height changes. Cause: ' + JSON.stringify(err)); + return; + } + console.info('Succeeded in enabling the listener for keyboard height changes. Data: ' + JSON.stringify(data)); + }); + ``` + +### off('keyboardHeightChange') + +off(type: string, callback?: AsyncCallback<number>): void + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 从 API Version 7 开始废弃。 + +关闭监听键盘高度变化。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 设置监听类型为监听键盘高度变化,应设置type为'keyboardHeightChange'。 | + | callback | AsyncCallback<number> | 否 | 回调返回监听到的键盘高度。 | + +- 示例 + ``` + var type= 'keyboardHeightChange'; + windowClass.off(type); + ``` + +### on('keyboardHeightChange'|'windowSizeChange'7+|'systemAvoidAreaChange'7+) + +on(type: string, callback: Callback<AvoidArea | Size | number>): void + +开启监听。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 设置监听类型。
- type为'keyboardHeightChange'时表示监听类型为键盘高度变化监听;
- type为'windowSizeChange'7+时表示监听类型为窗口尺寸变化监听;
- type为'systemAvoidAreaChange'7+时表示监听类型为系统窗口规避区变化监听。 | + | callback | Callback<[AvoidArea](#avoidarea) \| [Size](#size) \| number> | 是 | 回调返回监听到的信息。 | + +- 示例 + ``` + var type = 'windowSizeChange'; + windowClass.on(type, (data) => { + console.info('Succeeded in enabling the listener for window size changes. Data: ' + JSON.stringify(data)); + }); + ``` + +### off('keyboardHeightChange'|'windowSizeChange'7+|'systemAvoidAreaChange'7+) + +off(type: string, callback?: Callback<AvoidArea | Size | number>): void + +关闭监听。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | type | string | 是 | 设置监听类型。
- type为'keyboardHeightChange'时表示监听类型为键盘高度变化监听;
- type为'windowSizeChange'7+时表示监听类型为窗口尺寸变化监听;
- type为'systemAvoidAreaChange'7+时表示监听类型为系统窗口规避区变化监听。 | + | callback | Callback<[AvoidArea](#avoidarea) \| [Size](#size) \| number> | 否 | 回调返回监听到的信息。 | + +- 示例 + ``` + var type = 'windowSizeChange'; + windowClass.off(type); + ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/10.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/11.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/10.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/11.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" index 49d33961c0da04a86646fd59ab99f417db8a9948..c63e7ae1fed46850b9236a5b7023d41cc19a4395 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/10.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/11.\346\230\276\347\244\272\350\256\276\345\244\207\345\261\236\346\200\247.md" @@ -1,6 +1,6 @@ --- title: 显示设备属性 -permalink: /pages/000b000709 +permalink: /pages/010c010a0b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 显示设备属性 @@ -48,9 +48,6 @@ import display from '@ohos.display'; 描述display对象的属性。 - -### 属性 - | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | | id | number | 是 | 否 | 显示设备的id号。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/11.\345\215\207\347\272\247.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/12.\345\215\207\347\272\247.md" similarity index 85% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/11.\345\215\207\347\272\247.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/12.\345\215\207\347\272\247.md" index 989ea8ae62f88cd62103313a849622b5043618ef..b9394af41f9e435cdd7f07404e982b9a6060aef6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/08.\350\256\276\345\244\207\347\256\241\347\220\206/11.\345\215\207\347\272\247.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/12.\345\215\207\347\272\247.md" @@ -1,6 +1,6 @@ --- title: 升级 -permalink: /pages/000b00070a +permalink: /pages/010c010a0c navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 升级 @@ -23,13 +23,104 @@ date: 2021-12-30 18:31:36 ## 导入模块 ```js -import client from '@ohos.update' +import update from '@ohos.update' ``` ## 权限列表 无 +## 获取升级对象Updater + +### update.getUpdater + +getUpdater(upgradeFile: string, updateType?: UpdateTypes): Updater + +获取本地升级Updater。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ----------- | --------------------------- | ---- | -------- | +| upgradeFile | string | 是 | 升级文件 | +| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | + +**返回值:** + +| 类型 | 说明 | +| ------------------- | -------- | +| [Updater](#updater) | 升级对象 | + +**示例:** + +``` +try { + let updater = update.getUpdater('/data/updater/updater.zip', 'OTA'); +} catch(error) { + console.error(" Fail to get updater error: " + error); +} +``` + +### update.getUpdaterForOther + +getUpdaterForOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater + +获取升级对象给待升级设备。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ----------- | --------------------------- | ---- | ---------- | +| upgradeFile | string | 是 | 升级文件 | +| device | string | 是 | 待升级设备 | +| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | + +**返回值:** + +| 类型 | 说明 | +| ------------------- | -------- | +| [Updater](#updater) | 升级对象 | + +**示例:** + +``` +try { + let updater = update.getUpdaterForOther('/data/updater/updater.zip', '1234567890', 'OTA'); +} catch(error) { + console.error(" Fail to get updater error: " + error); +} +``` + +### update.getUpdaterFromOther + +getUpdaterFromOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater + +获取其它设备为本设备升级的Updater。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ----------- | --------------------------- | ---- | ---------- | +| upgradeFile | string | 是 | 升级文件 | +| device | string | 是 | 待升级设备 | +| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | + +**返回值:** + +| 类型 | 说明 | +| ------------------- | -------- | +| [Updater](#updater) | 升级对象 | + +**示例:** + +``` +try { + let updater = update.getUpdaterFromOther('/data/updater/updater.zip', '1234567890', 'OTA'); +} catch(error) { + console.error(" Fail to get updater error: " + error); +} +``` + ## Updater ### getNewVersionInfo @@ -47,12 +138,12 @@ getNewVersionInfo(callback: AsyncCallback\): void **示例:** ``` -updater.getNewVersionInfo(info => { +update.getNewVersionInfo(info => { console.log("getNewVersionInfo success " + info.status); console.log(`info versionName = ` + info.result[0].versionName); console.log(`info versionCode = ` + info.result[0].versionCode); console.log(`info verifyInfo = ` + info.result[0].verifyInfo); -)}; +}); ``` ### getNewVersionInfo @@ -70,14 +161,13 @@ getNewVersionInfo(): Promise\ **示例:** ``` -var p = updater.getNewVersionInfo(); -p.then(function (value) { +updater.getNewVersionInfo().then(value => { console.log(`info versionName = ` + value.result[0].versionName); console.log(`info versionCode = ` + value.result[0].versionCode); console.log(`info verifyInfo = ` + value.result[0].verifyInfo); -}).catch(function (err) { +}).catch(err => { console.log("getNewVersionInfo promise error: " + err.code); -)}; +}); ``` ### checkNewVersion @@ -95,12 +185,12 @@ checkNewVersion(callback: AsyncCallback\): void **示例:** ``` -updater.checkNewVersion(info => { +update.checkNewVersion(info => { console.log("checkNewVersion success " + info.status); console.log(`info versionName = ` + info.result[0].versionName); console.log(`info versionCode = ` + info.result[0].versionCode); console.log(`info verifyInfo = ` + info.result[0].verifyInfo); -)}; +}); ``` ### checkNewVersion @@ -118,14 +208,13 @@ checkNewVersion(): Promise\ **示例:** ``` -var p = updater.checkNewVersion(); -p.then(function (value) { +update.checkNewVersion().then(value => { console.log(`info versionName = ` + value.result[0].versionName); console.log(`info versionCode = ` + value.result[0].versionCode); console.log(`info verifyInfo = ` + value.result[0].verifyInfo); -}).catch(function (err) { +}).catch(err => { console.log("checkNewVersion promise error: " + err.code); -)}; +}); ``` ### verifyUpdatePackage @@ -144,12 +233,10 @@ verifyUpdatePackage(upgradeFile: string, certsFile: string): void **示例:** ``` -var getVar = update.getUpdater(); -getVar.on("verifyProgress", function (callback){ - console.info('on verifyProgress ' + callback.percent); +update.on("verifyProgress", callback => { + console.info('on verifyProgress ' + callback.percent); }); -getVar.verifyUpdatePackage("XXX", "XXX"); -getVar.off("verifyProgress"); +update.verifyUpdatePackage("XXX", "XXX"); ``` ### rebootAndCleanUserData @@ -167,12 +254,10 @@ rebootAndCleanUserData(): Promise\ **示例:** ``` -var getVar = update.getUpdater(); -p = getVar.rebootAndCleanUserData(); -p.then(function (value) { - console.info("rebootAndCleanUserData promise success: " + value); -}).catch(function (err) { - console.info("rebootAndCleanUserData promise error: " + err.code); +update.rebootAndCleanUserData().then(result => { + console.log("rebootAndCleanUserData " + result); +}).catch(err => { + console.info("rebootAndCleanUserData promise error: " + err.code); }); ``` @@ -191,13 +276,8 @@ rebootAndCleanUserData(callback: AsyncCallback\): void **示例:** ``` -var getVar = update.getUpdater(); -getVar.rebootAndCleanUserData(function (err, data) { - if (err.code == 0) { - console.info("rebootAndCleanUserData callback success:" + data) - } else { - console.info("rebootAndCleanUserData callback err:" + err.code) - } +update.rebootAndCleanUserData(result => { + console.log("rebootAndCleanUserData ", result) }); ``` @@ -216,10 +296,9 @@ applyNewVersion(): Promise\ **示例:** ``` -var getVar = update.getUpdater(); -p.then(function (value) { - console.info("applyNewVersion promise success: " + value); -}).catch(function (err) { +update.applyNewVersion().then(result => { + console.log("appVewVersion ", result) +}).catch(err => { console.info("applyNewVersion promise error: " + err.code); }); ``` @@ -239,13 +318,8 @@ applyNewVersion(callback: AsyncCallback\): void **示例:** ``` -var getVar = update.getUpdater(); -getVar.applyNewVersion(function (err, data) { - if (err.code == 0) { - console.info("applyNewVersion callback success:" + data) - } else { - console.info("applyNewVersion callback err:" + err.code) - } +update.applyNewVersion(result => { + console.log("applyNewVersion ", result) }); ``` @@ -262,7 +336,7 @@ updater.on("downloadProgress", progress => { console.log("downloadProgress on" + progress); console.log(`downloadProgress status: ` + progress.status); console.log(`downloadProgress percent: ` + progress.percent); -)}; +}); updater.download(); ``` @@ -279,7 +353,7 @@ updater.on("upgradeProgress", progress => { console.log("upgradeProgress on" + progress); console.log(`upgradeProgress status: ` + progress.status); console.log(`upgradeProgress percent: ` + progress.percent); -)}; +}); updater.upgrade(); ``` @@ -301,14 +375,15 @@ setUpdatePolicy(policy: UpdatePolicy, callback: AsyncCallback\): void ``` // 设置策略 let policy = { -autoDownload: false, -autoDownloadNet: true, -mode: 2, -autoUpgradeInterval: [ 2, 3 ], -autoUpgradeCondition: 2 + autoDownload: false, + autoDownloadNet: true, + mode: 2, + autoUpgradeInterval: [ 2, 3 ], + autoUpgradeCondition: 2 } -updater.setUpdatePolicy(policy, function(result) { -console.log("setUpdatePolicy ", result)}); +update.setUpdatePolicy(policy, result => { + console.log("setUpdatePolicy ", result) +}); ``` ### setUpdatePolicy @@ -333,16 +408,17 @@ setUpdatePolicy(policy: UpdatePolicy): Promise\ ``` let policy = { -autoDownload: false, -autoDownloadNet: true, -mode: 2, -autoUpgradeInterval: [ 2, 3 ], -autoUpgradeCondition: 2 + autoDownload: false, + autoDownloadNet: true, + mode: 2, + autoUpgradeInterval: [ 2, 3 ], + autoUpgradeCondition: 2 } -updater.setUpdatePolicy(policy) -.then(data=> -console.log('set policy success') -) +update.setUpdatePolicy(policy).then(result => + console.log("setUpdatePolicy ", result) +).catch(err => { + console.log("setUpdatePolicy promise error: " + err.code); +}); ``` ### getUpdatePolicy @@ -360,12 +436,12 @@ getUpdatePolicy(callback: AsyncCallback\): void **示例:** ``` -updater.getUpdatePolicy(policy => { +update.getUpdatePolicy(policy => { console.log("getUpdatePolicy success"); console.log(`policy autoDownload = ` + policy.autoDownload); console.log(`policy autoDownloadNet = ` + policy.autoDownloadNet); console.log(`policy mode = ` + policy.mode); -)}; +}); ``` ### getUpdatePolicy @@ -383,103 +459,13 @@ getUpdatePolicy(): Promise\ **示例:** ``` -p = updater.getUpdatePolicy(); -p.then(function (value) { +update.getUpdatePolicy().then(value => { console.log(`info autoDownload = ` + value.autoDownload); console.log(`info autoDownloadNet = ` + value.autoDownloadNet); console.log(`info mode = ` + value.mode); -}).catch(function (err) { +}).catch(err => { console.log("getUpdatePolicy promise error: " + err.code); -)}; -``` - -## update.getUpdater - -getUpdater(upgradeFile: string, updateType?: UpdateTypes): Updater - -获取本地升级Updater。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ----------- | --------------------------- | ---- | -------- | -| upgradeFile | string | 是 | 升级文件 | -| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | - -**返回值:** - -| 类型 | 说明 | -| ------------------- | -------- | -| [Updater](#updater) | 升级对象 | - -**示例:** - -``` -try { - page.data.updater = update.getUpdater('/data/updater/updater.zip', 'OTA'); -} catch(error) { - console.error(" Fail to get updater error: " + error); -} -``` - -## update.getUpdaterForOther - -getUpdaterForOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater - -获取升级对象给待升级设备。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ----------- | --------------------------- | ---- | ---------- | -| upgradeFile | string | 是 | 升级文件 | -| device | string | 是 | 待升级设备 | -| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | - -**返回值:** - -| 类型 | 说明 | -| ------------------- | -------- | -| [Updater](#updater) | 升级对象 | - -**示例:** - -``` -try { - page.data.updater = update.getUpdaterForOther('/data/updater/updater.zip', '1234567890', 'OTA'); -} catch(error) { - console.error(" Fail to get updater error: " + error); -} -``` - -## update.getUpdaterFromOther - -getUpdaterFromOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater - -获取其它设备为本设备升级的Updater。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ----------- | --------------------------- | ---- | ---------- | -| upgradeFile | string | 是 | 升级文件 | -| device | string | 是 | 待升级设备 | -| updateType | [UpdateTypes](#updatetypes) | 是 | 升级类型 | - -**返回值:** - -| 类型 | 说明 | -| ------------------- | -------- | -| [Updater](#updater) | 升级对象 | - -**示例:** - -``` -try { - page.data.updater = update.getUpdaterFromOther('/data/updater/updater.zip', '1234567890', 'OTA'); -} catch(error) { - console.error(" Fail to get updater error: " + error); -} +}); ``` ## UpdateTypes diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/13.USB\347\256\241\347\220\206.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/13.USB\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..75cfa507797ccf3db93ed02c63d4706adc2b2560 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\256\276\345\244\207\347\256\241\347\220\206/13.USB\347\256\241\347\220\206.md" @@ -0,0 +1,541 @@ +--- +title: USB管理 +permalink: /pages/010c010a0d +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# USB管理 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import usb from "@ohos.usb"; +``` + + +## 权限 + +无 + + +## usb.getDevices + +usb.getDevices(): Array<Readonly<USBDevice>> + +获取USB设备列表。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<Readonly<[USBDevice](#usbdevice)>> | 设备信息列表。 | + +- 示例: + ``` + let devicesList = usb.getDevices(); + console.log(`devicesList = ${JSON.stringify(devicesList)}`); + //devicesList 返回的数据结构 + //此处提供一个简单的示例,如下 + [ + { + name: "1-1", + serial: "", + manufacturerName: "", + productName: "", + version: "", + vendorId: 7531, + productId: 2, + clazz: 9, + subclass: 0, + protocol: 1, + devAddress: 1, + busNum: 1, + configs: [ + { + id: 1, + attributes: 224, + isRemoteWakeup: true, + isSelfPowered: true, + maxPower: 0, + name: "1-1", + interfaces: [ + { + id: 0, + protocol: 0, + clazz: 9, + subclass: 0, + alternateSetting: 0, + name: "1-1", + endpoints: [ + { + address: 129, + attributes: 3, + interval: 12, + maxPacketSize: 4, + direction: 128, + number: 1, + type: 3, + interfaceId: 0, + }, + ], + }, + ], + }, + ], + }, + ] + ``` + + +## usb.connectDevice + +usb.connectDevice(device: USBDevice): Readonly<USBDevicePipe> + +打开USB设备。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备信息以及device;再调用[usb.requestRight](#usbrequestright)获取设备请求权限。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | device | [USBDevice](#usbdevice) | 是 | USB设备信息。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Readonly<[USBDevicePipe](#usbdevicepipe)> | 指定的传输通道对象。 | + +- 示例: + ``` + let devicepipe= usb.connectDevice(device); + console.log(`devicepipe = ${JSON.stringify(devicepipe)}`); + ``` + + +## usb.hasRight + +usb.hasRight(deviceName: string): boolean + +判断是否有权访问该设备。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | deviceName | string | 是 | 设备名称。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | true表示有访问设备的权限,false表示没有访问设备的权限。 | + +- 示例: + ``` + let divicesName="1-1"; + let bool = usb.hasRight(divicesName); + console.log(bool); + ``` + + +## usb.requestRight + +usb.requestRight(deviceName: string): Promise<boolean> + +请求软件包的临时权限以访问设备。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | deviceName | string | 是 | 设备名称。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<boolean> | 获取到true则表示软件包的临时权限已访问成功, 获取到false则表示软件包的临时权限已访问失败。 | + +- 示例: + ``` + let divicesName="1-1"; + usb.requestRight(divicesName).then((ret) => { + console.log(`requestRight = ${JSON.stringify(ret)}`); + }); + ``` + + +## usb.claimInterface + +usb.claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number + +注册通信接口。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备信息以及interfaces;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)接口得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + | iface | [USBInterface](#usbinterface) | 是 | 用于确定需要获取接口的索引。 | + | force | boolean | 否 | 可选参数,是否强制获取。默认值false ,表示不强制获取。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 注册通信接口成功返回0;注册通信接口失败返回其他错误码。 | + +- 示例: + ``` + let ret = usb.claimInterface(devicepipe, interfaces); + console.log(`claimInterface = ${ret}`); + ``` + + +## usb.releaseInterface + +usb.releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number + +释放注册过的通信接口。 + +需要调用[usb.claimInterface](#usbclaiminterface)先获取接口,才能使用此方法释放接口。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + | iface | [USBInterface](#usbinterface) | 是 | 用于确定需要释放接口的索引。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 释放接口成功返回0;释放接口失败返回其他错误码。 | + +- 示例: + ``` + let ret = usb.releaseInterface(devicepipe, interfaces); + console.log(`releaseInterface = ${ret}`); + ``` + + +## usb.setConfiguration + +usb.setConfiguration(pipe: USBDevicePipe, config: USBConfig): number + +设置设备配置。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备信息以及config;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + | config | [USBConfig](#usbconfig) | 是 | 用于确定需要设置的配置。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 设置设备配置成功返回0;设置设备配置失败返回其他错误码。 | + +- 示例: + ``` + let ret = usb.setConfiguration(devicepipe, config); + console.log(`setConfiguration = ${ret}`); + ``` + + +## usb.setInterface + +usb.setInterface(pipe: USBDevicePipe, iface: USBInterface): number + +设置设备接口。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备列表以及interfaces;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + | iface | [USBInterface](#usbinterface) | 是 | 用于确定需要设置的接口。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 设置设备接口成功返回0;设置设备接口失败返回其他错误码。 | + +- 示例: + ``` + let ret = usb.setInterface(devicepipe, interfaces); + console.log(`setInterface = ${ret}`); + ``` + + +## usb.getRawDescriptor + +usb.getRawDescriptor(pipe: USBDevicePipe): Uint8Array + +获取原始的USB描述符。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备列表;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)接口得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Uint8Array | 返回获取的原始数据。 | + +- 示例: + ``` + let ret = usb.getRawDescriptor(devicepipe); + ``` + + +## usb.getFileDescriptor + +usb.getFileDescriptor(pipe: USBDevicePipe): number + +获取文件描述符。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备列表;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)接口得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定总线号和设备地址。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回设备对应的文件描述符。 | + +- 示例: + ``` + let ret = usb.getFileDescriptor(devicepipe); + ``` + + +## usb.controlTransfer + +usb.controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise<number> + +控制传输。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备列表;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)接口得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备。 | + | contrlparam | [USBControlParams](#usbcontrolparams) | 是 | 控制传输参数。 | + | timeout | number | 否 | 超时时间,可选参数,默认为0不超时。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 获取传输或接收到的数据块大小, 获取到-1则表示异常。 | + +- 示例: + ``` + usb.controlTransfer(devicepipe, USBControlParams).then((ret) => { + console.log(`controlTransfer = ${JSON.stringify(ret)}`); + }) + ``` + + +## usb.bulkTransfer + +usb.bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise<number> + +批量传输。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备信息列表以及endpoint;再调用[usb.requestRight](#usbrequestright)获取设备请求权限;然后调用[usb.connectDevice](#usbconnectdevice)接口得到返回数据devicepipe之后,再次获取接口[usb.claimInterface](#usbclaiminterface);再调用usb.bulkTransfer接口。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定设备。 | + | endpoint | [USBEndpoint](#usbendpoint) | 是 | 用于确定传输的端口。 | + | buffer | Uint8Array | 是 | 用于写入或读取的缓冲区。 | + | timeout | number | 否 | 超时时间,可选参数,默认为0不超时。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 获取传输或接收到的数据块大小, 获取到-1则表示异常。 | + +- 示例: + ``` + //usb.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限 。 + //把获取到的设备对象作为参数传入usb.connectDevice;当usb.connectDevice接口成功返回之后; + //才可以调用第三个接口usb.claimInterface.当usb.claimInterface 调用成功以后,再调用该接口。 + usb.bulkTransfer(devicepipe, endpoint, buffer).then((ret) => { + console.log(`bulkTransfer = ${JSON.stringify(ret)}`); + }); + ``` + + +## usb.closePipe + +usb.closePipe(pipe: USBDevicePipe): number + +关闭设备消息控制通道。 + +需要调用[usb.getDevices](#usbgetdevices)获取设备列表;调用[usb.requestRight](#usbrequestright)获取设备请求权限;调用[usb.connectDevice](#usbconnectdevice)得到devicepipe作为参数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | pipe | [USBDevicePipe](#usbdevicepipe) | 是 | 用于确定USB设备消息控制通道。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码。 | + +- 示例: + ``` + let ret = usb.closePipe(devicepipe); + console.log(`closePipe = ${ret}`); + ``` + + +## USBEndpoint + +通过USB发送和接收数据的端口。通过[USBInterface](#usbinterface)获取。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| address | number | 端点地址。 | +| attributes | number | 端点属性。 | +| interval | number | 端点间隔。 | +| maxPacketSize | number | 端点最大数据包大小。 | +| direction | [USBRequestDirection](#usbrequestdirection) | 端点的方向。 | +| number | number | 端点号。 | +| type | number | 端点类型。 | +| interfaceId | number | 端点所属的接口的唯一标识。 | + + +## USBInterface + +一个[USBConfig](#usbconfig)中可以含有多个USBInterface,每个USBInterface提供一个功能。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| id | number | 接口的唯一标识。 | +| protocol | number | 接口的协议。 | +| clazz | number | 设备类型。 | +| subClass | number | 设备子类。 | +| alternateSetting | number | 在同一个接口中的多个描述符中进行切换设置。 | +| name | string | 接口名称。 | +| endpoints | Array<[USBEndpoint](#usbendpoint)> | 当前接口所包含的端点。 | + + +## USBConfig + +USB配置,一个[USBDevice](#usbdevice)中可以含有多个配置。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| id | number | 配置的唯一标识。 | +| attributes | number | 配置的属性。 | +| maxPower | number | 最大功耗,以毫安为单位。 | +| name | string | 配置的名称,可以为空。 | +| isRemoteWakeup | boolean | 检查当前配置是否支持远程唤醒。 | +| isSelfPowered | boolean | 检查当前配置是否支持独立电源。 | +| interfaces | Array <[USBInterface](#usbinterface)> | 配置支持的接口属性。 | + + +## USBDevice + +USB设备信息。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| busNum | number | 总线地址。 | +| devAddress | number | 设备地址。 | +| serial | string | 序列号。 | +| name | string | 设备名字。 | +| manufacturerName | string | 产商信息。 | +| productName | string | 产品信息。 | +| version | string | 版本。 | +| vendorId | number | 厂商ID。 | +| productId | number | 产品ID。 | +| clazz | number | 设备类。 | +| subClass | number | 设备子类。 | +| protocol | number | 设备协议码。 | +| configs | Array<[USBConfig](#usbconfig)> | 设备配置描述符信息。 | + + +## USBDevicePipe + +USB设备消息传输通道,用于确定设备。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| busNum | number | 总线地址。 | +| devAddress | number | 设备地址。 | + + +## USBControlParams + +控制传输参数。 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| request | number | 请求类型。 | +| target | [USBRequestTargetType](#usbrequesttargettype) | 请求目标类型。 | +| reqType | [USBControlRequestType](#usbcontrolrequesttype) | 请求控制类型。 | +| value | number | 请求参数。 | +| index | number | 请求参数value对应的索引值。 | +| data | Uint8Array | 用于写入或读取的缓冲区。 | + + +## USBRequestTargetType + +请求目标类型。 + + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| USB_REQUEST_TARGET_DEVICE | 0 | 设备。 | +| USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 | +| USB_REQUEST_TARGET_ENDPOINT | 2 | 端点。 | +| USB_REQUEST_TARGET_OTHER | 3 | 其他。 | + + +## USBControlRequestType + +控制请求类型。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| USB_REQUEST_TYPE_STANDARD | 0 | 标准。 | +| USB_REQUEST_TYPE_CLASS | 1 | 类。 | +| USB_REQUEST_TYPE_VENDOR | 2 | 厂商。 | + + +## USBRequestDirection + +请求方向。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| USB_REQUEST_TYPE_STANDARD | 0 | 写数据,主设备往从设备。 | +| USB_REQUEST_TYPE_CLASS | 0x80 | 读数据,从设备往主设备。 | + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| NONE | 0 | 无。 | +| ACM | 1 | 串口设备。 | +| ECM | 2 | 网口设备。 | +| HDC | 4 | HDC设备。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" index a2c44560eb033227b69480da9e582550533f6729..a70a23910a641a1e3af07966ea5e56d26eb29f0a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/01.\345\272\224\347\224\250\344\270\212\344\270\213\346\226\207.md" @@ -1,6 +1,6 @@ --- title: 应用上下文 -permalink: /pages/000b000800 +permalink: /pages/010c010b01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 应用上下文 @@ -60,7 +60,7 @@ terminate(): void 退出当前Ability > ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> 从API Version 7 开始,推荐使用新接口['@ohos.ability.featureAbility'](/pages/000b000000)。 +> 从API Version 7 开始,推荐使用新接口['@ohos.ability.featureAbility'](/pages/010c010101)。 - 示例 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" index 8575d69e0e104a22a38d683aba41081b484d19db..be067ec26622b92ddce92c87894f1c85a8057db6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/02.\346\227\245\345\277\227\346\211\223\345\215\260.md" @@ -1,6 +1,6 @@ --- title: 日志打印 -permalink: /pages/000b000801 +permalink: /pages/010c010b02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 日志打印 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" similarity index 92% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" index a2f723f5b1c26cfc422c37e1aea2650a9c9ef16e..08694940825cf8e940cb3241541d42a15bde6515 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/03.\351\241\265\351\235\242\350\267\257\347\224\261.md" @@ -1,6 +1,6 @@ --- title: 页面路由 -permalink: /pages/000b000802 +permalink: /pages/010c010b03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 页面路由 @@ -302,35 +302,3 @@ disableAlertBeforeBackPage(Object): void } } ``` - -## router.getParams7+ - -getParams(): Object - -获取发起跳转的页面往当前页传入的参数。 - -- 返回值 - | 类型 | 说明 | - | -------- | -------- | - | Object | 发起跳转的页面往当前页传入的参数。 | - -- 示例 - ``` - // 在当前页面中 - export default { - pushPage() { - router.push({ - uri: 'pages/detail/detail', - params: { - data1: 'message', - }, - }); - } - } - // 在detail页面中 - export default { - onInit() { - console.info('showData1:' + router.getParams().data1); - } - } - ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" index 1213cac6a6cd1b6c30601385cf444813e30a66fe..f3966a21df6b16f66c3bce5ef39792fed46ae057 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/04.\345\274\271\347\252\227.md" @@ -1,6 +1,6 @@ --- title: 弹窗 -permalink: /pages/000b000803 +permalink: /pages/010c010b04 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 弹窗 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" index b386f1e8edb9f91e2132a9ecfd7acda297f714af..9bb45d1d6905458c01cbc3a897a14e96aa1933e3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/05.\345\272\224\347\224\250\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 应用配置 -permalink: /pages/000b000804 +permalink: /pages/010c010b05 navbar: true sidebar: true prev: true @@ -9,19 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 应用配置 -- [导入模块](#导入模块) -- [权限列表](#权限列表) -- [configuration.getLocale](#configurationgetLocale) - > ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.i18n'](/pages/000b000101)和['@ohos.intl'](/pages/000b000102)。 -> -> +> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.i18n'](/pages/010c010202)和['@ohos.intl'](/pages/010c010203)。 > diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" index 5839e867f9507b9adcc7e4b7df696a2fc88b7d19..21c04a1358c2cf840e6bb3d8a5d4b427ad26eb7c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/06.\345\256\232\346\227\266\345\231\250.md" @@ -1,6 +1,6 @@ --- title: 定时器 -permalink: /pages/000b000805 +permalink: /pages/010c010b06 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 定时器 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" index 4e037e44624615739afc321e383b0bba8f2aec1a..618a4db9f3ed51fd442aed4b349f10ee564ebd8d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/07.\350\256\276\347\275\256\347\263\273\347\273\237\346\227\266\351\227\264.md" @@ -1,6 +1,6 @@ --- title: 设置系统时间 -permalink: /pages/000b000806 +permalink: /pages/010c010b07 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 设置系统时间 @@ -17,13 +17,6 @@ date: 2021-12-30 18:31:36 > 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -## 支持设备 - -| 手机 | 平板 | 智慧屏 | 智能穿戴 | -| -------- | -------- | -------- | -------- | -| 支持 | 支持 | 支持 | 支持 | - - ## 导入模块 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" index af83bfb143f804d2b1fe16964c4b48649260fc1a..434a40e99fbbf98234b4f08bcc4ff4ce58d9b0ed 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/08.\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 动画 -permalink: /pages/000b000807 +permalink: /pages/010c010b08 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 动画 @@ -179,8 +179,8 @@ createAnimator(options[...]): void | duration | number | 否 | 动画播放的时长,单位毫秒,默认为0。 | | easing | string | 否 | 动画插值曲线,默认为' ease '。 | | delay | number | 否 | 动画延时播放时长,单位毫秒,默认为0,即不延时。 | - | fill | string | 否 | 动画启停模式,默认值none,详情见:[animation-fill-mode](/pages/000b0100010004) | - | direction | string | 否 | 动画播放模式,默认值normal,详情见:[animation-direction](/pages/000b0100010004) | + | fill | string | 否 | 动画启停模式,默认值none,详情见:[animation-fill-mode](/pages/010c0201010105) | + | direction | string | 否 | 动画播放模式,默认值normal,详情见:[animation-direction](/pages/010c0201010105) | | iterations | number | 否 | 动画播放次数,默认值1,设置为0时不播放,设置为-1时无限次播放。 | | begin | number | 否 | 动画插值起点,不设置时默认为0。 | | end | number | 否 | 动画插值终点,不设置时默认为1。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" index bb52db7b6762980a2cce6b8f5ad41faf082f051a..5ca9c5a6a8df7ec80d821b167f915f3449e36c44 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/09.\345\272\224\347\224\250\346\211\223\347\202\271.md" @@ -1,6 +1,6 @@ --- title: 应用打点 -permalink: /pages/000b000808 +permalink: /pages/010c010b09 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 应用打点 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" index 42a900dfdf1e6878b968326f13bea5ab8878ed9a..239c3a8493518ce40ba8e2d8cf92f559badae059 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/09.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/10.\346\200\247\350\203\275\346\211\223\347\202\271.md" @@ -1,6 +1,6 @@ --- title: 性能打点 -permalink: /pages/000b000809 +permalink: /pages/010c010b0a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 性能打点 @@ -77,22 +77,22 @@ finishTrace(name: string, taskId: number): void ``` //追踪并行执行的同名任务 bytrace.startTrace("myTestFunc", 1); - ...... //业务流程 + //业务流程...... bytrace.startTrace("myTestFunc", 2); //第二个追踪的任务开始,同时第一个追踪的同名任务还没结束,出现了并行执行,对应接口的taskId需要不同。 - ...... //业务流程 + //业务流程...... bytrace.finishTrace("myTestFunc", 1); - ...... //业务流程 + //业务流程...... bytrace.finishTrace("myTestFunc", 2); ``` ``` //追踪串行执行的同名任务 bytrace.startTrace("myTestFunc", 1); - ...... //业务流程 + //业务流程...... bytrace.finishTrace("myTestFunc", 1); //第一个追踪的任务结束 - ...... //业务流程 + //业务流程...... bytrace.startTrace("myTestFunc", 1); //第二个追踪的同名任务开始,同名的待追踪任务串行执行。 - ...... //业务流程 + //业务流程...... bytrace.finishTrace("myTestFunc", 1); ``` @@ -114,7 +114,7 @@ traceByValue(name: string, value: number): void ``` let traceCount = 3; bytrace.traceByValue("myTestCount", traceCount); - ...... - traceCount = 5; + traceCount = 4; bytrace.traceByValue("myTestCount", traceCount); + //业务流程...... ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/11.\346\225\205\351\232\234\346\227\245\345\277\227\350\216\267\345\217\226.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/11.\346\225\205\351\232\234\346\227\245\345\277\227\350\216\267\345\217\226.md" new file mode 100644 index 0000000000000000000000000000000000000000..0263b8ef0f1f43a409c243c1b88dd7be0ff56a6b --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/11.\345\237\272\346\234\254\345\212\237\350\203\275/11.\346\225\205\351\232\234\346\227\245\345\277\227\350\216\267\345\217\226.md" @@ -0,0 +1,124 @@ +--- +title: 故障日志获取 +permalink: /pages/010c010b0b +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 故障日志获取 +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 导入模块 + +``` +import faultLogger from '@ohos.faultLogger' +``` + +## 权限 + +无 + +## FaultType + +故障类型枚举 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| NO_SPECIFIC | 0 | 不区分故障类型 | +| CPP_CRASH | 2 | C++程序故障类型 | +| JS_CRASH | 3 | JS程序故障类型 | +| APP_FREEZE | 4 | 应用程序卡死故障类型 | + +## FaultLogInfo + +故障信息数据结构,获取到的故障信息的数据结构 + +| 名称 | 参数类型 | 说明 | +| -------- | -------- | -------- | +| pid | number | 故障进程的进程id | +| uid | number | 故障进程的用户id | +| type | [FaultType](#faulttype) | 故障类型 | +| timestamp | number | 日志生成时的秒级时间戳 | +| reason | string | 发生故障的原因 | +| module | string | 发生故障的模块 | +| summary | string | 故障的概要 | +| fullLog | string | 故障日志全文 | + +## faultLogger.querySelfFaultLog + +querySelfFaultLog(faultType: FaultType, callback: AsyncCallback<Array<FaultLogInfo>>) : void + +获取当前进程故障信息,该方法通过回调方式获取故障信息数组,故障信息数组内最多上报10份故障信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | faultType | [FaultType](#faulttype) | 是 | 输入要查询的故障类型。 | + | callback | AsyncCallbackArray<Array<[FaultLogInfo](#faultloginfo)>> | 是 | 回调函数,在回调函数中获取故障信息数组。
- value拿到故障信息数组;value为undefined表示获取过程中出现异常,error返回错误提示字符串 + +- 示例: +``` +function queryFaultLogCallback(error, value) { + if (error) { + console.info('error is ' + error); + } else { + console.info("value length is " + value.length); + let len = value.length; + for (let i = 0; i < len; i++) { + console.info("log: " + i); + console.info("Log pid: " + value[i].pid); + console.info("Log uid: " + value[i].uid); + console.info("Log type: " + value[i].type); + console.info("Log ts: " + value[i].ts); + console.info("Log reason: " + value[i].reason); + console.info("Log module: " + value[i].module); + console.info("Log summary: " + value[i].summary); + console.info("Log text: " + value[i].fullLog); + } + } +} +faultLogger.querySelfFaultLog(faultlogger.FaultType.JS_CRASH, queryFaultLogCallback); +``` + +## faultLogger.querySelfFaultLog + +querySelfFaultLog(faultType: FaultType) : Promise<Array<FaultLogInfo>>; + +获取当前进程故障信息,该方法通过Promise方式返回故障信息数组,故障信息数组内最多上报10份故障信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | faultType | [FaultType](#faulttype) | 是 | 输入要查询的故障类型。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<Array<[FaultLogInfo](#faultloginfo)>> | Promise实例,可以在其then()方法中获取故障信息实例,也可以使用await。
- value拿到故障信息数组;value为undefined表示获取过程中出现异常 | + +- 示例: +``` +let value = await faultLogger.querySelfFaultLog(faultlogger.FaultType.JS_CRASH); +if (value) { + console.info("value length is " + value.length); + let len = value.length; + for (let i = 0; i < len; i++) { + console.info("log: " + i); + console.info("Log pid: " + value[i].pid); + console.info("Log uid: " + value[i].uid); + console.info("Log type: " + value[i].type); + console.info("Log ts: " + value[i].ts); + console.info("Log reason: " + value[i].reason); + console.info("Log module: " + value[i].module); + console.info("Log summary: " + value[i].summary); + console.info("Log text: " + value[i].fullLog); + } +} +``` \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" similarity index 61% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" index 140d6b637c211b978381fae14334542e34e52dc7..90898452d47ddc2706ee331d9f5efd11cdfad399 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/01.\350\216\267\345\217\226\350\277\233\347\250\213\347\233\270\345\205\263\347\232\204\344\277\241\346\201\257.md" @@ -1,6 +1,6 @@ --- title: 获取进程相关的信息 -permalink: /pages/000b000900 +permalink: /pages/010c010c01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 获取进程相关的信息 @@ -24,22 +24,18 @@ import process from '@ohos.process'; ``` -## 权限 - -无 - - ## 属性 | 名称 | 类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| egid | number | 是 | 否 | 获取进程的有效组标识。 | -| euid | number | 是 | 否 | 获取进程的有效用户身份。 | -| gid | number | 是 | 否 | 获取进程的组标识。 | -| uid | number | 是 | 否 | 获取进程的用户标识。 | -| groups | number[] | 是 | 否 | 获取一个带有补充组id的数组。 | -| pid | number | 是 | 否 | 获取当前进程的pid。 | -| ppid | number | 是 | 否 | 获取当前进程的父进程的pid。 | +| egid | number | 是 | 否 | 进程的有效组标识。 | +| euid | number | 是 | 否 | 进程的有效用户身份。 | +| gid | number | 是 | 否 | 进程的组标识。 | +| uid | number | 是 | 否 | 进程的用户标识。 | +| groups | number[] | 是 | 否 | 带有补充组id的数组。 | +| pid | number | 是 | 否 | 当前进程的pid。 | +| ppid | number | 是 | 否 | 当前进程的父进程的pid。 | +| tid8+ | number | 是 | 否 | 当前进程的tid。 | ## ChildProcess @@ -70,7 +66,6 @@ wait(): Promise<number> - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('ls'); var result = child.wait(); result.then(val=>{ @@ -92,7 +87,6 @@ getOutput(): Promise<Uint8Array> - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('ls'); var result = child.wait(); child.getOutput.then(val=>{ @@ -114,7 +108,6 @@ getErrorOutput函数用来获取子进程的标准错误输出。 - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('madir test.text'); var result = child.wait(); child.getErrorOutput.then(val=>{ @@ -131,7 +124,6 @@ close(): void - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('sleep 5; ls'); child.close(); ``` @@ -150,12 +142,208 @@ kill函数用来发送信号给子进程,结束指定进程。 - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('sleep 5; ls'); child.kill(9); ``` +## process.isIsolatedProcess8+ + +isIsolatedProcess(): boolean + +判断进程是否被隔离。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回判断结果,如果返回true表示进程被隔离。 | + +- 示例: + ``` + var result = process.isIsolatedProcess(); + ``` + + +## process.isAppUid8+ + +isAppUid(v:number): boolean + +判断uid是否属于应用程序。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | v | number | 是 | 应用程序的uid。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回判断结果,如果返回true表示为应用程序的uid。| + +- 示例: + ``` + var result = process.isAppUid(688); + ``` + + +## process.is64Bit8+ + +is64Bit(): boolean + +判断运行环境是否64位。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回判断结果,如果返回true表示为64位环境。 | + +- 示例: + ``` + var ressult = process.is64Bit(); + ``` + + +## process.getUidForName8+ + +getUidForName(v:string): number + +通过进程名获取进程uid。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | v | string | 是 | 进程名。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回进程uid。| + +- 示例: + ``` + var pres = process.getUidForName("tool") + ``` + + +## process.getThreadPriority8+ + +getThreadPriority(v:number): number + +根据指定的tid获取线程优先级。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | v | number | 是 | 指定的线程tid。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回线程的优先级。 | + +- 示例: + ``` + var tid = process.getTid(); + var pres = process.getThreadPriority(tid); + ``` + + +## process.getStartRealtime8+ + +getStartRealtime() :number + +获取从系统启动到进程启动所经过的实时时间(以毫秒为单位)。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回经过的实时时间。| + +- 示例: + ``` + var realtime = process.getStartRealtime(); + ``` + + +## process.getAvailableCores8+ + +getAvailableCores() :number[] + +获取多核设备上当前进程可用的CPU内核。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number[] | 返回可用内核数。 | + +- 示例: + ``` + var result = getAvailableCores(); + ``` + + +## process.getPastCputime8+ + +getPastCputime() :number + +获取进程启动到当前时间的CPU时间(以毫秒为单位)。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回经过的CPU时间。 | + +- 示例: + ``` + var result = process.getPastCputime() ; + ``` + + +## process.getSystemConfig8+ + +getSystemConfig(name:number): number + +获取系统配置信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | number | 是 | 指定系统配置参数名。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回系统配置信息。 | + +- 示例: + ``` + var _SC_ARG_MAX = 0 + var pres = process.getSystemConfig(_SC_ARG_MAX) + ``` + + +## process.getEnvironmentVar8+ + +getEnvironmentVar(name:string): string + +用该方法获取环境变量对应的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | string | 是 | 环境变量名。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回环境变量名对应的value。 | + +- 示例: + ``` + var pres = process.getEnvironmentVar("PATH") + ``` + + ## process.runCmd runCmd(command: string, options?: { timeout : number, killSignal :number | string, maxBuffer : number }) : ChildProcess @@ -183,12 +371,11 @@ runCmd(command: string, options?: { timeout : number, killSignal :number | str - 示例: ``` - import process from '@ohos.process'; var child = process.runCmd('ls', { maxBuffer : 2 }); var result = child.wait(); child.getOutput.then(val=>{ console.log("child.getOutput = " + val); - } + }) ``` @@ -200,7 +387,6 @@ abort(): void - 示例: ``` - import process from '@ohos.process'; process.abort(); ``` @@ -225,7 +411,6 @@ on(type: string, listener: EventListener): void - 示例: ``` - import process from '@ohos.process'; process.on("data", (e)=>{ console.log("data callback"); }) @@ -250,7 +435,6 @@ off(type: string): boolean - 示例: ``` - import process from '@ohos.process'; process.on("data", (e)=>{ console.log("data callback"); }) @@ -271,7 +455,6 @@ exit(code: number): void - 示例: ``` - import process from '@ohos.process'; process.exit(0); ``` @@ -284,7 +467,6 @@ cwd(): string - 示例: ``` - import process from '@ohos.process'; var path = process.cwd(); ``` @@ -302,7 +484,6 @@ chdir(dir: string): void - 示例: ``` - import process from '@ohos.process'; process.chdir('/system'); ``` @@ -320,7 +501,6 @@ uptime(): number - 示例: ``` - import process from '@ohos.process'; var time = process.uptime(); ``` @@ -344,7 +524,6 @@ kill(pid: number,signal: number ): boolean - 示例: ``` - import process from '@ohos.process' var pres = process.pid var result = that.kill(pres, 28) ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" index 67b5815efa67a03b3b1acaaf7d6fd146d96c3e27..1292da1bd62add3dd6abfa386e95d1d7508a1e75 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/02.URL\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" @@ -1,6 +1,6 @@ --- title: URL字符串解析 -permalink: /pages/000b000901 +permalink: /pages/010c010c02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # URL字符串解析 @@ -24,11 +24,6 @@ import Url from '@ohos.url' ``` -## 权限 - -无 - - ## URLSearchParams @@ -430,5 +425,5 @@ toJSON(): string - 示例: ``` const url = new URL('http://username:password@host:8080/directory/file?query=pppppp#qwer=da'); - url.toString() + url.toJSON() ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.URI\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.URI\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..9c8208b6576e2c39d12533eee984557eecc04454 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.URI\345\255\227\347\254\246\344\270\262\350\247\243\346\236\220.md" @@ -0,0 +1,140 @@ +--- +title: URI字符串解析 +permalink: /pages/010c010c03 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# URI字符串解析 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import uri from '@ohos.uri' +``` + +## URI + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| scheme | string | 是 | 否 | 获取URI 的协议部分。 | +| userinfo | string | 是 | 否 | 获取 URI 的用户信息部分。 | +| host | string | 是 | 否 | 获取 URI 的主机名部分(不带端口)。 | +| port | string | 是 | 否 | 获取 URI 的端口部分。 | +| path | string | 是 | 否 | 获取 URI 的路径部分。 | +| query | string | 是 | 否 | 获取 URI 的查询部分。 | +| fragment | string | 是 | 否 | 获取 URI 的片段部分 | +| authority | string | 是 | 否 | 获取此URI的解码权限组件部分。 | +| ssp | string | 是 | 否 | 获取URI的解码方案特定部分。 | + + +### constructor + +constructor(uri: string) + +constructor是URI的构造函数。 + +- 参数: + | 参数名 | 类型 | 可读 | 可写 | 说明 | + | -------- | -------- | -------- | -------- | -------- | + | url | string | 是 | 是 | 入参对象。 | + +- 示例: + ``` + var mm = 'http://username:password@host:8080/directory/file?foo=1&bar=2#fragment'; + new uri.URI(mm); // Output 'http://username:password@host:8080/directory/file?foo=1&bar=2#fragment'; + ``` + ``` + new uri.URI('http://username:password@host:8080'); // Output 'http://username:password@host:8080'; + ``` + + +### toString + +toString(): string + +返回适用于URL中的查询字符串。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回网址的字符串序列化。 | + +- 示例: + ``` + const url = new uri.URL('http://username:password@host:8080/directory/file?query=pppppp#qwer=da'); + url.toString() + ``` + + +### equals + +equals(other: URI): boolean + +判断此URI是否与其他URI对象相等。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | other | [URI](#uri) | 是 | 需要比较的URI对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示相等,否则返回false。 | + +- 示例: + ``` + const uriInstance = new uri.URI('http://username:password@host:8080/directory/file?query=pppppp#qwer=da'); + const uriInstance1 = new uri.URI('http://username:password@host:8080/directory/file?query=pppppp#qwer=da#fragment'); + uriInstance.equals(uriInstance1); + ``` + +### checkIsAbsolute + +checkIsAbsolute(): boolean + +判断此URI是否为绝对URI(是否定义了scheme组件)。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true表示该URI是否为绝对URI。 | + +- 示例: + ``` + const uriInstance = new uri.URI('http://username:password@www.qwer.com:8080?query=pppppp'); + uriInstance.checkIsAbsolute(); + ``` + + +### normalize + +normalize(): URI + +规范化此URI的路径。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | URI | 返回一个path被规范化后的URI对象。 | + +- 示例: + ``` + const uriInstance = new uri.URI('http://username:password@www.qwer.com:8080/path/path1/../path2/./path3?query=pppppp'); + let uriInstance1 = uriInstance.normalize(); + uriInstance1.path; + ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.util\345\267\245\345\205\267\345\207\275\346\225\260.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.util\345\267\245\345\205\267\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..9999ba5ac4a677320884e3f32bd1e314741a1306 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.util\345\267\245\345\205\267\345\207\275\346\225\260.md" @@ -0,0 +1,2336 @@ +--- +title: util工具函数 +permalink: /pages/010c010c04 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# util工具函数 + + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +该模块主要提供常用的工具函数,实现字符串编解码(TextEncoder,TextDecoder)、有理数运算(RationalNumber)、缓冲区管理(LruBuffer)、范围判断(Scope)、Base64编解码(Base64)、内置对象类型检查(Types)等功能。 + + +## 导入模块 + +``` +import util from '@ohos.util'; +``` + + +## util.printf + +printf(format: string, ...args: Object[]): string + +通过式样化字符串对输入的内容按特定格式输出。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | format | string | 是 | 式样化字符串。 | + | ...args | Object[] | 否 | 待式样化数据。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 按特定格式式样化后的字符串。 | + +- 示例: + ``` + var res = util.printf("%s", "hello world!"); + console.log(res); + ``` + + +## util.getErrorString + +getErrorString(errno: number): string + +获取系统错误码对应的详细信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | errno | number | 是 | 系统发生错误产生的错误码。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 错误码对应的详细信息。 | + +- 示例: + ``` + var errnum = 10; // 10:a system error number + var result = util.getErrorString(errnum); + console.log("result = " + result); + ``` + + +## util.callbackWrapper + +callbackWrapper(original: Function): (err: Object, value: Object )=>void + +对异步函数进行回调化处理,回调中第一个参数将是拒绝原因(如果 Promise 已解决,则为 null),第二个参数将是已解决的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | original | Function | 是 | 异步函数。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Function | 返回一个第一个参数是拒绝原因(如果 Promise 已解决,则为 null),第二个参数是已解决的回调函数。 | + +- 示例: + ``` + async function promiseFn() { + return Promise.reject('value'); + } + var cb = util.callbackWrapper(promiseFn); + cb((err, ret) => { + expect(err).strictEqual('value'); + expect(ret).strictEqual(undefined); + }) + ``` + + +## util.promiseWrapper + +promiseWrapper(original: (err: Object, value: Object) => void): Object + +对异步函数处理并返回一个promise的版本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | original | Function | 是 | 异步函数。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Function | 采用遵循常见的错误优先的回调风格的函数(也就是将 (err, value) => ... 回调作为最后一个参数),并返回一个返回 promise 的版本。 | + +- 示例: + ``` + function aysnFun(str1, str2, callback) { + if (typeof str1 === 'string' && typeof str2 === 'string') { + callback(null, str1 + str2); + } else { + callback('type err'); + } + } + let newPromiseObj = util.promiseWrapper(aysnFun)("Hello", 'World'); + newPromiseObj.then(res => { + expect(res).strictEqual('HelloWorld'); + }) + ``` + + +## TextDecoder + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| encoding | string | 是 | 否 | 编码格式。
- 支持格式:utf-8、ibm866、iso-8859-2、iso-8859-3、iso-8859-4、iso-8859-5、iso-8859-6、iso-8859-7、iso-8859-8、iso-8859-8-i、iso-8859-10、iso-8859-13、iso-8859-14、iso-8859-15、koi8-r、koi8-u、macintosh、windows-874、windows-1250、windows-1251、windows-1252、windows-1253、windows-1254、windows-1255、windows-1256、windows-1257、windows-1258、x-mac-cyrilli、gbk、gb18030、big5、euc-jp、iso-2022-jp、shift_jis、euc-kr、utf-16be、utf-16le。 | +| fatal | boolean | 是 | 否 | 是否显示致命错误。 | +| ignoreBOM | boolean | 是 | 否 | 是否忽略BOM(byte order marker)标记,默认值为false ,表示解码结果包含BOM标记。 | + + +### constructor + +constructor(encoding?:string, options?:{ fatal?:boolean;ignoreBOM?:boolean }) + +TextDecoder的构造函数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | encoding | string | 否 | 编码格式。 | + | options | Object | 否 | 编码相关选项参数,存在两个属性fatal和ignoreBOM。 | + + **表1** options + + | 名称 | 参数类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fatal | boolean | 否 | 是否显示致命错误。 | + | ignoreBOM | boolean | 否 | 是否忽略BOM标记。 | + +- 示例: + ``` + var textDecoder = new util.TextDecoder("utf-8",{ignoreBOM:true}); + ``` + + +### decode + +decode(input: Unit8Array, options?:{stream?:false}):string + +通过输入参数解码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | input | Unit8Array | 是 | 符合格式需要解码的数组。 | + | options | Object | 否 | 解码相关选项参数。 | + + **表2** options + + | 名称 | 参数类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | stream | boolean | 否 | 在随后的decode()调用中是否跟随附加数据块。如果以块的形式处理数据,则设置为true;如果处理最后的数据块或数据未分块,则设置为false。默认为false。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 解码后的数据。 | + +- 示例: + ``` + var textDecoder = new util.TextDecoder("utf-8",{ignoreBOM:true}); + var result = new Uint8Array(6); + result[0] = 0xEF; + result[1] = 0xBB; + result[2] = 0xBF; + result[3] = 0x61; + result[4] = 0x62; + result[5] = 0x63; + console.log("input num:"); + for(var j= 0; j < 6; j++) { + console.log(result[j]); + } + var retStr = textDecoder.decode( result , {stream:false}); + console.log("retStr = " + retStr); + ``` + + +## TextEncoder + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| encoding | string | 是 | 否 | 编码格式,默认值是utf-8。 | + + +### constructor + +constructor() + +TextEncoder的构造函数。 + +- 示例: + ``` + var textEncoder = new util.TextEncoder(); + ``` + + +### encode + +encode(input?:string):Uint8Array + +通过输入参数编码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | input | string | 是 | 需要编码的字符串。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Uint8Array | 返回编码后的文本。 | + +- 示例: + ``` + var textEncoder = new util.TextEncoder(); + var result = new Uint8Array(buffer); + result = textEncoder.encode("\uD800¥¥"); + ``` + + +### encodeInto + +encodeInto(input:string, dest:Uint8Array, ):{ read:number; written:number } + +放置生成的UTF-8编码文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | input | string | 是 | 需要编码的字符串。 | + | dest | Uint8Array | 是 | Uint8Array对象实例,用于将生成的UTF-8编码文本放入其中。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Uint8Array | 返回编码后的文本。 | + +- 示例: + ``` + var that = new util.TextEncoder(); + var buffer = new ArrayBuffer(4); + this.dest = new Uint8Array(buffer); + var result = that.encodeInto("abcd", this.dest); + ``` + +## RationalNumber8+ + + +### constructor8+ + +constructor(numerator:number,denominator:number) + +RationalNumber的构造函数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | numerator | number | 是 | 分子,整数类型。 | + | denominator | number | 是 | 分母,整数类型。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + ``` + + +### createRationalFromString8+ + +static createRationalFromString​(rationalString:string):RationalNumber​ + +基于给定的字符串创建一个RationalNumber对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | rationalString | string | 是 | 字符串格式。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | object | 返回有理数类的对象。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var rational = rationalNumer.creatRationalFromString("3/4"); + ``` + + +### compareTo8+ + +compareTo​(another:RationalNumber):number​ + +将当前的RationalNumber对象与给定的对象进行比较。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | another | RationalNumber | 是 | 其他的有理数对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 如果两个对象相等,则返回0;如果给定对象小于当前对象,则返回1;如果给定对象大于当前对象,则返回-1。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var rational = rationalNumer.creatRationalFromString("3/4"); + var result = rationalNumber.compareTo(rational); + ``` + + +### valueOf8+ + +valueOf():number + +以整数形式或者浮点数的形式获取当前RationalNumber对象的值。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回整数或者浮点数的值。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.valueOf(); + ``` + + +### equals8+ + +equals​(obj:Object):boolean + +将当前的RationalNumber对象与给定的对象进行比较是否相等。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | object | Object | 是 | 其他类型对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果给定对象与当前对象相同,则返回true;否则返回false。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var rational = rationalNumer.creatRationalFromString("3/4"); + var result = rationalNumber.equals(rational); + ``` + + +### getCommonDivisor8+ + +static getCommonDivisor​(number1:number,number2:number):number + +获取两个指定整数的最大公约数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | number1 | number | 是 | 整数类型。 | + | number2 | number | 是 | 整数类型。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回两个给定数字的最大公约数。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.getCommonDivisor(4,6); + ``` + + +### getNumerator8+ + +getNumerator​():number + +获取当前RationalNumber对象的分子。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回RationalNumber对象的分子的值。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.getNumerator(); + ``` + + +### getDenominator8+ + +getDenominator​():number + +获取当前RationalNumber对象的分母。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回RationalNumber对象的分母的值。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.getDenominator(); + ``` + + +### isZero8+ + +isZero​():boolean + +检查当前RationalNumber对象是否为0。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果当前对象表示的值为0,则返回true;否则返回false。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.isZero(); + ``` + + +### isNaN8+ + +isNaN​():boolean + +检查当前RationalNumber对象是否表示非数字(NaN)值。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果分母和分子都为0,则返回true;否则返回false。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.isNaN(); + ``` + + +### isFinite8+ + +isFinite​():boolean + +检查当前RationalNumber对象是否表示一个有限值。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果分母不为0,则返回true;否则返回false。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.isFinite(); + ``` + + +### toString8+ + +toString​():string + +获取当前RationalNumber对象的字符串表示形式。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回Numerator/Denominator格式的字符串,例如3/5,如果当前对象的分子和分母都为0,则返回NaN。 | + +- 示例: + ``` + var rationalNumber = new util.RationalNumber(1,2); + var result = rationalNumber.toString(); + ``` + +## LruBuffer8+ + + +### 属性 + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | 当前缓冲区中值的总数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.put(1,8); + var result = pro.length; + ``` + + +### constructor8+ + +constructor(capacity?:number) + +默认构造函数用于创建一个新的LruBuffer实例,默认容量为64。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | capacity | number | 否 | 指示要为缓冲区自定义的容量。 | + +- 示例: + ``` + var lrubuffer= new util.LruBuffer(); + ``` + + +### updateCapacity8+ + +updateCapacity(newCapacity:number):void + +将缓冲区容量更新为指定容量,如果newCapacity小于或等于0,则抛出异常。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | newCapacity | number | 是 | 指示要为缓冲区自定义的容量。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + var result = pro.updateCapacity(100); + ``` + + +### toString8+ + +toString():string + +返回对象的字符串表示形式。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回对象的字符串表示形式。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.get(2); + pro.remove(20); + var result = pro.toString(); + ``` + + +### getCapacity8+ + +getCapacity():number + +获取当前缓冲区的容量。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回当前缓冲区的容量。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + var result = pro.getCapacity(); + ``` + + +### clear8+ + +clear():void + +从当前缓冲区清除键值对。后续会调用afterRemoval()方法执行后续操作。 + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.size(); + pro.clear(); + ``` + + +### getCreateCount8+ + +getCreateCount():number + +获取createDefault()返回值的次数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回createDefault()返回值的次数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(1,8); + var result = pro.getCreateCount(); + ``` + + +### getMissCount8+ + +getMissCount():number + +获取查询值不匹配的次数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回查询值不匹配的次数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.get(2); + var result = pro.getMissCount(); + ``` + + +### getRemovalCount8+ + +getRemovalCount():number + +获取从缓冲区中逐出值的次数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回从缓冲区中驱逐的次数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.updateCapacity(2); + pro.put(50,22); + var result = pro.getRemovalCount(); + ``` + + +### getMatchCount8+ + +getMatchCount():number + +获取查询值匹配成功的次数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回查询值匹配成功的次数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.get(2); + var result = pro.getMatchCount(); + ``` + + +### getPutCount8+ + +getPutCount():number + +获取将值添加到缓冲区的次数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回将值添加到缓冲区的次数。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.getPutCount(); + ``` + + +### isEmpty8+ + +isEmpty():boolean + +检查当前缓冲区是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果当前缓冲区不包含任何值,则返回true。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.isEmpty(); + ``` + + +### get8+ + +get(key:K):V | undefined + +表示要查询的键。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 要查询的键。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V \| undefind | 如果指定的键存在于缓冲区中,则返回与键关联的值;否则返回undefined。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.get(2); + ``` + + +### put8+ + +put(key:K,value:V):V + +将键值对添加到缓冲区。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 要添加的密钥。 | + | value | V | 是 | 指示与要添加的键关联的值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回与添加的键关联的值;如果要添加的键已经存在,则返回原始值,如果键或值为空,则抛出此异常。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + var result = pro.put(2,10); + ``` + + +### values8+ + +values():V[] + +获取当前缓冲区中所有值从最近访问到最近最少访问的顺序列表 。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V [] | 按从最近访问到最近最少访问的顺序返回当前缓冲区中所有值的列表。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + pro.put(2,"anhu"); + pro.put("afaf","grfb"); + var result = pro.values(); + ``` + + +### keys8+ + +keys():K[] + +获取当前缓冲区中所有键从最近访问到最近最少访问的升序列表。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K [] | 按升序返回当前缓冲区中所有键的列表,从最近访问到最近最少访问。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.keys(); + ``` + + +### remove8+ + +remove(key:K):V | undefined + +从当前缓冲区中删除指定的键及其关联的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 要删除的密钥。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V \| undefind | 返回一个包含已删除键值对的Optional对象;如果key不存在,则返回一个空的Optional对象,如果key为null,则抛出异常。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.remove(20); + ``` + + +### afterRemoval8+ + +afterRemoval(isEvict:boolean,key:K,value:V,newValue:V):void + +删除值后执行后续操作。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | isEvict | boolean | 否 | 因容量不足而调用该方法时,参数值为true,其他情况为false。 | + | key | K | 是 | 表示删除的键。 | + | value | V | 是 | 表示删除的值。 | + | newValue | V | 否 | 如果已调用put方法并且要添加的键已经存在,则参数值是关联的新值。其他情况下参数值为空。 | + +- 示例: + ``` + var arr = []; + class ChildLruBuffer extends util.LruBuffer + { + constructor() + { + super(); + } + static getInstance() + { + if(this.instance == null) + { + this.instance = new ChildLruBuffer(); + } + return this.instance; + } + afterRemoval(isEvict, key, value, newValue) + { + if (isEvict === false) + { + arr = [key, value, newValue]; + } + } + } + ChildLruBuffer.getInstance().afterRemoval(false,10,30,null); + ``` + + +### contains8+ + +contains(key:K):boolean + +检查当前缓冲区是否包含指定的键。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 表示要检查的键。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果缓冲区包含指定的键,则返回 true。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.contains(20); + ``` + + +### createDefault8+ + +createDefault(key:K):V + +如果未计算特定键的值,则执行后续操作,参数表示丢失的键,返回与键关联的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 表示丢失的键。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回与键关联的值。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + var result = pro.createDefault(50); + ``` + + +### entries8+ + +entries():IterableIterator<[K,V]> + +允许迭代包含在这个对象中的所有键值对。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [K, V] | 返回一个可迭代数组。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro.entries(); + ``` + + +### [Symbol.iterator]8+ + +[Symbol.iterator]\(): IterableIterator<[K, V]> + +返回一个键值对形式的二维数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [K, V] | 返回一个键值对形式的二维数组。 | + +- 示例: + ``` + var pro = new util.LruBuffer(); + pro.put(2,10); + var result = pro[symbol.iterator](); + ``` + + +## Scope8+ + + +### ScopeType8+ + +用于表示范围中的值的类型。该类型的值,类型可以为ScopeComparable或number。 + +ScopeComparable类型的值需要实现compareTo方法,确保传入的数据具有可比性。 +``` +interface ScopeComparable{ + compareTo(other:ScopeComparable):boolean; +} +type ScopeType = ScopeComparable | number; +``` + + +构造新类,实现compareTo方法。后续示例代码中,均通过Temperature,获取[ScopeType](#scopetype8)的实例化对象。 + + +示例: +``` +class Temperature{ + constructor(value){ + this._temp = value; + } + comapreTo(value){ + return this._temp >= value.getTemp(); + } + getTemp(){ + return this._temp; + } + toString(){ + return this._temp.toString(); + } +} +``` + + +### constructor8+ + +constructor(lowerObj:ScopeType,upperObje:ScopeType) + +用于创建指定下限和上限的作用域实例的构造函数,返回一个Scope对象。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | lowerObj | [ScopeType](#scopetype8) | 是 | 指定作用域实例的下限。 | + | upperObj | [ScopeType](#scopetype8) | 是 | 指定作用域实例的上限。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + ``` + + +### toString8+ + +toString():string + +该字符串化方法返回一个包含当前范围的字符串表示形式。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回包含当前范围对象的字符串表示形式。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + var result = range.toString(); + ``` + + +### intersect8+ + +intersect(range:Scope):Scope + +获取给定范围和当前范围的交集。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | range | [Scope](#scope8) | 是 | 传入一个给定范围。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Scope](#scope8) | 返回给定范围和当前范围的交集。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + var tempMiDF = new Temperature(35); + var tempMidS = new Temperature(39); + var rangeFir = new util.Scope(tempMiDF, tempMidS); + range.intersect(rangeFir ); + ``` + + +### intersect8+ + +intersect(lowerObj:ScopeType,upperObj:ScopeType):Scope + +获取当前范围与给定下限和上限范围的交集。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | lowerObj | [ScopeType](#scopetype8) | 是 | 给定范围的下限。 | + | upperObj | [ScopeType](#scopetype8) | 是 | 给定范围的上限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Scope](#scope8) | 返回当前范围与给定下限和上限范围的交集。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var tempMidS = new Temperature(39); + var range = new util.Scope(tempLower, tempUpper); + var result = range.intersect(tempMiDF, tempMidS); + ``` + + +### getUpper8+ + +getUpper():ScopeType + +获取当前范围的上限。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [ScopeType](#scopetype8) | 返回当前范围的上限值。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + var result = range.getUpper(); + ``` + + +### getLower8+ + +getLower():ScopeType + +获取当前范围的下限。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [ScopeType](#scopetype8) | 返回当前范围的下限值。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + var result = range.getLower(); + ``` + + +### expand8+ + +expand(lowerObj:ScopeType,upperObj:ScopeType):Scope + +创建并返回包括当前范围和给定下限和上限的并集。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | lowerObj | [ScopeType](#scopetype8) | 是 | 给定范围的下限。 | + | upperObj | [ScopeType](#scopetype8) | 是 | 给定范围的上限。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Scope](#scope8) | 返回当前范围和给定下限和上限的并集。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var tempMidS = new Temperature(39); + var range = new util.Scope(tempLower, tempUpper); + var result = range.expand(tempMiDF, tempMidS); + ``` + + +### expand8+ + +expand(range:Scope):Scope + +创建并返回包括当前范围和给定范围的并集。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | range | [Scope](#scope8) | 是 | 传入一个给定范围。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Scope](#scope8) | 返回包括当前范围和给定范围的并集。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var tempMidS = new Temperature(39); + var range = new util.Scope(tempLower, tempUpper); + var rangeFir = new util.Scope(tempMiDF, tempMidS); + var result = range.expand(rangeFir); + ``` + + +### expand8+ + +expand(value:ScopeType):Scope + +创建并返回包括当前范围和给定值的并集。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | [ScopeType](#scopetype8) | 是 | 传入一个给定值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [Scope](#scope8) | 返回包括当前范围和给定值的并集。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var range = new util.Scope(tempLower, tempUpper); + var result = range.expand(tempMiDF); + ``` + + +### contains8+ + +contains(value:ScopeType):boolean + +检查给定value是否包含在当前范围内。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | [ScopeType](#scopetype8) | 是 | 传入一个给定值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果给定值包含在当前范围内返回true,否则返回false。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var range = new util.Scope(tempLower, tempUpper); + range.contains(tempMiDF); + ``` + + +### contains8+ + +contains(range:Scope):boolean + +检查给定range是否在当前范围内。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | range | [Scope](#scope8) | 是 | 传入一个给定范围。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 如果给定范围包含在当前范围内返回true,否则返回false。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var range = new util.Scope(tempLower, tempUpper); + var tempLess = new Temperature(20); + var tempMore = new Temperature(45); + var rangeSec = new util.Scope(tempLess, tempMore); + var result = range.contains(rangeSec); + ``` + + +### clamp8+ + +clamp(value:ScopeType):ScopeType + +将给定值限定到当前范围内。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | [ScopeType](#scopetype8) | 是 | 传入的给定值。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [ScopeType](#scopetype8) | 如果传入的value小于下限,则返回lowerObj;如果大于上限值则返回upperObj;如果在当前范围内,则返回value。 | + +- 示例: + ``` + var tempLower = new Temperature(30); + var tempUpper = new Temperature(40); + var tempMiDF = new Temperature(35); + var range = new util.Scope(tempLower, tempUpper); + var result = range.clamp(tempMiDF); + ``` + + +## Base648+ + + +### constructor8+ + +constructor() + +Base64的构造函数。 + +- 示例: + ``` + var base64 = new util.Base64(); + ``` + + +### encodeSync8+ + +encodeSync(src:Uint8Array):Uint8Array + +通过输入参数编码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array | 是 | 编码输入Uint8数组。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Uint8Array | 返回编码后新分配的Uint8数组。 | + +- 示例: + ``` + var that = new util.Base64(); + var array = new Uint8Array([115,49,51]); + var result = that.encodeSync(array); + ``` + + +### encodeToStringSync8+ + +encodeToStringSync(src:Uint8Array):string + +通过输入参数编码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array | 是 | 编码输入Uint8数组。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回编码后的字符串。 | + +- 示例: + ``` + var that = new util.Base64(); + var array = new Uint8Array([115,49,51]); + var result = that.encodeToStringSync(array); + ``` + + +### decodeSync8+ + +decodeSync(src:Uint8Array | string):Uint8Array + +通过输入参数解码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array \| string | 是 | 解码输入Uint8数组或者字符串。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Uint8Array | 返回解码后新分配的Uint8数组。 | + +- 示例: + ``` + var that = new util.Base64(); + var buff = 'czEz'; + var result = that.decodeSync(buff); + ``` + + +### encode8+ + +encode(src:Uint8Array):Promise<Uint8Array> + +通过输入参数异步编码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array | 是 | 异步编码输入Uint8数组。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<Uint8Array> | 返回异步编码后新分配的Uint8数组。 | + +- 示例: + ``` + var that = new util.Base64(); + var array = new Uint8Array([115,49,51]); + var rarray = new Uint8Array([99,122,69,122]); + that.encode(array).then(val=>{ + for (var i = 0; i < rarray.length; i++) { + expect(val[i]).assertEqual(rarray[i]) + } + }) + ``` + + +### encodeToString8+ + +encodeToString(src:Uint8Array):Promise<string> + +通过输入参数异步编码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array | 是 | 异步编码输入Uint8数组。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<string> | 返回异步编码后的字符串。 | + +- 示例: + ``` + var that = new util.Base64(); + var array = new Uint8Array([115,49,51]); + that.encodeToString(array).then(val=>{ + expect(val).assertEqual('czEz') + }) + ``` + + +### decode8+ + +decode(src:Uint8Array | string):Promise<Uint8Array> + +通过输入参数异步解码后输出对应文本。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | src | Uint8Array \| string | 是 | 异步解码输入Uint8数组或者字符串。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<Uint8Array> | 返回异步解码后新分配的Uint8数组。 | + +- 示例: + ``` + var that = new util.Base64(); + var array = new Uint8Array([99,122,69,122]); + var rarray = new Uint8Array([115,49,51]); + that.decode(array).then(val=>{ + for (var i = 0; i < rarray.length; i++) { + expect(val[i]).assertEqual(rarray[i]) + } + }) + ``` + + +## Types8+ + + +### constructor8+ + +constructor() + +Types的构造函数。 + +- 示例: + ``` + var type = new util.Types(); + ``` + + +### isAnyArrayBuffer8+ + +isAnyArrayBuffer(value: Object):boolean + +检查输入的value是否是ArrayBuffer类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是ArrayBuffer类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isAnyArrayBuffer(new ArrayBuffer([])); + ``` + + +### isArrayBufferView8+ + +isArrayBufferView(value: Object):boolean + +检查输入的value是否是内置ArrayBufferView辅助类型。 + +ArrayBufferView辅助类型包括:Int8Array、Int16Array、Int32Array、Uint8Array、Uint8ClampedArray、Uint32Array、Float32Array、Float64Array、DataView。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的ArrayBufferView辅助类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isArrayBufferView(new Int8Array([])); + ``` + + +### isArgumentsObject8+ + +isArgumentsObject(value: Object):boolean + +检查输入的value是否是一个arguments对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的arguments类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + function foo() { + var result = that.isArgumentsObject(arguments); + } + var f = foo(); + ``` + + +### isArrayBuffer8+ + +isArrayBuffer(value: Object):boolean + +检查输入的value是否是ArrayBuffer类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的ArrayBuffer类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isArrayBuffer(new ArrayBuffer([])); + ``` + + +### isAsyncFunction8+ + +isAsyncFunction(value: Object):boolean + +检查输入的value是否是一个异步函数类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的异步函数类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isAsyncFunction(async function foo() {}); + ``` + + +### isBooleanObject8+ + +isBooleanObject(value: Object):boolean + +检查输入的value是否是一个Boolean对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Boolean对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isBooleanObject(new Boolean(true)); + ``` + + +### isBoxedPrimitive8+ + +isBoxedPrimitive(value: Object):boolean + +检查输入的value是否是Boolean或Number或String或Symbol对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Boolean或Number或String或Symbol对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isBoxedPrimitive(new Boolean(false)); + ``` + + +### isDataView8+ + +isDataView(value: Object):boolean + +检查输入的value是否是DataView类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的DataView对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const ab = new ArrayBuffer(20); + var result = that.isDataView(new DataView(ab)); + ``` + + +### isDate8+ + +isDate(value: Object):boolean + +检查输入的value是否是Date类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Date对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isDate(new Date()); + ``` + + +### isExternal8+ + +isExternal(value: Object):boolean + +检查输入的value是否是native External类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含native External类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const data = util.createExternalType(); + var result = that.isExternal(data); + ``` + + +### isFloat32Array8+ + +isFloat32Array(value: Object):boolean + +检查输入的value是否是Float32Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Float32Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isFloat32Array(new Float32Array()); + ``` + + +### isFloat64Array8+ + +isFloat64Array(value: Object):boolean + +检查输入的value是否是Float64Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Float64Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isFloat64Array(new Float64Array()); + ``` + + +### isGeneratorFunction8+ + +isGeneratorFunction(value: Object):boolean + +检查输入的value是否是generator函数类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的generator函数类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isGeneratorFunction(function* foo() {}); + ``` + + +### isGeneratorObject8+ + +isGeneratorObject(value: Object):boolean + +检查输入的value是否是generator对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的generator对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + function* foo() {} + const generator = foo(); + var result = that.isGeneratorObject(generator); + ``` + + +### isInt8Array8+ + +isInt8Array(value: Object):boolean + +检查输入的value是否是Int8Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Int8Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isInt8Array(new Int8Array([])); + ``` + + +### isInt16Array8+ + +isInt16Array(value: Object):boolean + +检查输入的value是否是Int16Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Int16Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isInt16Array(new Int16Array([])); + ``` + + +### isInt32Array8+ + +isInt32Array(value: Object):boolean + +检查输入的value是否是Int32Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Int32Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isInt32Array(new Int32Array([])); + ``` + + +### isMap8+ + +isMap(value: Object):boolean + +检查输入的value是否是Map类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Map类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isMap(new Map()); + ``` + + +### isMapIterator8+ + +isMapIterator(value: Object):boolean + +检查输入的value是否是Map的Iterator类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Map的Iterator类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const map = new Map(); + var result = that.isMapIterator(map.keys()); + ``` + + +### isNativeError8+ + +isNativeError(value: Object):boolean + +检查输入的value是否是Error类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Error类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isNativeError(new TypeError()); + ``` + + +### isNumberObject8+ + +isNumberObject(value: Object):boolean + +检查输入的value是否是Number对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Number对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isNumberObject(new Number(0)); + ``` + + +### isPromise8+ + +isPromise(value: Object):boolean + +检查输入的value是否是Promise类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Promise类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isPromise(Promise.resolve(1)); + ``` + + +### isProxy8+ + +isProxy(value: Object):boolean + +检查输入的value是否是Proxy类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Proxy类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const target = {}; + const proxy = new Proxy(target, {}); + var result = that.isProxy(proxy); + ``` + + +### isRegExp8+ + +isRegExp(value: Object):boolean + +检查输入的value是否是RegExp类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的RegExp类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isRegExp(new RegExp('abc')); + ``` + + +### isSet8+ + +isSet(value: Object):boolean + +检查输入的value是否是Set类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Set类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isSet(new Set()); + ``` + + +### isSetIterator8+ + +isSetIterator(value: Object):boolean + +检查输入的value是否是Set的Iterator类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Set的Iterator类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const set = new Set(); + var result = that.isSetIterator(set.keys()); + ``` + + +### isStringObject8+ + +isStringObject(value: Object):boolean + +检查输入的value是否是String对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的String对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isStringObject(new String('foo')); + ``` + + +### isSymbolObjec8+ + +isSymbolObjec(value: Object):boolean + +检查输入的value是否是Symbol对象类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Symbol对象类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + const symbols = Symbol('foo'); + var result = that.isSymbolObject(Object(symbols)); + ``` + + +### isTypedArray8+ + +isTypedArray(value: Object):boolean + +检查输入的value是否是TypedArray类型的辅助类型。 + +TypedArray类型的辅助类型,包括Int8Array、Int16Array、Int32Array、Uint8Array、Uint8ClampedArray、Uint16Array、Uint32Array、Float32Array、Float64Array、DataView。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的TypedArray包含的类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isTypedArray(new Float64Array([])); + ``` + + +### isUint8Array8+ + +isUint8Array(value: Object):boolean + +检查输入的value是否是Uint8Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Uint8Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isUint8Array(new Uint8Array([])); + ``` + + +### isUint8ClampedArray8+ + +isUint8ClampedArray(value: Object):boolean + +检查输入的value是否是Uint8ClampedArray数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Uint8ClampedArray数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isUint8ClampedArray(new Uint8ClampedArray([])); + ``` + + +### isUint16Array8+ + +isUint16Array(value: Object):boolean + +检查输入的value是否是Uint16Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Uint16Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isUint16Array(new Uint16Array([])); + ``` + + +### isUint32Array8+ + +isUint32Array(value: Object):boolean + +检查输入的value是否是Uint32Array数组类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的Uint32Array数组类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isUint32Array(new Uint32Array([])); + ``` + + +### isWeakMap8+ + +isWeakMap(value: Object):boolean + +检查输入的value是否是WeakMap类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的WeakMap类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isWeakMap(new WeakMap()); + ``` + + +### isWeakSet8+ + +isWeakSet(value: Object):boolean + +检查输入的value是否是WeakSet类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | Object | 是 | 待检测对象。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断的结果,如果是内置包含的WeakSet类型为true,反之为false。 | + +- 示例: + ``` + var that = new util.Types(); + var result = that.isWeakSet(new WeakSet()); + ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/05.xml\350\247\243\346\236\220\344\270\216\347\224\237\346\210\220.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/05.xml\350\247\243\346\236\220\344\270\216\347\224\237\346\210\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..9811cd57e37a461e4b1c7738651d388fd05481f1 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/05.xml\350\247\243\346\236\220\344\270\216\347\224\237\346\210\220.md" @@ -0,0 +1,468 @@ +--- +title: xml解析与生成 +permalink: /pages/010c010c05 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# xml解析与生成 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import xml from '@ohos.xml'; +``` + + +## XmlSerializer + + +### constructor + +constructor(buffer: ArrayBuffer | DataView, encoding?: string) + +XmlSerializer的构造函数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer \| DataView | 是 | 用于接收写入xml信息的ArrayBuffer或DataView内存。 | + | encoding | string | 否 | 编码格式。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var bufView = new DataView(arrayBuffer); + var thatSer = new xml.XmlSerializer(bufView); + ``` + + +### setAttributes + +setAttributes(name: string, value: string):void + +设置Attributes方法。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | string | 是 | 属性的key值。 | + | value | string | 是 | 属性的value值。 | + +- 示例: + ``` + var thatSer = new xml.XmlSerializer(bufView); + thatSer.setAttributes("importance", "high"); + ``` + + +### addEmptyElement + +addEmptyElement(name: string): void + +写入一个空元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | string | 是 | 该空元素的元素名。 | + +- 示例: + ``` + var thatSer = new xml.XmlSerializer(bufView); + thatSer.addEmptyElement("b"); // => + ``` + + +### setDeclaration + +setDeclaration(): void + +设置Declaration方法。 + +- 示例: + ``` + var thatSer = new xml.XmlSerializer(bufView); + thatSer.setDeclaration() // => ; + ``` + + +### startElement + +startElement(name: string): void + +根据给定名称写入元素开始标记。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | name | string | 是 | 当前元素的元素名。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.startElement("notel"); + thatSer.endElement();// => ''; + ``` + + +### endElement + +endElement(): void + +写入元素结束标记。 + +- 示例: + ``` + var thatSer = new xml.XmlSerializer(bufView); + thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); + thatSer.startElement("table"); + thatSer.setAttributes("importance", "high"); + thatSer.setText("Happy"); + endElement(); // => Happy + ``` + + +### setNamespace + +setNamespace(prefix: string, namespace: string): void + +写入当前元素标记的命名空间。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | prefix | string | 是 | 当前元素及其子元素的前缀。 | + | namespace | string | 是 | 当前元素及其子元素的命名空间。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.setDeclaration(); + thatSer.setNamespace("h", "http://www.w3.org/TR/html4/"); + thatSer.startElement("note"); + thatSer.endElement();// = >'\r\n'; + ``` + +### setComment + +setComment(text: string): void + +写入comment属性。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | 当前元素的注释内容。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.startElement("note"); + thatSer.setComment("Hi!"); + thatSer.endElement(); // => '\r\n \r\n'; + ``` + + +### setCDATA + +setCDATA(text: string): void + +写入CDATA属性。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | CDATA属性的内容。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1028); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.setCDATA('root SYSTEM') // => ''; + ``` + + +### setText + +setText(text: string): void + +设置Text方法。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | text属性的内容。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.startElement("note"); + thatSer.setAttributes("importance", "high"); + thatSer.setText("Happy1"); + thatSer.endElement(); // => 'Happy1'; + ``` + + +### setDocType + +setDocType(text: string): void + +写入DocType属性。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | text | string | 是 | DocType属性的内容。 | + +- 示例: + ``` + var arrayBuffer = new ArrayBuffer(1024); + var thatSer = new xml.XmlSerializer(arrayBuffer); + thatSer.setDocType('root SYSTEM'); // => ''; + ``` + + +## XmlPullParser + + +### XmlPullParser + +constructor(buffer: ArrayBuffer | DataView, encoding?: string) + +创建并返回一个XmlPullParser对象,该XmlPullParser对象传参两个, 第一参数是ArrayBuffer或DataView类型的一段内存,第二个参数为文件格式(默认为UTF-8) + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | buffer | ArrayBuffer \| DataView | 是 | 含有xml文本信息的ArrayBuffer或者DataView。 | + | encoding | string | 否 | 编码格式(仅支持utf-8)。 | + +- 示例: + ``` + var strXml = + '' + + '' + + ' Happy' + + ' Work' + + ' Play' + + ''; + var arrayBuffer = new ArrayBuffer(strXml.length*2); + var bufView = new Uint8Array(arrayBuffer); + var strLen = strXml.length; + for (var i = 0; i < strLen; ++i) { + bufView[i] = strXml.charCodeAt(i);//设置arraybuffer方式 + } + var that = new xml.XmlPullParser(arrayBuffer); + ``` + + +### parse + +parse(option: ParseOptions): void + +该接口用于解析xml。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | option | [ParseOptions](#parseoptions) | 是 | 用户控制以及获取解析信息的选项。 | + +- 示例: + ``` + var strXml = + '' + + '' + + ' Happy' + + ' Work' + + ' Play' + + ''; + var arrayBuffer = new ArrayBuffer(strXml.length*2); + var bufView = new Uint8Array(arrayBuffer); + var strLen = strXml.length; + for (var i = 0; i < strLen; ++i) { + bufView[i] = strXml.charCodeAt(i); + } + var that = new xml.XmlPullParser(arrayBuffer); + var arrTag = {}; + arrTag[0] = '132'; + var i = 1; + function func(key, value){ + arrTag[i] = 'key:'+key+' value:'+ value.getDepth(); + i++; + return true; + } + var options = {supportDoctype:true, ignoreNameSpace:true, tokenValueCallbackFunction:func} + that.parse(options); + ``` + + +## ParseOptions + +xml解析选项。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| supportDoctype | boolean | 否 | 是否忽略Doctype , 默认false。 | +| ignoreNameSpace | boolean | 否 | 是否忽略NameSpace,默认false。 | +| tagValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取tagValue回调函数。 | +| attributeValueCallbackFunction | (name: string, value: string)=> boolean | 否 | 获取attributeValue回调函数。 | +| tokenValueCallbackFunction | (eventType: [EventType](#eventtype), value: [ParseInfo](#parseinfo))=> boolean | 否 | 获取tokenValue回调函数。 | + + +## ParseInfo + +当前xml解析信息。 + + +### getColumnNumber + +getColumnNumber(): number + +获取当前列号,从1开始。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回当前列号。 | + + +### getDepth + +getDepth(): number + +获取元素的当前深度。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回元素的当前深度。 | + + +### getLineNumber + +getLineNumber(): number + +获取当前行号,从1开始。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回当前行号。 | + + +### getName + +getName(): string + +获取当前元素名称。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回当前元素名称。 | + + +### getNamespace + +getNamespace(): string + +获取当前元素的命名空间。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回当前元素的命名空间。 | + + +### getPrefix + +getPrefix(): string + +获取当前元素前缀。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回当前元素前缀。 | + + +### getText + +getText(): string + +获取当前事件的文本内容。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回当前事件的文本内容。 | + + +### isEmptyElementTag + +isEmptyElementTag(): boolean + +判断当前元素是否为空元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,当前元素为空元素。 | + + +### isWhitespace + +isWhitespace(): boolean + +判断当前文本事件是否仅包含空格字符。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回true,当前文本事件仅包含空格字符。 | + + +### getAttributeCount + +getAttributeCount(): number + +获取当前开始标记的属性数。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 当前开始标记的属性数。 | + + +## EventType + +事件枚举。 + +| 名称 | 枚举值 | 说明 | +| -------- | -------- | -------- | +| START_DOCUMENT | 0 | 启动文件事件。 | +| END_DOCUMENT | 1 | 结束文件事件。 | +| START_TAG | 2 | 启动标签事件。 | +| END_TAG | 3 | 结束标签事件。 | +| TEXT | 4 | 文本事件。 | +| CDSECT | 5 | CDATA事件。 | +| COMMENT | 6 | XML注释事件。 | +| DOCDECL | 7 | XML文档类型声明事件。 | +| INSTRUCTION | 8 | XML处理指令声明事件。 | +| ENTITY_REFERENCE | 9 | 实体引用事件。 | +| WHITESPACE | 10 | 空白事件。 | diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/06.xml\350\275\254\346\215\242JavaScript.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/06.xml\350\275\254\346\215\242JavaScript.md" new file mode 100644 index 0000000000000000000000000000000000000000..b8c7900d002329e7f36cae810d426c8e1c4fe8a4 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/06.xml\350\275\254\346\215\242JavaScript.md" @@ -0,0 +1,87 @@ +--- +title: xml转换JavaScript +permalink: /pages/010c010c06 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# xml转换JavaScript + +> **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import convertxml from '@ohos.convertxml'; +``` + +## ConvertXML + + +### convert + +convert(xml: string, options?: ConvertOptions) : Object + +转化xml文本为JavaScript对象。 + + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | --------------------------------- | ---- | ------------------ | + | xml | string | 是 | 传入的xml文本。 | + | options | [ConvertOptions](#convertoptions) | 否 | 用户可进行的选项。 | + +- 返回值: + + | 类型 | 说明 | + | ------ | ---------------------------- | + | string | 处理后返回的JavaScript对象。 | + +- 示例: + + ``` + var xml = + '' + + '' + + ' Happy' + + ' Work' + + ' Play' + + ''; + var conv = new convertxml.ConvertXML(); + var result1 = conv.convert(xml, {trim: false, ignoreDeclaration: false}); + console.log(result1) + ``` + + +## ConvertOptions + +| 名称 | 参数类型 | 必填 | 说明 | +| ----------------- | -------- | ---- | ----------------------------------------------------------- | +| trim | boolean | 否 | 是否修剪位于文本前后的空白字符,默认false。 | +| ignoreDeclaration | boolean | 否 | 是否忽略xml写入声明指示,默认false。 | +| ignoreInstruction | boolean | 否 | 是否忽略xml的写入处理指令,默认false。 | +| ignoreAttributes | boolean | 否 | 是否跨多行打印属性并缩进属性,默认false。 | +| ignoreComment | boolean | 否 | 是否忽略元素的注释信息,默认false。 | +| ignoreCDATA | boolean | 否 | 是否忽略元素的CDATA信息,默认false。 | +| ignoreDoctype | boolean | 否 | 是否忽略元素的Doctype信息,默认false。 | +| ignoreText | boolean | 否 | 是否忽略元素的文本信息,默认false。 | +| declarationKey | string | 否 | 用于输出对象中declaration的属性键的名称,默认_declaration。 | +| instructionKey | string | 否 | 用于输出对象中instruction的属性键的名称,默认_instruction。 | +| attributesKey | string | 否 | 用于输出对象中attributes的属性键的名称,默认_attributes。 | +| textKey | string | 否 | 用于输出对象中text的属性键的名称,默认_text。 | +| cdataKey | string | 否 | 用于输出对象中cdata的属性键的名称,默认_cdata。 | +| doctypeKey | string | 否 | 用于输出对象中doctype的属性键的名称,默认_doctype。 | +| commentKey | string | 否 | 用于输出对象中comment的属性键的名称,默认_comment。 | +| parentKey | string | 否 | 用于输出对象中parent的属性键的名称,默认_parent。 | +| typeKey | string | 否 | 用于输出对象中type的属性键的名称,默认_type。 | +| nameKey | string | 否 | 用于输出对象中name的属性键的名称,默认_name。 | +| elementsKey | string | 否 | 用于输出对象中elements的属性键的名称,默认_elements。 | \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/07.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" similarity index 83% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/07.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" index 4b7f545bdebcbb40584b9d0f1ee87bd078cc1b06..4edfcd55d1f861d8fe1e5c69a894276de4a3cf98 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/04.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/12.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/07.\345\220\257\345\212\250\344\270\200\344\270\252worker.md" @@ -1,6 +1,6 @@ --- title: 启动一个worker -permalink: /pages/000b000903 +permalink: /pages/010c010c07 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:36 +date: 2022-02-12 09:01:51 --- # 启动一个worker @@ -24,11 +24,6 @@ import worker from '@ohos.worker'; ``` -## 权限 - -无 - - ## 属性 | 名称 | 参数类型 | 可读 | 可写 | 说明 | @@ -64,14 +59,13 @@ worker构造函数。 | options | [WorkerOptions](#workeroptions) | 否 | worker构造的选项。 | - 返回值: - | 参数名 | 说明 | + | 类型 | 说明 | | -------- | -------- | | worker | 执行Worker构造函数生成的Worker对象,失败则返回undefined。 | - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js", {name:"first worker"}); + const workerInstance = new worker.Worker("workers/worker.js", {name:"first worker"}); ``` @@ -89,13 +83,13 @@ postMessage(message: Object, options?: PostMessageOptions): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js"); - worker.postMessage("hello world"); - - const worker = new worker.Worker("workers/worker.js"); + const workerInstance = new worker.Worker("workers/worker.js"); + workerInstance.postMessage("hello world"); + ``` + ``` + const workerInstance= new worker.Worker("workers/worker.js"); var buffer = new ArrayBuffer(8); - worker.postMessage(buffer, [buffer]); + workerInstance.postMessage(buffer, [buffer]); ``` @@ -113,9 +107,8 @@ on(type: string, listener: EventListener): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.on("alert", (e)=>{ + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.on("alert", (e)=>{ console.log("alert listener callback"); }) ``` @@ -135,9 +128,8 @@ once(type: string, listener: EventListener): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js"); - worker.once("alert", (e)=>{ + const workerInstance = new worker.Worker("workers/worker.js"); + workerInstance.once("alert", (e)=>{ console.log("alert listener callback"); }) ``` @@ -157,9 +149,8 @@ off(type: string, listener?: EventListener): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js"); - worker.off("alert"); + const workerInstance = new worker.Worker("workers/worker.js"); + workerInstance.off("alert"); ``` @@ -171,9 +162,8 @@ terminate(): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.terminate() + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.terminate() ``` @@ -190,9 +180,8 @@ Worker对象的onexit属性表示worker退出时被调用的事件处理程序 - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.onexit = function(e) { + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.onexit = function(e) { console.log("onexit") } ``` @@ -211,9 +200,8 @@ Worker对象的onerror属性表示worker在执行过程中发生异常被调用 - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.onerror = function(e) { + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.onerror = function(e) { console.log("onerror") } ``` @@ -232,9 +220,8 @@ Worker对象的onmessage属性表示宿主线程接收到来自其创建的worke - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.onmessage = function(e) { + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.onmessage = function(e) { console.log("onerror") } ``` @@ -253,9 +240,8 @@ Worker对象的onmessageerror属性表示当 Worker 对象接收到一条无法 - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.onmessageerror= function(e) { + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.onmessageerror= function(e) { console.log("onmessageerror") } ``` @@ -278,9 +264,8 @@ addEventListener(type: string, listener: EventListener): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.addEventListener("alert", (e)=>{ + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.addEventListener("alert", (e)=>{ console.log("alert listener callback"); }) ``` @@ -300,9 +285,8 @@ removeEventListener(type: string, callback?: EventListener): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.removeEventListener("alert") + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.removeEventListener("alert") ``` @@ -318,15 +302,14 @@ dispatchEvent(event: Event): boolean | event | [Event](#event) | 是 | 需要分发的事件。 | - 返回值: - | 参数名 | 说明 | + | 类型 | 说明 | | -------- | -------- | | boolean | 分发的结果,false表示分发失败。 | - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.dispatchEvent({type:"alert"}) + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.dispatchEvent({type:"alert"}) ``` @@ -338,9 +321,8 @@ removeAllListener(): void - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.removeAllListener({type:"alert"}) + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.removeAllListener({type:"alert"}) ``` @@ -365,14 +347,15 @@ worker向宿主线程发送消息。 ``` // main.js import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.postMessage("hello world") - worker.onmessage = function(e) { + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.postMessage("hello world") + workerInstance.onmessage = function(e) { console.log("receive data from worker.js") } - + ``` + ``` // worker.js - import worker from "@ohos.worker"; + import worker from '@ohos.worker'; const parentPort = worker.parentPort; parentPort.onmessage = function(e){ parentPort.postMessage("receive data from main.js") @@ -390,10 +373,11 @@ close(): void ``` // main.js import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - + const workerInstance = new worker.Worker("workers/worker.js") + ``` + ``` // worker.js - import worker from "@ohos.worker"; + import worker from '@ohos.worker'; const parentPort = worker.parentPort; parentPort.onmessage = function(e) { parentPort.close() @@ -416,11 +400,12 @@ DedicatedWorkerGlobalScope的onmessage属性表示worker线程收到来自其宿 ``` // main.js import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - worker.postMessage("hello world") - + const workerInstance = new worker.Worker("workers/worker.js") + workerInstance.postMessage("hello world") + ``` + ``` // worker.js - import worker from "@ohos.worker"; + import worker from '@ohos.worker'; const parentPort = worker.parentPort; parentPort.onmessage = function(e) { console.log("receive main.js message") @@ -443,10 +428,11 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当 Worker 对象接收 ``` // main.js import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - + const workerInstance = new worker.Worker("workers/worker.js") + ``` + ``` // worker.js - import worker from "@ohos.worker"; + import worker from '@ohos.worker'; const parentPort = worker.parentPort; parentPort.onmessageerror= function(e) { console.log("worker.js onmessageerror") @@ -488,15 +474,14 @@ DedicatedWorkerGlobalScope的onmessageerror属性表示当 Worker 对象接收 | evt | [Event](#event) | 是 | 回调的事件类。 | - 返回值 - | 参数名 | 说明 | + | 类型 | 说明 | | -------- | -------- | | void \| Promise<void> | 无返回值或者以Promise形式返回。 | - 示例: ``` - import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js"); - worker.addEventListener("alert", (e)=>{ + const workerInstance = new worker.Worker("workers/worker.js"); + workerInstance.addEventListener("alert", (e)=>{ console.log("alert listener callback"); }) ``` @@ -552,10 +537,11 @@ WorkerGlobalScope的onerror属性表示worker在执行过程中发生异常被 ``` // main.js import worker from '@ohos.worker'; - const worker = new worker.Worker("workers/worker.js") - + const workerInstance = new worker.Worker("workers/worker.js") + ``` + ``` // worker.js - import worker from "@ohos.worker"; + import worker from '@ohos.worker'; const parentPort = worker.parentPort parentPort.onerror = function(e){ console.log("worker.js onerror") diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..752a8cc6ba531aca2308f92dac3a75a205adb26a --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" @@ -0,0 +1,186 @@ +--- +title: 通用属性 +permalink: /pages/010c0201010101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 通用属性 + +## 常规属性 + +常规属性指的是组件普遍支持的用来设置组件基本标识和外观显示特征的属性。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

id

+

string

+

-

+

+

组件的唯一标识。

+

style

+

string

+

-

+

+

组件的样式声明。

+

class

+

string

+

-

+

+

组件的样式类,用于引用样式表。

+

ref

+

string

+

-

+

+

用来指定指向子元素或子组件的引用信息,该引用将注册到父组件的$refs 属性对象上。

+

disabled

+

boolean

+

false

+

+

当前组件是否被禁用,在禁用场景下,组件将无法响应用户交互。

+

data

+

string

+

-

+

+

给当前组件设置data属性,进行相应的数据存储和读取。JS文件中:

+
  • 在事件回调中使用 e.target.attr.data 读取数据,e为事件回调函数入参。
  • 使用$element或者$refs获取DOM元素后,通过attr.data 进行访问。
+
说明:

从API Version 6 开始,建议使用data-*。

+
+

data-*6+

+

string

+

-

+

+

给当前组件设置data-*属性,进行相应的数据存储和读取。大小写不敏感,如data-A和data-a默认相同。JS文件中:

+
  • 在事件回调中使用 e.target.dataSet.a读取数据,e为事件回调函数入参。
  • 使用$element或者$refs获取DOM元素后,通过dataSet.a进行访问。
+

click-effect5+

+

string

+

-

+

+

通过这个属性可以设置组件的弹性点击效果,当前支持如下三种效果:

+
  • spring-small:建议小面积组件设置,缩放(90%)。
  • spring-medium:建议中面积组件设置,缩放(95%)。
  • spring-large:建议大面积组件设置,缩放(95%)。
+

dir6+

+

string

+

auto

+

+

设置元素布局模式,支持设置rtl、ltr和auto三种属性值:

+
  • rtl:使用从右往左布局模式。
  • ltr:使用从左往右布局模式。
  • auto:跟随系统语言环境。
+
+ +## 渲染属性 + +组件普遍支持的用来设置组件是否渲染的属性。 + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

for

+

Array

+

-

+

根据设置的数据列表,展开当前元素。

+

if

+

boolean

+

-

+

根据设置的boolean值,添加或移除当前元素。

+

show

+

boolean

+

-

+

根据设置的boolean值,显示或隐藏当前元素。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>属性和样式不能混用,不能在属性字段中进行样式设置。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..21dbadd9a4202317258b57c8b6f6557056a35e0f --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" @@ -0,0 +1,629 @@ +--- +title: 通用样式 +permalink: /pages/010c0201010102 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 通用样式 + +组件普遍支持的可以在style或css中设置组件外观样式。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

width

+

<length> | <percentage>

+

-

+

设置组件自身的宽度。

+

缺省时使用元素自身内容需要的宽度。

+

height

+

<length> | <percentage>

+

-

+

设置组件自身的高度。

+

缺省时使用元素自身内容需要的高度。

+

min-width5+

+

<length> | <percentage>6+

+

0

+

设置元素的最小宽度。

+

min-height5+

+

<length> | <percentage>6+

+

0

+

设置元素的最小高度。

+

max-width5+

+

<length> | <percentage>6+

+

-

+

设置元素的最大宽度。默认无限制。

+

max-height5+

+

<length> | <percentage>6+

+

-

+

设置元素的最大高度。默认无限制。

+

padding

+

<length> | <percentage>5+

+

0

+

使用简写属性设置所有的内边距属性。

+
该属性可以有1到4个值:
  • 指定一个值时,该值指定四个边的内边距。

    +
  • 指定两个值时,第一个值指定上下两边的内边距,第二个指定左右两边的内边距。

    +
  • 指定三个值时,第一个指定上边的内边距,第二个指定左右两边的内边距,第三个指定下边的内边距。

    +
  • 指定四个值时分别为上、右、下、左边的内边距(顺时针顺序)。

    +
+
+

padding-[left|top|right|bottom]

+

<length> | <percentage>5+

+

0

+

设置左、上、右、下内边距属性。

+

padding-[start|end]

+

<length> | <percentage>5+

+

0

+

设置起始和末端内边距属性。

+

margin

+

<length> | <percentage>5+

+

0

+

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

+
  • 只有一个值时,这个值会被指定给全部的四个边。

    +
  • 两个值时,第一个值被匹配给上和下,第二个值被匹配给左和右。

    +
  • 三个值时,第一个值被匹配给上, 第二个值被匹配给左和右,第三个值被匹配给下。

    +
  • 四个值时,会依次按上、右、下、左的顺序匹配 (即顺时针顺序)。

    +
+

margin-[left|top|right|bottom]

+

<length> | <percentage>5+

+

0

+

设置左、上、右、下外边距属性。

+

margin-[start|end]

+

<length> | <percentage>5+

+

0

+

设置起始和末端外边距属性。

+

border

+

-

+

0

+

使用简写属性设置所有的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置时,各属性值为默认值。

+

border-style

+

string

+

solid

+

使用简写属性设置所有边框的样式,可选值为:

+
  • dotted:显示为一系列圆点,圆点半径为border-width的一半。
  • dashed:显示为一系列短的方形虚线。
+
  • solid:显示为一条实线。
+

border-[left|top|right|bottom]-style

+

string

+

solid

+

分别设置左、上、右、下四个边框的样式,可选值为dotted、dashed、solid。

+

border-[left|top|right|bottom]

+

-

+

-

+

使用简写属性设置对应位置的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置的值为默认值。

+

border-width

+

<length>

+

0

+

使用简写属性设置元素的所有边框宽度,或者单独为各边边框设置宽度

+

border-[left|top|right|bottom]-width

+

<length>

+

0

+

分别设置左、上、右、下四个边框的宽度。

+

border-color

+

<color>

+

black

+

使用简写属性设置元素的所有边框颜色,或者单独为各边边框设置颜色

+

border-[left|top|right|bottom]-color

+

<color>

+

black

+

分别设置左、上、右、下四个边框的颜色。

+

border-radius

+

<length>

+

-

+

border-radius属性设置元素的外边框圆角半径。设置border-radius时不能单独设置某一个方向的border-[left|top|right|bottom]-width,border-[left|top|right|bottom]-color ,border-[left|top|right|bottom]-style,如果要设置color、width和style,需要将四个方向一起设置(border-width、border-color、border-style)。

+
说明:

顺序为左下、右下、左上和右上。

+
+

border-[top|bottom]-[left|right]-radius

+

<length>

+

-

+

分别设置左上,右上,右下和左下四个角的圆角半径。

+

background

+

<linear-gradient>

+

-

+

仅支持设置渐变样式,与background-color、background-image不兼容。

+

background-color

+

<color>

+

-

+

设置背景颜色。

+

background-image

+

string

+

-

+

设置背景图片。与background-color、background不兼容,支持本地图片资源地址。

+

示例:

+
  • background-image: url("/common/background.png")
    说明:

    不支持svg格式图片。

    +
    +
+

background-size

+
  • string
  • <length> <length>
  • <percentage> <percentage>
+

auto

+

设置背景图片的大小。

+
  • string可选值:
    • contain:把图片扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图片扩展至足够大,以使背景图片完全覆盖背景区域;背景图片的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    +
  • length值参数方式:

    设置背景图片的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
  • 百分比参数方式:

    以父元素的百分比来设置背景图片的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
+

background-repeat

+

string

+

repeat

+

针对重复背景图片样式进行设置,背景图片默认在水平和垂直方向上重复。

+
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
+

background-position

+
  • string string
  • <length> <length>
  • <percentage> <percentage>
+

0px 0px

+
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    +
+
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>。
+

box-shadow5+

+

string

+

0

+

语法:box-shadow: h-shadow v-shadow blur spread color

+

通过这个样式可以设置当前组件的阴影样式,包括水平位置(必填)、垂直位置(必填)、模糊半径(可选,默认值为0)、阴影延展距离(可选,默认值为0)、阴影颜色(可选,默认值为黑色)。

+

示例:

+
  • box-shadow :10px 20px 5px 10px #888888
  • box-shadow :100px 100px 30px red
  • box-shadow :-100px -100px 0px 40px
+

filter5+

+

string

+

-

+

语法:filter: blur(px)

+

通过这个样式可以设置当前组件布局范围的内容模糊,参数用于指定模糊半径,如果没有设置值,则默认是0(不模糊),不支持百分比。

+

示例:

+
  • filter: blur(10px)
+

backdrop-filter5+

+

string

+

-

+

语法:backdrop-filter: blur(px)

+

通过这个样式可以设置当前组件布局范围的背景模糊,参数用于指定模糊半径,如果没有设置值,则默认是0(不模糊),不支持百分比。

+

示例:

+
  • backdrop-filter: blur(10px)
+

opacity

+

number

+

1

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

+

display

+

string

+

+

flex

+

确定一个元素所产生的框的类型,可选值为:

+
  • flex:弹性布局。
  • none:不渲染此元素。
+

visibility

+

string

+

+

visible

+

是否显示元素所产生的框。不可见的框会占用布局(将'display'属性设置为'none'来完全去除框),可选值为:

+
  • visible:元素正常显示。
  • hidden:隐藏元素,但是其他元素的布局不改变,相当于此元素变成透明。
+
说明:

visibility和display样式都设置时,仅display生效。

+
+

flex

+

number | string

+

-

+

规定当前组件如何适应父组件中的可用空间。

+

flex可以指定1个、2个5+或3个5+值。

+

单值语法:

+
  • 一个无单位数:用来设置组件的flex-grow。
  • 一个有效的宽度值5+:用来设置组件的flex-basis。
+

双值语法5+

+

第一个值必须是无单位数,用来设置组件的flex-grow。第二个值是以下之一:

+
  • 一个无单位数:用来设置组件的flex-shrink。
  • 一个有效的宽度值:用来设置组件的flex-basis。
+

三值语法5+

+

第一个值必须是无单位数,用来设置组件的flex-grow;第二个值必须是无单位数,用来设置组件的flex-shrink;第三个值必须是一个有效的宽度值,用来设置组件的flex-basis。

+
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

+
+

flex-grow

+

number

+

0

+

设置组件的拉伸样式,指定父组件容器主轴方向上剩余空间(容器本身大小减去所有flex子元素占用的大小)的分配权重。0为不伸展。

+
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

+
+

flex-shrink

+

number

+

1

+

设置组件的收缩样式,元素仅在默认宽度之和大于容器的时候才会发生收缩,0为不收缩。

+
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

+
+

flex-basis

+

<length>

+

+

-

+

设置组件在主轴方向上的初始大小。

+
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

+
+

align-self6+

+

string

+

-

+

设置自身在父元素交叉轴上的对齐方式,该样式会覆盖父元素的align-items样式,仅在父容器为div、list。可选值为:

+
  • stretch 弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start 元素向交叉轴起点对齐。
  • flex-end 元素向交叉轴终点对齐。
  • center 元素在交叉轴居中。
  • baseline 元素在交叉轴基线对齐。
+

position

+

string

+

relative

+

设置元素的定位类型,不支持动态变更。

+
  • fixed:相对与整个界面进行定位。
  • absolute:相对于父元素进行定位。
  • relative:相对于其正常位置进行定位。
+
说明:

absolute属性仅在父容器为<div>、<stack>时生效。

+
+

[left|top|right|bottom]

+

<length> | <percentage>6+

+

-

+

left|top|right|bottom需要配合position样式使用,来确定元素的偏移位置。

+
  • left属性规定元素的左边缘。该属性定义了定位元素左外边距边界与其包含块左边界之间的偏移。
  • top属性规定元素的顶部边缘。该属性定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。
  • right属性规定元素的右边缘。该属性定义了定位元素右外边距边界与其包含块右边界之间的偏移。
  • bottom属性规定元素的底部边缘。该属性定义了一个定位元素的下外边距边界与其包含块下边界之间的偏移。
+

[start | end]6+

+

<length> | <percentage>

+

-

+

start | end需要配合position样式使用,来确定元素的偏移位置。

+
  • start属性规定元素的起始边缘。该属性定义了定位元素起始外边距边界与其包含块起始边界之间的偏移。
  • end属性规定元素的结尾边缘。该属性定义了一个定位元素的结尾边距边界与其包含块结尾边界之间的偏移。
+

z-index6+

+

number

+

-

+

表示对于同一父节点其子节点的渲染顺序。数值越大,渲染数据越靠后。

+
说明:

z-index不支持auto,并且opacity等其他样式不会影响z-index的渲染顺序。

+
+

image-fill6+

+

<color>

+

-

+

为svg图片填充颜色,支持组件范围(与设置图片资源的属性):button(icon属性)、piece(icon属性)、search(icon属性)、input(headericon属性)、textarea(headericon属性)、image(src属性)、toolbar-item(icon属性)。

+

svg图片文件内的fill属性颜色值在渲染时将被替换为image-fill所配的颜色值,且仅对svg图片内显示声明的fill属性生效。

+

clip-path6+

+

[ <geometry-box> || <basic-shape> ] | none

+

-

+

设置组件的裁剪区域。区域内的部分显示,区域外的不显示。

+

<geometry-box>:表示裁剪区域的作用范围,默认为border-box。可选值为:

+
  • margin-box:margin计算入长宽尺寸内。
  • border-box:border计算入长宽尺寸内。
  • padding-box:padding计算入长宽尺寸内。
  • content-box:margin/border/padding不计算入长宽尺寸内。
+

<basic-shape>:表示裁剪的形状。包含以下类型:

+
  • inset,格式为:inset( <percentage>{1,4} [ round <'border-radius'> ]? )。
  • circle,格式为:circle( [ <percentage> ]? [ at <percentage> <percentage> ]? )。
  • ellipse,格式为:ellipse( [ <percentage>{2} ]? [ at <percentage> <percentage> ]? )。
  • polygon,格式为:polygon( [ <percentage> <percentage> ]# )
  • path,格式为:path( <string> )。
+

mask-image6+

+
  • <linear-gradient>
  • string
+

-

+

设置渐变色遮罩或本地图片设置。

+

设置渐变色遮罩,示例:

+

linear-gradient(to left, black, white)

+

设置纯色遮罩,示例:

+

linear-gradient(to right, grey , grey)

+

设置本地svg图片为遮罩,示例:url(common/mask.svg)

+

mask-size6+

+
  • string
  • <length><length>
  • <percentage> <percentage>
+

auto

+

设置遮罩图片显示大小,仅当mask-image为图片资源时有效。

+

string可选值:

+
  • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
  • cover:把图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
  • auto:保持原图的比例不变。
+

length值参数方式:设置图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

+

百分比参数方式:以原图宽高的百分比来设置图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

+

mask-position6+

+
  • string string
  • <length> <length>
  • <percentage> <percentage>
+

0px 0px

+

设置遮罩图片显示位置,仅当mask-image为图片资源时有效。关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。

+

string可选值:

+
  • left:水平方向上最左侧。
  • right:水平方向上最右侧。
  • top:竖直方向上最顶部。
  • bottom:竖直方向上最底部。
  • center:水平方向或竖直方向上中间位置。
+

length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。

+

百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。

+

可以混合使用<percentage>和<length>。

+

border-image-source7+

+

string

+

-

+

指定元素的边框图片。

+

示例:

+

border-image-source: url("/common/images/border.png")

+

border-image-slice7+

+

<length> | <percentage>

+

0

+

指定图片的边界内向偏移。

+

该属性可以有1到4个值:

+

指定一个值时,该值指定四个边的内偏移。

+

指定两个值时,第一个值指定上下两边的内偏移,第二个指定左右两边的内偏移。

+

指定三个值时,第一个指定上边的内偏移,第二个指定左右两边的内偏移,第三个指定下边的内偏移。

+

指定四个值时分别为上、右、下、左边的内偏移(顺时针顺序)。

+

border-image-width7+

+

<length> | <percentage>

+

0

+

指定图片边界的宽度。

+

指定一个值时,该值指定四个边的宽度。

+

指定两个值时,第一个值指定上下两边的宽度 ,第二个指定左右两边的宽度。

+

指定三个值时,第一个指定上边的宽度 ,第二个指定左右两边的宽度 ,第三个指定下边的宽度。

+

指定四个值时分别为上、右、下、左边的宽度 (顺时针顺序)。

+

border-image-outset7+

+

<length> | <percentage>

+

0

+

指定边框图像可超出边框的大小。

+

指定一个值时,边框图像在四个方向超出边框的距离。

+

指定两个值时,第一个值指定上下两边的边框图像超出边框的距离,第二个指定左右两边的 。

+

指定三个值时,第一个指定上边的边框图像超出边框的距离 ,第二个指定左右两边的边框图像超出边框的距离 ,第三个指定下边的边框图像超出边框的距离 。

+

指定四个值时分别为上、右、下、左边的边框图像超出边框的距离 (顺时针顺序)。

+

border-image-repeat7+

+

string

+

stretch

+

定义图片如何填充边框。

+

stretch: 拉伸图片以填充边框。

+

repeat:平铺图片以填充边框。

+

round:平铺图像。当不能整数次平铺时,根据情况放大或缩小图像。

+

border-image7+

+

string

+

-

+

简写属性,可以选择以下两种设置方式:

+ +
  • 渐变色边框

    示例:

    +

    border-image: linear-gradient(red, yellow) 10px

    +
+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>通用样式都不是必填项。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..667bb8d9e34bfb1bb7448a786538740a7726f1d0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" @@ -0,0 +1,493 @@ +--- +title: 通用事件 +permalink: /pages/010c0201010103 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 通用事件 + +## 事件说明 + +- 事件绑定在组件上,当组件达到事件触发条件时,会执行JS中对应的事件回调函数,实现页面UI视图和页面JS逻辑层的交互; +- 事件回调函数中通过参数可以携带额外的信息,如组件上的数据对象dataset,事件特有的回调参数。 + +相对于私有事件,大部分组件都可以绑定如下事件。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

是否支持冒泡

+

touchstart

+

TouchEvent

+

手指刚触摸屏幕时触发该事件。

+

5+

+

touchmove

+

TouchEvent

+

手指触摸屏幕后移动时触发该事件。

+

5+

+

touchcancel

+

TouchEvent

+

手指触摸屏幕中动作被打断时触发该事件。

+

5+

+

touchend

+

TouchEvent

+

手指触摸结束离开屏幕时触发该事件。

+

5+

+

click

+

-

+

点击动作触发该事件。

+

6+

+

doubleclick7+

+
  

双击动作触发该事件

+

+

longpress

+

-

+

长按动作触发该事件。

+

+

swipe5+

+

SwipeEvent

+

组件上快速滑动后触发该事件。

+

+

attached6+

+

-

+

当前组件节点挂载在渲染树后触发。

+

+

detached6+

+

-

+

当前组件节点从渲染树中移除后触发。

+

+

pinchstart7+

+

PinchEvent

+

手指开始执行捏合操作时触发该事件。

+

+

pinchupdate7+

+

PinchEvent

+

手指执行捏合操作过程中触发该事件。

+

+

pinchend7+

+

PinchEvent

+

手指捏合操作结束离开屏幕时触发该事件。

+

+

pinchcancel7+

+

PinchEvent

+

手指捏合操作被打断时触发该事件。

+

+

dragstart7+

+

DragEvent

+

用户开始拖拽时触发该事件。

+

+

drag7+

+

DragEvent

+

拖拽过程中触发该事件。

+

+

dragend7+

+

DragEvent

+

用户拖拽完成后触发。

+

+

dragenter7+

+

DragEvent

+

进入释放目标时触发该事件。

+

+

dragover7+

+

DragEvent

+

在释放目标内拖动时触发。

+

+

dragleave7+

+

DragEvent

+

离开释放目标区域时触发。

+

+

drop7+

+

DragEvent

+

在可释放目标区域内释放时触发。

+

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>除上述事件外,其他事件均为非冒泡事件,如[input的change事件](/pages/010c0201010306#section1721512551218),详见各个组件。 + +**表 1** BaseEvent对象属性列表 + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

type

+

string

+

当前事件的类型,比如click、longpress等。

+

timestamp

+

number

+

该事件触发时的时间戳。

+
+ +**表 2** TouchEvent对象属性列表\(继承BaseEvent\) + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

touches

+

Array<TouchInfo>

+

触摸事件时的属性集合,包含屏幕触摸点的信息数组。

+

changedTouches

+

Array<TouchInfo>

+

触摸事件时的属性集合,包括产生变化的屏幕触摸点的信息数组。数据格式和touches一样。该属性表示有变化的触摸点,如从无变有,位置变化,从有变无。例如用户手指刚接触屏幕时,touches数组中有数据,但changedTouches无数据。

+
+ +**表 3** TouchInfo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

globalX

+

number

+

距离屏幕左上角(不包括状态栏)横向距离。屏幕的左上角为原点。

+

globalY

+

number

+

距离屏幕左上角(不包括状态栏)纵向距离。屏幕的左上角为原点。

+

localX

+

number

+

距离被触摸组件左上角横向距离。组件的左上角为原点。

+

localY

+

number

+

距离被触摸组件左上角纵向距离。组件的左上角为原点。

+

size

+

number

+

触摸接触面积。

+

force6+

+

number

+

接触力信息。

+

identifier8+

+

number

+

接触点标识信息,表示接触表面与触摸点的唯一标识值,手指在屏幕表面上移动触发的每个事件中该值不变。

+
+ +**表 4** SwipeEvent 基础事件对象属性列表(继承BaseEvent) + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

direction

+

string

+

滑动方向,可能值有:

+
  1. left:向左滑动;
  2. right:向右滑动;
  3. up:向上滑动;
  4. down:向下滑动。
+

distance6+

+

number

+

在滑动方向上的滑动距离。

+
+ +**表 5** PinchEvent 对象属性列表7+ + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

scale

+

number

+

缩放比例

+

pinchCenterX

+

number

+

捏合中心点X轴坐标,单位px

+

pinchCenterY

+

number

+

捏合中心点Y轴坐标,单位px

+
+ +**表 6** DragEvent对象属性列表\(继承BaseEvent\)7+ + + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

type

+

string

+

事件名称。

+

globalX

+

number

+

距离屏幕左上角坐标原点横向距离。

+

globalY

+

number

+

距离屏幕左上角坐标原点纵向距离。

+

timestamp

+

number

+

时间戳。

+
+ +## 事件对象 + +当组件触发事件后,事件回调函数默认会收到一个事件对象,通过该事件对象可以获取相应的信息。 + +**target对象:** + + + + + + + + + + + +

属性

+

类型

+

说明

+

dataSet6+

+

Object

+

组件上通过通用属性设置的data-*的自定义属性组成的集合。

+
+ +**示例:** + +``` + +
+
+
+``` + +``` +// xxx.js +export default { + touchstartfunc(msg) { + console.info(`on touch start, point is: ${msg.touches[0].globalX}`); + console.info(`on touch start, data is: ${msg.target.dataSet.a}`); + } +} +``` + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..652285476508d44e1c820af73ce54883c5660363 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" @@ -0,0 +1,692 @@ +--- +title: 通用方法 +permalink: /pages/010c0201010104 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 通用方法 + +当组件通过id属性标识后,可以使用该id获取组件对象并调用相关组件方法。 + +## animate + +animate\( keyframes: Keyframes, options: Options\):void + +- 参数 + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

描述

+

keyframes

+

keyframes

+

+

设置动画样式

+

options

+

Options

+

+

用于设置动画属性的对象列表。options请见Options说明

+
+ + **表 1** keyframes + + + + + + + + + + + + +

属性

+

类型

+

说明

+

frames

+

Array<Style>

+

用于设置动画样式的对象列表。Style类型说明请见Style类型说明

+
+ + **表 2** Style类型说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

默认值

+

说明

+

width

+

number

+

-

+

动画执行过程中设置到组件上的宽度值。

+

height

+

number

+

-

+

动画执行过程中设置到组件上的高度值。

+

backgroundColor

+

<color>

+

none

+

动画执行过程中设置到组件上的背景颜色。

+

opacity

+

number

+

1

+

设置到组件上的透明度(介于0到1之间)。

+

backgroundPosition

+

string

+

-

+

格式为"x y",单位为百分号或者px。

+

第一个值是水平位置,第二个值是垂直位置。

+

如果仅规定了一个值,另一个值为 50%。

+

transformOrigin

+

string

+

'center center'

+

变换对象的中心点。

+

第一个参数表示x轴的值,可以设置为left、center、right、长度值或百分比值。

+

第二个参数表示y轴的值,可以设置为top、center、bottom、长度值或百分比值。

+

transform

+

Transform

+

-

+

设置到变换对象上的类型。

+

offset

+

number

+

-

+
  • offset值(如果提供)必须在0.0到1.0(含)之间,并以升序排列。
  • 若只有两帧,可以不填offset。
  • 若超过两帧,offset必填。
+
+ + **表 3** Options说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

默认值

+

说明

+

duration

+

number

+

0

+

指定当前动画的运行时长(单位毫秒)。

+

easing

+

string

+

linear

+

描述动画的时间曲线,支持类型见easing有效值说明

+

delay

+

number

+

0

+

设置动画执行的延迟时间(默认值表示无延迟)。

+

iterations

+

number | string

+

1

+

设置动画执行的次数。number表示固定次数,Infinity枚举表示无限次数播放。

+

direction6+

+

string

+

normal

+

指定动画的播放模式:

+

normal: 动画正向循环播放;

+

reverse: 动画反向循环播放;

+

alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放;

+

alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。

+

fill

+

string

+

none

+

指定动画开始和结束的状态:

+

none:在动画执行之前和之后都不会应用任何样式到目标上。

+

forwards:在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。

+

backwards6+:动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。

+

both6+:动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。

+
+ + **表 4** easing有效值说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

描述

+

linear

+

动画线性变化。

+

ease-in

+

动画速度先慢后快,cubic-bezier(0.42, 0.0, 1.0, 1.0)。

+

ease-out

+

动画速度先快后慢,cubic-bezier(0.0, 0.0, 0.58, 1.0)。

+

ease-in-out

+

动画先加速后减速,cubic-bezier(0.42, 0.0, 0.58, 1.0)。

+

friction

+

阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。

+

extreme-deceleration

+

急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。

+

sharp

+

锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。

+

rhythm

+

节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。

+

smooth

+

平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。

+

cubic-bezier(x1, y1, x2, y2)

+

在三次贝塞尔函数中定义动画变化过程,入参的x和y值必须处于0-1之间。

+

steps(number, step-position)6+

+

Step曲线。

+

number必须设置,支持的类型为int。

+

step-position参数可选,支持设置start或end,默认值为end。

+
+ +- 返回值 + + animation对象属性: + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

finished

+

boolean

+

只读,用于表示当前动画是否已播放完成。

+

pending

+

boolean

+

只读,用于表示当前动画是否处于等待其他异步操作完成的等待状态(例如启动一个延时播放的动画)。

+

playState

+

string

+

可读可写,动画的执行状态:

+
  • idle:未执行状态,包括已结束或未开始。
  • running:动画正在运行。
  • paused:动画暂停。
  • finished:动画播放完成。
+

startTime

+

number

+

可读可写,动画播放开始的预定时间,用途类似于options参数中的delay。

+
+ + animation对象方法: + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法

+

参数

+

说明

+

play

+

-

+

组件播放动画。

+

finish

+

-

+

组件完成动画。

+

pause

+

-

+

组件暂停动画。

+

cancel

+

-

+

组件取消动画。

+

reverse

+

-

+

组件倒播动画。

+
+ + animation对象事件: + + + + + + + + + + + + + + + + + + +

事件

+

说明

+

start6+

+

动画开始事件。

+

cancel

+

动画被强制取消。

+

finish

+

动画播放完成。

+

repeat

+

动画重播事件。

+
+ +- 示例 + + ``` + +
+
+
+ + +
+
+ ``` + + ``` + /* xxx.css */ + .container { + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + } + .box{ + width: 200px; + height: 200px; + background-color: #ff0000; + margin-top: 30px; + } + .buttonBox{ + margin-top: 30px; + width: 250px; + justify-content: space-between; + } + button{ + background-color: #8e8b89; + color: white; + width: 100px; + height: 40px; + font-size: 24px; + } + ``` + + ``` + // xxx.js + import prompt from '@system.prompt'; + export default{ + data:{ + animation:'', + }, + onInit(){ + }, + onShow(){ + var options = { + duration: 1500, + easing: 'friction', + delay: 500, + fill: 'forwards', + iterations: 2, + direction: 'normal', + }; + var frames = [ + {transform: {translate: '-120px -0px'}, opacity: 0.1, offset: 0.0}, + {transform: {translate: '120px 0px'}, opacity: 1.0, offset: 1.0} + ]; + this.animation = this.$element('idName').animate(frames, options); + // handle finish event + this.animation.onfinish = function(){ + prompt.showToast({ + message: "The animation is finished." + }); + }; + // handle cancel event + this.animation.oncancel = function(){ + prompt.showToast({ + message: "The animation is canceled." + }); + }; + // handle repeat event + this.animation.onrepeat = function(){ + prompt.showToast({ + message: "The animation is repeated." + }); + }; + }, + start(){ + this.animation.play(); + }, + cancel(){ + this.animation.cancel(); + } + } + ``` + + ![](/images/application-dev/reference/arkui-js/figures/AnimationAPI裁剪.gif) + + +## getBoundingClientRect + +getBoundingClientRect\(\): [ ](#table1650917111414) + +获取元素的大小及其相对于窗口的位置。 + +- 返回值 + + **表 5** Rect对象说明6+ + + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

描述

+

width

+

number

+

该元素的宽度。

+

height

+

number

+

该元素的高度。

+

left

+

number

+

该元素左边界距离窗口的偏移。

+

top

+

number

+

该元素上边界距离窗口的偏移。

+
+ +- 示例 + + ``` + // xxx.js + var rect = this.$element('id').getBoundingClientRect(); + console.info(`current element position is ${rect.left}, ${rect.top}`); + ``` + + +## createIntersectionObserver + +createIntersectionObserver\(param?:ObserverParam\): Observer) + +监听元素在当前页面的可见范围。 + +- 参数 + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

描述

+

param

+

ObserverParam

+

-

+

获取observer的回调。

+
+ + **表 6** ObserverParam对象说明6+ + + + + + + + + + + + + +

属性

+

类型

+

描述

+

ratios

+

Array<number>

+

组件超出或小于范围时触发observer的回调。

+
+ +- 返回值 + + **表 7** Observer对象支持的方法6+ + + + + + + + + + + + + + + + + +

方法

+

参数

+

描述

+

observe

+

callback: function

+

开启observer的订阅方法。超出或小于阈值时触发callback。

+

unobserve

+

-

+

取消observer的订阅方法。

+
+ +- 示例 + + ``` + // xxx.js + let observer = this.$element('broad').createIntersectionObserver({ + ratios: [0.2, 0.5], // number + }); + + observer.observe((isVisible, ratio)=> { + console.info('this element is ' + isVisible + 'ratio is ' + ratio) + }) + + observer.unobserve() + ``` + + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..fcc6d7f063ed121545b8169dc9e279ba39efc432 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" @@ -0,0 +1,543 @@ +--- +title: 动画样式 +permalink: /pages/010c0201010105 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 动画样式 + +组件支持动态的旋转、平移、缩放效果,可在style或css中设置。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

transform-origin

+

string6+ | <percentage> | <length> string6+ | <percentage> | <length>

+

center center

+

变换对象的原点位置,支持px和百分比(相对于动画目标组件),如果仅设置一个值,另一个值为50%,第一个string的可选值为:left | center | right ,第二个string的可选值为:top | center | bottom。

+

示例:

+

transform-origin: 200px 30%。

+

transform-origin: 100px top。

+

transform-origin: center center。

+

transform

+

string

+

-

+

支持同时设置平移/旋转/缩放的属性。

+

详见表1

+

animation6+

+

string

+

0s ease 0s 1 normal none running none

+

格式:duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name,每个字段不区分先后,但是 duration / delay 按照出现的先后顺序解析。

+

animation-name

+

string

+

-

+

指定@keyframes,详见表2

+

animation-delay

+

<time>

+

0

+

定义动画播放的延迟时间。支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,格式为:1000ms或1s。

+

animation-duration

+

<time>

+

0

+

定义一个动画周期。支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,格式为:1000ms或1s。

+
说明:

animation-duration 样式必须设置,否则时长为 0,则不会播放动画。

+
+

animation-iteration-count

+

number | infinite

+

1

+

定义动画播放的次数,默认播放一次,可通过设置为infinite无限次播放。

+

animation-timing-function

+

string

+

ease

+

描述动画执行的速度曲线,用于使动画更为平滑。

+

可选项有:

+
  • linear:表示动画从头到尾的速度都是相同的。
  • ease:表示动画以低速开始,然后加快,在结束前变慢,cubic-bezier(0.25, 0.1, 0.25, 1.0)。
  • ease-in:表示动画以低速开始,cubic-bezier(0.42, 0.0, 1.0, 1.0)。
  • ease-out:表示动画以低速结束,cubic-bezier(0.0, 0.0, 0.58, 1.0)。
  • ease-in-out:表示动画以低速开始和结束,cubic-bezier(0.42, 0.0, 0.58, 1.0)。
  • friction:阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。
  • extreme-deceleration:急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。
  • sharp:锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。
  • rhythm:节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。
  • smooth:平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。
  • cubic-bezier:在三次贝塞尔函数中定义动画变化过程,入参的x和y值必须处于0-1之间。
  • steps: 阶梯曲线6+。语法:steps(number[, end|start]);number必须设置,支持的类型为正整数。第二个参数可选,表示在每个间隔的起点或是终点发生阶跃变化,支持设置end或start,默认值为end。
+

animation-direction6+

+

string

+

normal

+

指定动画的播放模式:

+
  • normal: 动画正向循环播放。
  • reverse: 动画反向循环播放。
  • alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放。
  • alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。
+

animation-fill-mode

+

string

+

none

+

指定动画开始和结束的状态:

+
  • none:在动画执行之前和之后都不会应用任何样式到目标上。
  • forwards:在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。
  • backwards6+:动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。
  • both6+:动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。
+

animation-play-state6+

+

string

+

running

+

指定动画的当前状态:

+
  • paused:动画状态为暂停。
  • running:动画状态为播放。
+

transition6+

+

string

+

all 0 ease 0

+

指定组件状态切换时的过渡效果,可以通过transition属性设置如下四个属性:

+
  • transition-property:规定设置过渡效果的 CSS 属性的名称,目前支持宽、高、背景色。
  • transition-duration:规定完成过渡效果需要的时间,单位秒。
  • transition-timing-function:规定过渡效果的时间曲线,支持样式动画提供的曲线。
  • transition-delay:规定过渡效果延时启动时间,单位秒。
+
+ +**表 1** transform操作说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

描述

+

none6+

+

-

+

不进行任何转换。

+

matrix6+

+

<number>

+

入参为六个值的矩阵,6个值分别代表:scaleX, skewY, skewX, scaleY, translateX, translateY。

+

matrix3d6+

+

<number>

+

入参为十六个值的4X4矩阵。

+

translate

+

<length>| <percent>

+

平移动画属性,支持设置x轴和y轴两个维度的平移参数。

+

translate3d6+

+

<length>| <percent>

+

三个入参,分别代表X轴、Y轴、Z轴的平移距离。

+

translateX

+

<length>| <percent>

+

X轴方向平移动画属性。

+

translateY

+

<length>| <percent>

+

Y轴方向平移动画属性。

+

translateZ6+

+

<length>| <percent>

+

Z轴的平移距离。

+

scale

+

<number>

+

缩放动画属性,支持设置x轴和y轴两个维度的缩放参数。

+

scale3d6+

+

<number>

+

三个入参,分别代表X轴、Y轴、Z轴的缩放参数。

+

scaleX

+

<number>

+

X轴方向缩放动画属性。

+

scaleY

+

<number>

+

Y轴方向缩放动画属性。

+

scaleZ6+

+

<number>

+

Z轴的缩放参数。

+

rotate

+

<deg> | <rad> | <grad>6+ | <turn>6+

+

旋转动画属性,支持设置x轴和y轴两个维度的选中参数。

+

rotate3d6+

+

<deg> | <rad> | <grad> | <turn>

+

四个入参,前三个分别为X轴、Y轴、Z轴的旋转向量,第四个是旋转角度。

+

rotateX

+

<deg> | <rad> | <grad>6+ | <turn>6+

+

X轴方向旋转动画属性。

+

rotateY

+

<deg> | <rad> | <grad>6+ | <turn>6+

+

Y轴方向旋转动画属性。

+

rotateZ6+

+

<deg> | <rad> | <grad> | <turn>

+

Z轴方向的旋转角度。

+

skew6+

+

<deg> | <rad> | <grad> | <turn>

+

两个入参,分别为X轴和Y轴的2D倾斜角度。

+

skewX6+

+

<deg> | <rad> | <grad> | <turn>

+

X轴的2D倾斜角度。

+

skewY6+

+

<deg> | <rad> | <grad> | <turn>

+

Y轴的2D倾斜角度。

+

perspective6+

+

<number>

+

3D透视场景下镜头距离元素表面的距离。

+
+ +**表 2** @keyframes属性说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

background-color

+

<color>

+

-

+

动画执行后应用到组件上的背景颜色。

+

opacity

+

number

+

1

+

动画执行后应用到组件上的不透明度值,为介于0到1间的数值,默认为1。

+

width

+

<length>

+

-

+

动画执行后应用到组件上的宽度值。

+

height

+

<length>

+

-

+

动画执行后应用到组件上的高度值。

+

transform

+

string

+

-

+

定义应用在组件上的变换类型,见表1

+

background-position6+

+

string | <percentage> | <length> string | <percentage> | <length>

+

50% 50%

+

背景图位置。单位支持百分比和px,第一个值是水平位置,第二个值是垂直位置。如果仅设置一个值,另一个值为50%。第一个string的可选值为:left | center | right ,第二个string的可选值为:top | center | bottom。

+

示例:

+
  • background-position: 200px 30%
  • background-position: 100px top
  • background-position: center center
+
+ +对于不支持起始值或终止值缺省的情况,可以通过from和to显示指定起始和结束。可以通过百分比指定动画运行的中间状态6+。示例: + +``` +
+
+
+
+``` + +``` +.container { + display: flex; + justify-content: center; + align-items: center; +} +.rect{ + width: 200px; + height: 200px; + background-color: #f76160; + animation: Go 3s infinite; +} +@keyframes Go +{ + from { + background-color: #f76160; + transform:translate(100px) rotate(0deg) scale(1.0); + } + /* 可以通过百分比指定动画运行的中间状态6+ */ + 50% { + background-color: #f76160; + transform:translate(100px) rotate(60deg) scale(1.3); + } + to { + background-color: #09ba07; + transform:translate(100px) rotate(180deg) scale(2.0); + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324797.gif) + +``` + +
+
+ animation-play-state: {{playState}} +
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + justify-content: center; + align-items: center; +} +.simpleSize { + background-color: blue; + width: 100px; + height: 100px; +} +.simpleAnimation { + animation: simpleFrames 9s; +} +@keyframes simpleFrames { + from { transform: translateX(0px); } + to { transform: translateX(100px); } +} +``` + +``` +// xxx.js +export default { + data: { + title: "", + playState: "running" + }, + toggleState() { + if (this.playState === "running") { + this.playState = "paused"; + } else { + this.playState = "running"; + } + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285034.gif) + +``` + +
+``` + +``` +/* xxx.css */ +.img { + width: 294px; + height: 233px; + background-image: url('common/heartBeat.jpg'); + background-repeat: no-repeat; + background-position: 0% 0%; + background-size: 900%; + animation-name: heartBeating; + animation-duration: 1s; + animation-delay: 0s; + animation-fill-mode: forwards; + animation-iteration-count: -1; + animation-timing-function: steps(8, end); +} + +@keyframes heartBeating { + from { background-position: 0% 0%;} + to { background-position: 100% 0%;} +} +``` + +``` + +
+
+
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + justify-content: center; + align-items: center; +} +.content { /* 组件状态1 */ + height: 200px; + width: 200px; + background-color: red; + transition: all 5s ease 0s; +} +.content:active { /* 组件状态2 */ + height: 400px; + width: 400px; + background-color: blue; + transition: all 5s linear 0s; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152833768.gif) + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>@keyframes的from/to不支持动态绑定。 +>steps函数的end和start含义如下图所示。 +>![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125220.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..2ecbfa0aebb53b50cf95c42acdeb694a45b1b811 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" @@ -0,0 +1,133 @@ +--- +title: 渐变样式 +permalink: /pages/010c0201010106 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 渐变样式 + +组件普遍支持的在style或css中设置的 可以平稳过渡两个或多个指定的颜色。 + +开发框架支持线性渐变 \(linear-gradient\)和重复线性渐变 \(repeating-linear-gradient\)两种渐变效果。 + +## 线性渐变/重复线性渐变 + +使用渐变样式,需要定义过渡方向和过渡颜色。 + +### 过渡方向 + +通过direction或者angle指定过渡方向。 + +- direction:进行方向渐变。 +- angle:进行角度渐变。 + +``` +background: linear-gradient(direction/angle, color, color, ...); +background: repeating-linear-gradient(direction/angle, color, color, ...); +``` + +### 过渡颜色 + +支持以下四种方式:\#ff0000、\#ffff0000、rgb\(255, 0, 0\)、rgba\(255, 0, 0, 1\),需要指定至少两种颜色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

direction

+

to <side-or-corner> <side-or-corner> = [left | right] || [top | bottom]

+

to bottom (由上到下渐变)

+

+

指定过渡方向,如:to left (从右向左渐变) ;或者

+

to bottom right (从左上角到右下角)。

+

angle

+

<deg>

+

180deg

+

+

指定过渡方向,以元素几何中心为坐标原点,水平方向为X轴,angle指定了渐变线与Y轴的夹角(顺时针方向)。

+

color

+

<color> [<length>|<percentage>]

+

-

+

+

定义使用渐变样式区域内颜色的渐变效果。

+
+ +- 示例 + + 1. 默认渐变方向为从上向下渐变 + + ``` + #gradient { + height: 300px; + width: 600px; + /* 从顶部开始向底部由红色向绿色渐变 */ + background: linear-gradient(red, #00ff00); + } + ``` + + ![](/images/application-dev/reference/arkui-js/figures/111.png) + + 2. 45度夹角渐变 + + ``` + /* 45度夹角,从红色渐变到绿色 */ + background: linear-gradient(45deg, rgb(255,0,0),rgb(0, 255, 0)); + ``` + + ![](/images/application-dev/reference/arkui-js/figures/222.png) + + 3. 设置方向从左向右渐变 + + ``` + /* 从左向右渐变,在距离左边90px和距离左边360px (600*0.6) 之间270px宽度形成渐变 */ + background: linear-gradient(to right, rgb(255,0,0) 90px, rgb(0, 255, 0) 60%); + ``` + + ![](/images/application-dev/reference/arkui-js/figures/333.png) + + 4. 重复渐变 + + ``` + /* 从左向右重复渐变,重复渐变区域30px(60-30)透明度0.5 */ + background: repeating-linear-gradient(to right, rgba(255, 255, 0, 1) 30px,rgba(0, 0, 255, .5) 60px); + ``` + + ![](/images/application-dev/reference/arkui-js/figures/444.png) + + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" similarity index 39% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" index dd9b7761c0cf19c5a699a1ccb4ca8b0a7290b323..82386376bfbcdbe69f69361849b06476bab44bdf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/07.\350\275\254\345\234\272\346\240\267\345\274\217.md" @@ -1,6 +1,6 @@ --- title: 转场样式 -permalink: /pages/000b0100010006 +permalink: /pages/010c0201010107 navbar: true sidebar: true prev: true @@ -9,99 +9,95 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # 转场样式 ## 共享元素转场 -**表 1** 共享元素转场属性 +### 属性 - -

名称

+ - - - - - - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

shareid

+

shareid

string

+

string

+

进行共享元素转场时使用,若不配置,则转场样式不生效。共享元素转场当前支持的组件:list-item、image、text、button、label。

+

进行共享元素转场时使用,若不配置,则转场样式不生效。共享元素转场当前支持的组件:list-item、image、text、button、label。

-**表 2** 共享元素转场样式 +### 样式 - -

名称

+ - - - - - - - - - - - - - - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

shared-transition-effect

+

shared-transition-effect

string

+

string

exchange

+

exchange

配置共享元素转场时的入场样式。

-

当前支持:exchange或static,默认为exchange。

-

转场时,目的页配置的样式优先生效。

-
  • exchange表示源页面元素移动到目的页元素位置,并进行适当缩放。
  • static表示目的页元素位置不变,用户可配置透明度动画。当前仅跳转目标页配置的static效果生效。
+

配置共享元素转场时的入场样式。

+
  • exchange(默认值):源页面元素移动到目的页元素位置,并进行适当缩放。
  • static:目的页元素位置不变,用户可配置透明度动画。当前仅跳转目标页配置的static效果生效。

shared-transition-name

+

shared-transition-name

string

+

string

-

+

-

转场时,目的页配置的样式优先生效。该样式用于配置共享元素的动画效果,一个由@keyframes定义的动画序列,支持transform和透明度动画。若共享元素效果与自定义的动画冲突,以自定义动画为准。

+

转场时,目的页配置的样式优先生效。该样式用于配置共享元素的动画效果,一个由@keyframes定义的动画序列,支持transform和透明度动画。若共享元素效果与自定义的动画冲突,以自定义动画为准。

shared-transition-timing-function

+

shared-transition-timing-function

string

+

string

friction

+

friction

转场时,目的页配置的样式优先生效。该属性定义了共享元素转场时的差值曲线。若不配置,默认使用friction曲线。

+

转场时,目的页配置的样式优先生效。该属性定义了共享元素转场时的差值曲线。若不配置,默认使用friction曲线。

-## 共享元素注意事项 +### 注意事项 -1. 若同时配置了共享元素转场和自定义页面转场样式,页面转场效果以自定义效果为准; +1. 若同时配置了共享元素转场和自定义页面转场样式,页面转场效果以自定义效果为准。 -2. 共享元素的exchange效果类似下图: +2. 共享元素的exchange效果类似下图。 -**图 1** 共享元素转场默认效果 +**图 1** 共享元素转场默认效果 ![](/images/application-dev/reference/arkui-js/figures/共享元素转场默认效果.png "共享元素转场默认效果") 3. 共享元素动画对元素的边框、背景色不生效。 4. 共享元素转场时,由于页面元素会被隐藏,故页面元素配置的动画样式/动画方法失效。 -5. 动态修改shareid:组件A的shareid被组件B的shareid覆盖,则组件A的共享元素效果失效,即使组件B的shareid被修改,此时组件A的共享元素效果也不会恢复。5+ +5. 动态修改shareid5+:组件A的shareid被组件B的shareid覆盖,则组件A的共享元素效果失效,即使组件B的shareid被修改,此时组件A的共享元素效果也不会恢复。 -## 共享元素示例代码 +### 示例 PageA跳转到PageB,跳转的共享元素为image, shareid为“shareImage”。 @@ -109,12 +105,14 @@ PageA跳转到PageB,跳转的共享元素为image, shareid为“shareImage
- - - - Click on picture to Jump to ths details - - + + +
+ + Click on picture to Jump to ths details +
+
+
``` @@ -174,34 +172,35 @@ export default { ## 卡片转场样式 - -

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>卡片转场无法和其他转场\(包括共享元素转场和自定义转场\)共同使用。 + +### 样式 + + - - - - - - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

transition-effect

+

transition-effect

string

+

string

-

+

-

用于配置当前页面中的某个组件在卡片转场过程中是否进行转场动效,当前支持如下配置:

-
  • unfold:配置这个属性的组件,如在卡片的上方,则向上移动一个卡片的高度,如在卡片的下方,则向下移动一个卡片的高度。
  • none:转场过程中没有动效。
+

用于配置当前页面中的某个组件在卡片转场过程中是否进行转场动效,当前支持如下配置:

+
  • unfold:配置这个属性的组件,如在卡片的上方,则向上移动一个卡片的高度,如在卡片的下方,则向下移动一个卡片的高度。
  • none:转场过程中没有动效。
->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->卡片转场无法和其他转场\(包括共享元素转场和自定义转场\)共同使用。 - -## 示例 +### 示例 source\_page包含顶部内容以及卡片列表,点击卡片可以跳转到target\_page。 @@ -288,71 +287,69 @@ export default { ## 页面转场样式 -**表 3** 页面转场样式 +### 样式 - -

名称

+ - - - - - - - - - - - - - - - - - - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

transition-enter

+

transition-enter

string

+

string

-

+

-

与@keyframes配套使用,支持transform和透明度动画,详见表2

+

与@keyframes配套使用,支持transform和透明度动画,详见表2

transition-exit

+

transition-exit

string

+

string

-

+

-

与@keyframes配套使用,支持transform和透明度动画,详见表2

+

与@keyframes配套使用,支持transform和透明度动画,详见表2

transition-duration

+

transition-duration

string

+

string

跟随设备默认的页面转场时间

+

跟随设备默认的页面转场时间

支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms。

+

支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,未配置时使用系统默认值。

transition-timing-function

+

transition-timing-function

string

+

string

friction

+

friction

描述转场动画执行的速度曲线,用于使转场更为平滑。详细参数见动画样式中“animation-timing-function”有效值说明。

+

描述转场动画执行的速度曲线,用于使转场更为平滑。详细参数见动画样式中“animation-timing-function”有效值说明。

-## 页面转场注意事项 +### 注意事项 1. 配置自定义转场时,建议配置页面背景色为不透明颜色,否则在转场过程中可能会出现衔接不自然的现象。 -2. transition-enter和transition-exit可单独配置,没有配置时使用系统默认的参数; -3. transition-duration没有配置的时候使用系统默认值; -4. transition-enter/transition-exit说明如下: - 1. push场景下:进入页面栈的Page2.js应用transition-enter描述的动画配置;进入页面栈第二位置的Page1.js应用transition-exit描述的动画配置; +2. transition-enter和transition-exit可单独配置,没有配置时使用系统默认的参数。 +3. transition-enter/transition-exit说明如下: + 1. push场景下:进入页面栈的Page2.js应用transition-enter描述的动画配置;进入页面栈第二位置的Page1.js应用transition-exit描述的动画配置。 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324847.png) + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001193704354.png) 2. back场景下:退出页面栈的Page2.js应用transition-enter描述的动画配置,并进行倒播;从页面栈第二位置进入栈顶位置的Page1.js应用transition-exit描述的动画配置,并进行倒播。 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125268.png) + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001238184345.png) diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..3d5044e0d15ca1696e1999abc1490abb95c19c10 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" @@ -0,0 +1,312 @@ +--- +title: 媒体查询 +permalink: /pages/010c0201010108 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# 媒体查询 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- media属性值默认为设备的真实尺寸大小、物理像素和真实的屏幕分辨率。请勿与以720px为基准的项目配置宽度px混淆。 + +媒体查询(Media Query)在移动设备上应用十分广泛,开发者经常需要根据设备的大致类型或者特定的特征和设备参数(例如屏幕分辨率)来修改应用的样式。为此媒体查询提供了如下功能: + +1. 针对设备和应用的属性信息,可以设计出相匹配的布局样式。 +2. 当屏幕发生动态改变时(比如分屏、横竖屏切换),应用页面布局同步更新。 + +## CSS语法规则 + +使用@media来引入查询语句,具体规则如下: + +``` +@media [media-type] [and|not|only] [(media-feature)] { + CSS-Code; +} +``` + +例子: + +@media screen and \(round-screen: true\) \{ … \} // 当设备屏幕是圆形时条件成立 + +@media \(max-height: 800\) \{ … \} // 范围查询,CSS level 3 写法 + +@media \(height <= 800\) \{ … \} // 范围查询,CSS level 4 写法,与CSS level3写法等价 + +@media screen and \(device-type: tv\) or \(resolution < 2\) \{ … \} // 同时包含媒体类型和多个媒体特征的多条件复杂语句查询 + +## 页面中引用资源 + +通过@import方式引入媒体查询,具体使用方法如下: + +``` +@import url [media-type] [and|not|only] [(media-feature)]; +``` + +例如: + +``` +@import '../common/style.css' screen and (min-width: 600) and (max-width: 1200); +``` + +## 媒体类型 + + + + + + + + + +

类型

+

说明

+

screen

+

按屏幕相关参数进行媒体查询。

+
+ +## 媒体逻辑操作 + +媒体逻辑操作符:and、or、not、only用于构成复杂媒体查询,也可以通过comma(,)将其组合起来,详细解释说明如下表。 + +**表 1** 媒体逻辑操作符 + + + + + + + + + + + + + + + + + + + + + +

类型

+

说明

+

and

+

将多个媒体特征(Media Feature)以“与”的方式连接成一个媒体查询,只有当所有媒体特征都为true,查询条件成立。另外,它还可以将媒体类型和媒体功能结合起来。

+

例如:screen and (device-type: wearable) and (max-height: 600) 表示当设备类型是智能穿戴同时应用的最大高度小于等于600个像素单位时成立。

+

not

+

取反媒体查询结果,媒体查询结果不成立时返回true,否则返回false。在媒体查询列表中应用not,则not仅取反应用它的媒体查询。

+

例如:not screen and (min-height: 50) and (max-height: 600) 表示当应用高度小于50个像素单位或者大于600个像素单位时成立。

+
说明:

使用not运算符时必须指定媒体类型。

+
+

only

+

当整个表达式都匹配时,才会应用选择的样式,可以应用在防止某些较早的版本的浏览器上产生歧义的场景。一些较早版本的浏览器对于同时包含了媒体类型和媒体特征的语句会产生歧义,比如:

+

screen and (min-height: 50)

+

老版本浏览器会将这句话理解成screen,从而导致仅仅匹配到媒体类型(screen),就应用了指定样式,使用only可以很好地规避这种情况。

+
说明:

使用only时必须指定媒体类型。

+
+

,(comma)

+

将多个媒体特征以“或”的方式连接成一个媒体查询,如果存在结果为true的媒体特征,则查询条件成立。其效果等同于or运算符。

+

例如:screen and (min-height: 1000), (round-screen:true) 表示当应用高度大于等于1000个像素单位或者设备屏幕是圆形时,条件成立。

+

or

+

将多个媒体特征以“或”的方式连接成一个媒体查询,如果存在结果为true的媒体特征,则查询条件成立。

+

例如:screen and (max-height: 1000) or (round-screen:true)表示当应用高度小于等于1000个像素单位或者设备屏幕是圆形时,条件成立。

+
+ +在MediaQuery Level 4中引入了范围查询,使其能够使用max-,min-的同时,也支持了<=,\>=,<,\>操作符。 + +**表 2** 媒体逻辑范围操作符 + + + + + + + + + + + + + + + + + + +

类型

+

说明

+

<=

+

小于等于,例如:screen and (height <= 50)。

+

>=

+

大于等于,例如:screen and (height >= 600)。

+

<

+

小于,例如:screen and (height < 50)。

+

>

+

大于,例如:screen and (height > 600)。

+
+ +## 媒体特征 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

类型

+

说明

+

height

+

应用页面显示区域的高度。

+

min-height

+

应用页面显示区域的最小高度。

+

max-height

+

应用页面显示区域的最大高度。

+

width

+

应用页面显示区域的宽度。

+

min-width

+

应用页面显示区域的最小宽度。

+

max-width

+

应用页面显示区域的最大宽度。

+

resolution

+

设备的分辨率,支持dpi,dppx和dpcm单位。其中:

+
  • dpi表示每英寸中物理像素个数,1dpi≈0.39dpcm;
  • dpcm表示每厘米上的物理像素个数,1dpcm ≈ 2.54dpi;
  • dppx表示每个px中的物理像素数(此单位按96px=1英寸为基准,与页面中的px单位计算方式不同),1dppx = 96dpi。
+

min-resolution

+

设备的最小分辨率。

+

max-resolution

+

设备的最大分辨率。

+

orientation

+

屏幕的方向。

+

可选值:

+
  • orientation: portrait(设备竖屏)
  • orientation: landscape(设备横屏)
+

aspect-ratio

+

应用页面显示区域的宽度与高度的比值。

+

例如:aspect-ratio:1/2

+

min-aspect-ratio

+

应用页面显示区域的宽度与高度的最小比值。

+

max-aspect-ratio

+

应用页面显示区域的宽度与高度的最大比值。

+

device-height

+

设备的高度。

+

min-device-height

+

设备的最小高度。

+

max-device-height

+

设备的最大高度。

+

device-width

+

设备的宽度。

+

min-device-width

+

设备的最小宽度。

+

max-device-width

+

设备的最大宽度。

+

round-screen

+

屏幕类型,圆形屏幕为true, 非圆形屏幕为 false。

+

dark-mode6+

+

系统为深色模式时为true,否则为false。

+
+ +## 示例代码 + +- 通用媒体特征示例代码: + +``` + +
+
+ Hello World +
+
+``` + +``` +/* xxx.css */ +.container { + width: 300px; + height: 600px; + background-color: #008000; +} +@media (device-type: tv) { + .container { + width: 500px; + height: 500px; + background-color: #fa8072; + } +} +@media (device-type: wearable) { + .container { + width: 300px; + height: 300px; + background-color: #008b8b; + } +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" index 8e8d00dfda1fc4076534473d4c4543e61a903f99..993332e175335ed2e16db10f1854a747f64ea4ba 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/09.\350\207\252\345\256\232\344\271\211\345\255\227\344\275\223\346\240\267\345\274\217.md" @@ -1,6 +1,6 @@ --- title: 自定义字体样式 -permalink: /pages/000b0100010008 +permalink: /pages/010c0201010109 navbar: true sidebar: true prev: true @@ -9,16 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # 自定义字体样式 font-face用于定义字体样式。应用可以在style中定义font-face来指定相应的字体名和字体资源,然后在font-family样式中引用该字体。 -自定义字体可以是从项目中的字体文件中加载的字体。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->字体格式支持ttf和otf。 +自定义字体可以是从项目中的字体文件中加载的字体,字体格式支持ttf和otf。 ## 定义font-face @@ -37,7 +34,7 @@ font-face用于定义字体样式。应用可以在style中定义font-face来指 自定义字体的来源,支持如下类别: -- 项目中的字体文件:通过url指定项目中的字体文件路径\(只支持绝对路径,详见[资源和文件访问规则](/pages/000b01000000#section6620355202117)章节\)。 +- 项目中的字体文件:通过url指定项目中的字体文件路径\(只支持绝对路径,详见[资源和文件访问规则](/pages/010802020201)章节\)。 - 不支持设置多个src。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" index 3ddc3fedc9886421d1ea574c78873d1116589b45..a1c6999eca3247bbe60045ec2a63bcb4c5edb752 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/10.\345\216\237\345\255\220\345\270\203\345\261\200.md" @@ -1,6 +1,6 @@ --- title: 原子布局 -permalink: /pages/000b0100010009 +permalink: /pages/010c020101010a navbar: true sidebar: true prev: true @@ -9,37 +9,33 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # 原子布局 在屏幕形态和规格不同等情况下,布局效果需要实现自适应,因此系统提供了面向不同屏幕尺寸界面自适应适配的布局能力,称为原子布局。设计师可以考虑使用原子能力,定义元素在不同形态的尺寸界面上体现的自适应规则。开发者可以使用原子布局能力,快速实现让应用在多形态屏幕上有与设计效果相匹配的自适应效果。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 隐藏能力 在非折行flex布局基础上,增加了显示优先级标记,可以调整组件内元素水平/垂直方向的显示优先级,根据当前组件容器的可用空间来显示内容。 - -

样式

+ - - - - - - - @@ -49,24 +45,23 @@ date: 2021-12-30 18:31:37 在非折行的flex布局中,定义了占比能力的组件,保证指定元素始终在容器的某一个比例空间中进行布局。 - -

样式

类型

+

类型

默认值

+

默认值

说明

+

说明

display-index

+

display-index

number

+

number

0

+

0

适用于div等支持flex布局的容器组件中的子组件上,当容器组件在flex主轴上尺寸不足以显示全部内容时,按照display-index值从小到大的顺序进行隐藏,具有相同display-index值的组件同时隐藏,默认值为0,表示隐藏。

+

适用于div等支持flex布局的容器组件中的子组件上,当容器组件在flex主轴上尺寸不足以显示全部内容时,按照display-index值从小到大的顺序进行隐藏,具有相同display-index值的组件同时隐藏,默认值为0,表示隐藏。

样式

+ - - - - - - - @@ -76,26 +71,25 @@ date: 2021-12-30 18:31:37 定义了组件固定比例调整尺寸的能力。 - -

样式

类型

+

类型

默认值

+

默认值

说明

+

说明

flex-weight

+

flex-weight

number

+

number

-

+

-

指明当前元素在flex主轴方向上尺寸权值,当且仅当容器组件中所有节点均设置此属性时生效,当前元素尺寸为: 容器主轴尺寸 * 当前权值 / 所有子元素权值和。

+

指明当前元素在flex主轴方向上尺寸权值,当且仅当容器组件中所有节点均设置此属性时生效,当前元素尺寸为: 容器主轴尺寸 * 当前权值 / 所有子元素权值和。

样式

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" index 95c9d4196c394076264687f91de8f8235448b66a..ffe9b5eaa296d2bdd32b56efc881a7b3c79ed2f0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/01.badge.md" @@ -1,6 +1,6 @@ --- title: badge -permalink: /pages/000b0100010100 +permalink: /pages/010c0201010201 navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # badge 应用中如果有需用户关注的新事件提醒,可以采用新事件标记来标识。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 权限列表 无 @@ -31,92 +28,91 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

样式

类型

+

类型

默认值

+

默认值

说明

+

说明

aspect-ratio

+

aspect-ratio

number

+

number

-

+

-

1. 接受任意大于0的浮点值,定义为该节点的宽度与高度比,设置该属性后,该元素尺寸宽高比按照此属性值进行调整。

-

2. 遵守最大值与最小值的限制。

-

3. 在flex布局中,主轴尺寸先进行调整,后根据该尺寸调整交叉轴。

+

1. 接受任意大于0的浮点值,定义为该节点的宽度与高度比,设置该属性后,该元素尺寸宽高比按照此属性值进行调整。

+

2. 遵守最大值与最小值的限制。

+

3. 在flex布局中,主轴尺寸先进行调整,后根据该尺寸调整交叉轴。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -125,61 +121,60 @@ date: 2021-12-30 18:31:37 **表 1** BadgeConfig - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

placement

+

placement

string

+

string

rightTop

+

rightTop

+

事件提醒的数字标记或者圆点标记的位置,可选值为:

-
  • right:位于组件右边框。
  • rightTop:位于组件边框右上角。
  • left:位于组件左边框。
+

事件提醒的数字标记或者圆点标记的位置,可选值为:

+
  • right:位于组件右边框。
  • rightTop:位于组件边框右上角。
  • left:位于组件左边框。

count

+

count

number

+

number

0

+

0

+

设置提醒的消息数,默认为0。当设置相应的提醒消息数大于0时,消息提醒会变成数字标记类型,未设置消息数或者消息数不大于0时,消息提醒将采用圆点标记。

-
说明:

当数字设置为大于maxcount时,将使用maxcount显示。

-

count属性最大支持整数值为2147483647。

+

设置提醒的消息数,默认为0。当设置相应的提醒消息数大于0时,消息提醒会变成数字标记类型,未设置消息数或者消息数不大于0时,消息提醒将采用圆点标记。

+
说明:

当数字设置为大于maxcount时,将使用maxcount显示。

+

count属性最大支持整数值为2147483647。

visible

+

visible

boolean

+

boolean

false

+

false

+

是否显示消息提醒,当收到新信息提醒时可以设置该属性为true,显示相应的消息提醒,如果需要使用数字标记类型,同时需要设置相应的count属性。

+

是否显示消息提醒,当收到新信息提醒时可以设置该属性为true,显示相应的消息提醒,如果需要使用数字标记类型,同时需要设置相应的count属性。

maxcount

+

maxcount

number

+

number

99

+

99

+

最大消息数限制,当收到新信息提醒大于该限制时,标识数字会进行省略,仅显示maxcount+。

-
说明:

maxcount属性最大支持整数值为2147483647。

+

最大消息数限制,当收到新信息提醒大于该限制时,标识数字会进行省略,仅显示maxcount+。

+
说明:

maxcount属性最大支持整数值为2147483647。

config

+

config

BadgeConfig

+

BadgeConfig

-

+

-

+

设置新事件标记相关配置属性。

+

设置新事件标记相关配置属性。

label6+

+

label6+

string

+

string

-

+

-

+

设置新事件提醒的文本值。

-
说明:

使用该属性时,count和maxcount属性不生效。

+

设置新事件提醒的文本值。

+
说明:

使用该属性时,count和maxcount属性不生效。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -187,18 +182,18 @@ date: 2021-12-30 18:31:37 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** >badge组件的子组件大小不能超过badge组件本身的大小,否则子组件不会绘制。 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" similarity index 44% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" index 2f0721ee394e566bfc92e5ce5dec5baf49b9d9fc..b818cce5d1d8cae8d93c6adea6e63022636e8ead 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/02.dialog.md" @@ -1,6 +1,6 @@ --- title: dialog -permalink: /pages/000b0100010101 +permalink: /pages/010c0201010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # dialog @@ -25,30 +25,29 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

badgeColor

+

badgeColor

<color>

+

<color>

#fa2a2d

+

#fa2a2d

+

新事件标记背景色。

+

新事件标记背景色。

textColor

+

textColor

<color>

+

<color>

#ffffff

+

#ffffff

+

数字标记的数字文本颜色。

+

数字标记的数字文本颜色。

textSize

+

textSize

<length>

+

<length>

10px

+

10px

+

数字标记的数字文本大小。

+

数字标记的数字文本大小。

badgeSize

+

badgeSize

<length>

+

<length>

6px

+

6px

+

圆点标记的默认大小

+

圆点标记的默认大小

名称

+ - - - - - - - - - @@ -59,40 +58,39 @@ date: 2021-12-30 18:31:37 ## 样式 -仅支持[通用样式](/pages/000b0100010001)中的width、height、margin、margin-\[left|top|right|bottom\]、margin-\[start|end\]样式。 +仅支持[通用样式](/pages/010c0201010102)中的width、height、margin、margin-\[left|top|right|bottom\]、margin-\[start|end\]样式。 ## 事件 -不支持[通用事件](/pages/000b0100010002),仅支持如下事件: +不支持[通用事件](/pages/010c0201010103),仅支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

dragable7+

+

dragable7+

boolean

+

boolean

false

+

false

+

设置对话框是否支持拖拽。

+

设置对话框是否支持拖拽。

名称

+ - - - - - - - - - - - @@ -100,29 +98,28 @@ date: 2021-12-30 18:31:37 ## 方法 -不支持[通用方法](/pages/000b0100010003),仅支持如下方法。 +不支持[通用方法](/pages/010c0201010104),仅支持如下方法。 - -

名称

参数

+

参数

描述

+

描述

cancel

+

cancel

-

+

-

用户点击非dialog区域触发取消弹窗时触发的事件。

+

用户点击非dialog区域触发取消弹窗时触发的事件。

show7+

+

show7+

-

+

-

对话框弹出时触发该事件。

+

对话框弹出时触发该事件。

close7+

+

close7+

-

+

-

对话框关闭时触发该事件。

+

对话框关闭时触发该事件。

名称

+ - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" index 69a1a1477947ab0d96bb704a24d41cf3159fba2a..0d8c1cc152982eb3f45d6bffb9db210c2c77daec 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/03.div.md" @@ -1,6 +1,6 @@ --- title: div -permalink: /pages/000b0100010102 +permalink: /pages/010c0201010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # div @@ -25,213 +25,212 @@ date: 2021-12-30 18:31:37 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -除支持[组件通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[组件通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

参数

+

参数

描述

+

描述

show

+

show

-

+

-

弹出对话框。

+

弹出对话框。

close

+

close

-

+

-

关闭对话框。

+

关闭对话框。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -239,43 +238,42 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

flex-direction

+

flex-direction

string

+

string

row

+

row

+

flex容器主轴方向。可选项有:

-
  • column:垂直方向从上到下。
  • row:水平方向从左到右。
+

flex容器主轴方向。可选项有:

+
  • column:垂直方向从上到下。
  • row:水平方向从左到右。

flex-wrap

+

flex-wrap

string

+

string

nowrap

+

nowrap

+

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

-
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。
+

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

+
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。

justify-content

+

justify-content

string

+

string

flex-start

+

flex-start

+

flex容器当前行的主轴对齐格式。可选项有:

-
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
  • space-evenly5+: 均匀排列每个元素,每个元素之间的间隔相等。
+

flex容器当前行的主轴对齐格式。可选项有:

+
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
  • space-evenly5+: 均匀排列每个元素,每个元素之间的间隔相等。

align-items

+

align-items

string

+

string

stretch

+

stretch

+

flex容器当前行的交叉轴对齐格式,可选值为:

-
  • stretch:弹性元素在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
+

flex容器当前行的交叉轴对齐格式,可选值为:

+
  • stretch:弹性元素在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。

align-content

+

align-content

string

+

string

flex-start

+

flex-start

+

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

-
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
+

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

+
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。

display

+

display

string

+

string

flex

+

flex

+

确定该元素视图框的类型,该值暂不支持动态修改。可选值为:

-
  • flex:弹性布局
  • grid:网格布局
  • none:不渲染此元素
+

确定该元素视图框的类型,该值暂不支持动态修改。可选值为:

+
  • flex:弹性布局
  • grid:网格布局
  • none:不渲染此元素

grid-template-[columns|rows]

+

grid-template-[columns|rows]

string

+

string

1行1列

+

1行1列

+

用于设置当前网格布局行和列的数量,不设置时默认1行1列,仅当display为grid时生效。

-

示例:如设置grid-template-columns为:

-
  • 50px 100px 60px:分三列,第一列50px,第二列100px,第三列60px;
  • 1fr 1fr 2fr:分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份;
  • 30% 20% 50%:分三列,将父组件允许的宽为基准,第一列占30%,第二列占20%,第三列占50%;
  • repeat(2,100px):分两列,第一列100px,第二列100px;
  • repeat(auto-fill,100px)5+:按照每列100px的大小和交叉轴大小计算最大正整数重复次数,按照该重复次数布满交叉轴;
  • auto 1fr 1fr:分三列,第一列自适应内部子组件所需宽度,剩余空间分为两等份,第二列占一份,第三列占一份。
+

用于设置当前网格布局行和列的数量,不设置时默认1行1列,仅当display为grid时生效。

+

示例:如设置grid-template-columns为:

+
  • 50px 100px 60px:分三列,第一列50px,第二列100px,第三列60px;
  • 1fr 1fr 2fr:分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份;
  • 30% 20% 50%:分三列,将父组件允许的宽为基准,第一列占30%,第二列占20%,第三列占50%;
  • repeat(2,100px):分两列,第一列100px,第二列100px;
  • repeat(auto-fill,100px)5+:按照每列100px的大小和交叉轴大小计算最大正整数重复次数,按照该重复次数布满交叉轴;
  • auto 1fr 1fr:分三列,第一列自适应内部子组件所需宽度,剩余空间分为两等份,第二列占一份,第三列占一份。

grid-[columns|rows]-gap

+

grid-[columns|rows]-gap

<length>

+

<length>

0

+

0

+

用于设置行与行的间距或者列与列的间距,也可以支持通过grid-gap设置相同的行列间距,仅当display为grid时生效。

+

用于设置行与行的间距或者列与列的间距,也可以支持通过grid-gap设置相同的行列间距,仅当display为grid时生效。

grid-row-[start|end]

+

grid-row-[start|end]

number

+

number

-

+

-

+

用于设置当前元素在网格布局中的起止行号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

+

用于设置当前元素在网格布局中的起止行号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

grid-column-[start|end]

+

grid-column-[start|end]

number

+

number

-

+

-

+

用于设置当前元素在网格布局中的起止列号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

+

用于设置当前元素在网格布局中的起止列号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

grid-auto-flow5+

+

grid-auto-flow5+

string

+

string

-

+

-

+

使用框架自动布局算法进行网格的布局,可选值为:

-
  • row:逐行填充元素,如果行空间不够,则新增行;
  • column:逐列填充元素,如果列空间不够,则新增列。
+

使用框架自动布局算法进行网格的布局,可选值为:

+
  • row:逐行填充元素,如果行空间不够,则新增行;
  • column:逐列填充元素,如果列空间不够,则新增列。

overflow6+

+

overflow6+

string

+

string

visible

+

visible

+

设置元素内容区超过元素本身大小时的表现形式。

-
  • visible:多个子元素内容超过元素大小时,显示在元素外面;
  • hidden:元素内容超过元素大小时,进行裁切显示;
  • scroll:元素内容超过元素大小时,进行滚动显示并展示滚动条(当前只支持纵向)。
-
说明:
  • overflow: scroll样式需要元素设置固定的大小。
+

设置元素内容区超过元素本身大小时的表现形式。

+
  • visible:多个子元素内容超过元素大小时,显示在元素外面;
  • hidden:元素内容超过元素大小时,进行裁切显示;
  • scroll:元素内容超过元素大小时,进行滚动显示并展示滚动条(当前只支持纵向)。
+
说明:
  • overflow: scroll样式需要元素设置固定的大小。

align-items6+

+

align-items6+

string

+

string

-

+

-

+

设置容器中元素交叉轴上的对齐方式:

-
  • stretch:Flex容器内容在交叉轴方向被拉伸到与容器相同的高度或宽度;
  • flex-start:Flex布局容器内元素向交叉轴起点对齐;
  • flex-end:Flex布局容器内元素向交叉轴终点对齐;
  • center:Flex布局容器内元素在交叉轴居中对齐;
  • baseline:如Flex布局纵向排列,则该值与'flex-start'等效。横向布局时,内容元素存在文本时按照文本基线对齐,否则底部对齐。
+

设置容器中元素交叉轴上的对齐方式:

+
  • stretch:Flex容器内容在交叉轴方向被拉伸到与容器相同的高度或宽度;
  • flex-start:Flex布局容器内元素向交叉轴起点对齐;
  • flex-end:Flex布局容器内元素向交叉轴终点对齐;
  • center:Flex布局容器内元素在交叉轴居中对齐;
  • baseline:如Flex布局纵向排列,则该值与'flex-start'等效。横向布局时,内容元素存在文本时按照文本基线对齐,否则底部对齐。

scrollbar-color6+

+

scrollbar-color6+

<color>

+

<color>

-

+

-

+

设置滚动条的颜色。

+

设置滚动条的颜色。

scrollbar-width6+

+

scrollbar-width6+

<length>

+

<length>

-

+

-

+

设置滚动条的宽度。

+

设置滚动条的宽度。

overscroll-effect6+

+

overscroll-effect6+

string

+

string

-

+

-

+

设置滚动边缘效果,可选值为:

-
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹;
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化;
  • none:滑动到边缘后无效果
+

设置滚动边缘效果,可选值为:

+
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹;
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化;
  • none:滑动到边缘后无效果

名称

+ - - - - - - - - - - - - - - @@ -283,38 +281,37 @@ date: 2021-12-30 18:31:37 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

参数

+

参数

描述

+

描述

reachstart6+

+

reachstart6+

-

+

-

当页面滑动到最开始的点时触发的事件回调,当flex-direction: row时才会触发。

+

当页面滑动到最开始的点时触发的事件回调,当flex-direction: row时才会触发。

reachend6+

+

reachend6+

-

+

-

当页面滑动到最末尾的点时触发的事件回调,当flex-direction: row时才会触发。

+

当页面滑动到最末尾的点时触发的事件回调,当flex-direction: row时才会触发。

reachtop6+

+

reachtop6+

-

+

-

当页面滑动到最上部的点时触发的事件回调,当flex-direction: column时才会触发。

+

当页面滑动到最上部的点时触发的事件回调,当flex-direction: column时才会触发。

reachbottom6+

+

reachbottom6+

-

+

-

当页面滑动到最下部的点时触发的事件回调,当flex-direction: column时才会触发。

+

当页面滑动到最下部的点时触发的事件回调,当flex-direction: column时才会触发。

名称

+ - - - - - - - - - - - @@ -324,26 +321,26 @@ date: 2021-12-30 18:31:37 **表 1** ScrollOffset6+ -

名称

参数

+

参数

返回值

+

返回值

描述

+

描述

getScrollOffset6+

+

getScrollOffset6+

-

+

-

ScrollOffset

+

ScrollOffset

获取元素内容的滚动偏移。

-
说明:
  • 需要设置overflow样式为scroll。
+

获取元素内容的滚动偏移。

+
说明:
  • 需要设置overflow样式为scroll。

scrollBy6+

+

scrollBy6+

ScrollParam

+

ScrollParam

-

+

-

指定元素内容的滚动偏移。

-
说明:
  • 需要设置overflow样式为scroll。
+

指定元素内容的滚动偏移。

+
说明:
  • 需要设置overflow样式为scroll。

名称

+ - - - - - - - - @@ -352,33 +349,33 @@ date: 2021-12-30 18:31:37 **表 2** ScrollParam6+ -

名称

类型

+

类型

描述

+

描述

x

+

x

number

+

number

在x轴方向的偏移,单位为px。

+

在x轴方向的偏移,单位为px。

y

+

y

number

+

number

在y轴方向的偏移,单位为px。

+

在y轴方向的偏移,单位为px。

名称

+ - - - - - - - - - - - @@ -583,8 +580,8 @@ date: 2021-12-30 18:31:37 }) }, drag(e){ - this.left = e.dragevent.globalX; - this.top = e.dragevent.globalY; + this.left = e.globalX; + this.top = e.globalY; }, dragend(e){ prompt.showToast({ @@ -631,8 +628,8 @@ date: 2021-12-30 18:31:37 top:0, }, drag(e){ - this.left = e.dragevent.globalX; - this.top = e.dragevent.globalY; + this.left = e.globalX; + this.top = e.globalY; }, dragenter(e){ prompt.showToast({ diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" index 075eddc699d58f6e27d5b202aab8e3624b23079c..4ebc72fb5edde6114535d77d33d61eb14f7be6ed 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/04.form.md" @@ -1,6 +1,6 @@ --- title: form -permalink: /pages/000b0100010103 +permalink: /pages/010c0201010204 navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # form 表单容器,支持容器内input元素的内容提交和重置。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从 API Version 6 开始支持。 - ## 权限列表 无 @@ -28,37 +25,36 @@ date: 2021-12-30 18:31:37 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -支持[组件通用样式](/pages/000b0100010001)。 +支持[组件通用样式](/pages/010c0201010102)。 ## 事件 -处支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +处支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

描述

+

描述

dx

+

dx

number

+

number

水平方向滑动的偏移量,单位px。

+

水平方向滑动的偏移量,单位px。

dy

+

dy

number

+

number

垂直方向滑动的偏移量,单位px。

+

垂直方向滑动的偏移量,单位px。

smooth

+

smooth

boolean

+

boolean

是否平滑处理。

+

是否平滑处理。

名称

+ - - - - - - - - @@ -67,19 +63,19 @@ date: 2021-12-30 18:31:37 **表 1** FormResult -

名称

参数

+

参数

描述

+

描述

submit

+

submit

FormResult

+

FormResult

点击提交按钮,进行表单提交时,触发该事件。

+

点击提交按钮,进行表单提交时,触发该事件。

reset

+

reset

-

+

-

点击重置按钮后,触发该事件。

+

点击重置按钮后,触发该事件。

名称

+ - - - - - @@ -87,21 +83,25 @@ date: 2021-12-30 18:31:37 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 ``` - - - - - 输入文本 +
+ + + + +
+ 输入文本 - Submit - Reset +
+ Submit + Reset +
``` @@ -118,3 +118,5 @@ export default{ } ``` +![](/images/application-dev/reference/arkui-js/figures/001.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" new file mode 100644 index 0000000000000000000000000000000000000000..16325c1ab670b260490674166ea92332021a78b6 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" @@ -0,0 +1,687 @@ +--- +title: list +permalink: /pages/010c0201010205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# list + +列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 + +## 权限列表 + +无 + +## 子组件 + +仅支持<[list-item-group](/pages/010c0201010207)\>和<[list-item](/pages/010c0201010206)\>。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

类型

+

类型

描述

+

描述

value

+

value

Object

+

Object

input元素的name和value的值。

+

input元素的name和value的值。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

scrollpage

+

boolean

+

false

+

+

设置为true时,将 list 顶部页面中非 list 部分随 list 一起滑出可视区域,当list方向为row时,不支持此属性。

+

cachedcount

+

number

+

0

+

+

长列表延迟加载时list-item最少缓存数量。

+

可视区域外缓存的list-item数量少于该值时,会触发requestitem事件。

+

scrollbar

+

string

+

off

+

+

侧边滑动栏的显示模式(当前只支持纵向):

+
  • off:不显示。
  • auto:按需显示(触摸时显示,2s后消失)。
  • on:常驻显示。
+

scrolleffect

+

string

+

spring

+

+

滑动效果,目前支持如下滑动效果:

+
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化。
  • no:滑动到边缘后无效果。
+

indexer

+

boolean | Array<string>

+

false

+

+

是否展示侧边栏快速字母索引栏。设置为true或者自定义索引时,索引栏会显示在列表右边界处。示例:

+

"indexer" : "true"表示使用默认字母索引表。

+

"indexer" : "false"表示无索引。

+

"indexer" : ['#',‘1’,'2',‘3’,'4',‘5’,'6',‘7’,'8']表示自定义索引表。自定义时"#"必须要存在。

+
说明:
  • indexer属性生效需要flex-direction属性配合设置为column,且columns属性设置为1。
  • 点击索引条进行列表项索引需要list-item子组件配合设置相应的section属性
+
+

indexercircle5+

+

boolean

+

-

+

+

是否为环形索引。

+

穿戴设备默认为true,其他为false。indexer为false时不生效。

+

indexermulti5+

+

boolean

+

false

+

+

是否开启索引条多语言功能。

+

indexer为false时不生效。

+

indexerbubble5+

+

boolean

+

true

+

+

是否开启索引切换的气泡提示。

+

indexer为false时不生效。

+

divider5+

+

boolean

+

false

+

+

item是否自带分隔线。

+

其样式参考样式列表的divider-color、divider-height、divider-length、divider-origin。

+

shapemode

+

string

+

default

+

+

侧边滑动栏的形状类型。

+
  • default:不指定,跟随主题;
  • rect:矩形;
  • round:圆形。
+

updateeffect

+

boolean

+

false

+

+

用于设置当list内部的item发生删除或新增时是否支持动效。

+
  • false:新增删除item时无过渡动效。
  • true:新增删除item时播放过程动效。
+

chainanimation5+

+

boolean

+

false

+

+

用于设置当前list是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。链式联动效果:list内的list-item间隔一定距离,在基本的滑动交互行为下,主动对象驱动从动对象进行联动,驱动效果遵循弹簧物理动效。

+
  • false:不启用链式联动
  • true:启用链式联动
    说明:
    • 不支持动态修改。
    • 如同时配置了indexer,链式动效不生效。
    • 如配置了链式动效,list-item的sticky不生效。
    +
    +
+

initialindex

+

number

+

0

+

+

用于设置当前List初次加载时视口起始位置显示的item,默认为0,即显示第一个item,如设置的序号超过了最后一个item的序号,则设置不生效,当同时设置了initialoffset属性时,当前属性不生效。当indexer为true或者scrollpage为true时,不生效。

+

initialoffset

+

<length>

+

0

+

+

用于设置当前List初次加载时视口的起始偏移量,偏移量无法超过当前List可滑动的范围,如果超过会被截断为可滑动范围的极限值。当indexer为true或者scrollpage为true时,不生效。

+

selected5+

+

string

+

-

+

+

指定当前列表中被选中激活的项,可选值为list-item的section属性值。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

divider-color5+

+

<color>

+

transparent

+

+

item分隔线颜色,仅当list的divider属性为true时生效。

+

divider-height5+

+

<length>

+

1

+

+

item分隔线高度,仅当list的divider属性为true时生效。

+

divider-length5+

+

<length>

+

主轴宽度

+

+

item分隔线长度,不设置时最大长度为主轴宽度,具体长度取决于divider-origin,仅当list的divider属性为true时生效。

+

divider-origin5+

+

<length>

+

0

+

+

item分隔线相对于item主轴起点位置的偏移量,仅当list的divider属性为true时生效。

+

flex-direction

+

string

+

+

column

+

+

设置flex容器主轴的方向,指定flex项如何放置在flex容器中,可选值为:

+
  • column:主轴为纵向。
  • row:主轴为横向。
+

其他组件默认值为row,在list组件中默认值为column。

+

columns

+

number

+

1

+

+

list交叉轴方向的显示列数,默认为1列。

+
说明:

设置多列时,在list交叉轴上进行均分,每一列大小相同。

+
+

align-items

+

string

+

stretch

+

+

list每一列交叉轴上的对齐格式,可选值为:

+
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
    说明:

    align-items样式作用在每一列的子元素上,列与列之间采用均分方式布局。

    +
    +
+

item-extent

+

<length> | <percentage>

+

-

+

+

设置内部item为固定大小,设置为百分比格式时,指相对于list的视口主轴方向长度的百分比。

+

fade-color

+

<color>

+

grey

+

+

设置渐隐物理动效的颜色。当滑动效果设置为渐隐物理动效时生效。

+

scrollbar-color6+

+

<color>

+

-

+

+

设置滚动条的颜色。

+

scrollbar-width6+

+

<length>

+

-

+

+

设置滚动条的宽度。

+

scrollbar-offset6+

+

<length>

+

0

+

+

设置滚动条距离List默认位置的偏移量,只支持正数,默认位置在List右边缘,可以通过这个偏移量调整滚动条的水平位置,如果滚动条绘制在list外部,而list父组件有裁剪,会导致滚动条被裁剪。

+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

indexerchange5+

+

{ local: booleanValue }

+

多语言索引条切换事件,仅当indexer属性为true,indexermulti为true时生效。booleanValue可能值为true或者false:

+
  • true: 当前展示本地索引。
  • false: 当前展示字母索引。
+

scroll

+

{ scrollX: scrollXValue, scrollY: scrollYValue, scrollState: stateValue }

+

列表滑动的偏移量和状态回调。

+

stateValue: 0表示列表滑动已经停止。

+

stateValue: 1表示列表正在用户触摸状态下滑动。

+

stateValue: 2表示列表正在用户松手状态下滑动。

+

scrollbottom

+

-

+

当前列表已滑动到底部位置。

+

scrolltop

+

-

+

当前列表已滑动到顶部位置。

+

scrollend

+

-

+

列表滑动已经结束。

+

scrolltouchup

+

-

+

手指已经抬起且列表仍在惯性滑动。

+

requestitem

+

-

+

请求创建新的list-item。

+

长列表延迟加载时,可视区域外缓存的list-item数量少于cachedcount时,会触发该事件。

+

rotate7+

+

{ rotateValue: number }

+

返回表冠旋转角度增量值,仅智能穿戴支持。

+
+ +## 方法 + +支持[通用方法](/pages/010c0201010104)外,还支持如下方法: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

scrollTo

+

{ index: number(指定位置) }

+

list滑动到指定index的item位置。

+

scrollBy

+

ScrollParam

+

触发list滑动一段距离。

+

智慧屏特有方法。

+

scrollTop

+

{ smooth: boolean }

+

smooth缺省为false,表示直接滚动到顶部。

+

smooth为true,表示平滑滚动到顶部。

+

scrollBottom

+

{ smooth: boolean }

+

smooth缺省为false,表示直接滚动到底部。

+

smooth为true,表示平滑滚动到底部。

+

scrollPage

+

{ reverse: boolean, smooth: boolean }

+

reverse缺省值为false,表示下一页,无完整页则滚动到底部。

+

reverse为true,表示上一页,无完整页则滚动到顶部。

+

smooth缺省值为false,表示直接滚动一页。

+

smooth为true,表示平滑滚动一页。

+

scrollArrow

+

{ reverse: boolean, smooth: boolean }

+

reverse缺省值为false,表示向底部方向滑动一段距离,无足够距离则滚动到底部。

+

reverse为true,表示向顶部方向滑动一段距离,无足够距离则滚动到顶部。

+

smooth缺省值为false,表示直接滚动。

+

smooth为true,表示平滑滚动。

+

collapseGroup

+

{ groupid: string }

+

收拢指定的group。

+

groupid:需要收拢的group的id。

+

当groupid未指定时收拢所有的group。

+

expandGroup

+

{ groupid: string }

+

展开指定的group。

+

groupid:需要展开的group的id。

+

当groupid未指定时展开所有的group。

+

currentOffset

+

-

+

返回当前滑动的偏移量。返回值类型是Object,返回值说明请见表2

+
+ +**表 1** ScrollParam + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

是否必选

+

默认值

+

备注

+

dx

+

number

+

+

0

+

水平方向滑动的偏移量,单位为px。

+

dy

+

number

+

+

0

+

垂直方向滑动的偏移量,单位为px。

+

smooth

+

boolean

+

+

true

+

列表位置跳转时是否有滑动动画。

+
+ +**表 2** currentOffset返回对象属性说明 + + + + + + + + + + + + + + + + +

名称

+

类型

+

备注

+

x

+

number

+

当前x轴滑动偏移量,单位为px。

+

y

+

number

+

当前y轴滑动偏移量,单位为px。

+
+## 示例 + +``` +!-- index.hml --> +
+ + +
+ {{$item.title}} + {{$item.date}} +
+
+
+``` + +``` +// index.js +export default { + data: { + todolist: [{ + title: '刷题', + date: '2021-12-31 10:00:00', + }, { + title: '看电影', + date: '2021-12-31 20:00:00', + }], + }, +} +``` + +``` +/* index.css */ +.container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} +.todo-wrapper { + width: 100%; + height: 300px; +} +.todo-item { + width: 100%; + height: 120px; + justify-content:center; +} +.todo-title { + width: 100%; + height: 80px; + text-align: center; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/list.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" new file mode 100644 index 0000000000000000000000000000000000000000..1e5d2758a833b54f2decc00a2f34b650c9a24bbe --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" @@ -0,0 +1,164 @@ +--- +title: list-item +permalink: /pages/010c0201010206 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# list-item + +<[list](/pages/010c0201010205)\>的子组件,用来展示列表具体item。由于父元素list组件的align-items默认样式为stretch,该组件宽度默认充满list组件。设置父元素list组件的align-items样式为非stretch来生效自定义宽度。 + +## 权限列表 + +无 + +## 子组件 + +支持单个子组件。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

type

+

string

+

default

+

+

list-item类型,默认值为default,同一list中可以包含多种type的list-item,相同type的list-item需要确保渲染后的视图布局也相同,如果type固定,则使用show属性代替if属性,确保视图布局不变。

+

primary

+

boolean

+

false

+

+

设置为true表示该item是group中的主item,即收拢时显示的item。如果有多个primary,以第一个为准。如果没有标记为primary的item,则以第一个item为主item。

+

section

+

string

+

-

+

+

当前item的匹配字符串,如不设置则为空。不支持动态修改。group内只有主item设置有效。

+

sticky

+

string

+

none

+

+

设置当前item是否为吸顶item以及其吸顶消失的效果,当前仅支持纵向list,group内部的item不可吸顶,设置该属性无效。

+
  • none:当前item不吸顶。
  • normal:当前item吸顶,消失效果滑动消失。
  • opacity:当前item吸顶,消失效果渐隐消失,仅在智能穿戴上支持。
+

clickeffect5+

+

boolean

+

true

+

+

设置当前item是否有点击动效。

+
  • false:item点击时无点击动效。
  • true:item点击时有点击动效。
+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

column-span

+

<number>

+

1

+

+

当前的list-item需要在list中占据的列的数量,默认占一列,仅在list为多列时生效。

+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + +

名称

+

参数

+

描述

+

sticky

+

{ state: boolean }

+

吸顶组件回调事件。

+

value: false表示当前item处于非吸顶状态;

+

value: true表示当前item处于吸顶状态;

+

说明:仅当item设置sticky属性时支持注册此事件。

+
+ +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +详见[List示例](/pages/010c0201010205#示例)。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" index b9192b1de719f961cb953c5e3801583d3258a8f8..8f3cbfa1bc810e3f734d40000346d0e6c4542de5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/07.list-item-group.md" @@ -1,6 +1,6 @@ --- title: list-item-group -permalink: /pages/000b0100010106 +permalink: /pages/010c0201010207 navbar: true sidebar: true prev: true @@ -9,15 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # list-item-group -<[list](/pages/000b0100010104)\>的子组件,用来展示分组,宽度默认充满list组件。 +<[list](/pages/010c0201010205)\>的子组件,用来展示分组,宽度默认充满list组件。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 使用该组件时父元素list组件的样式columns必须为1,否则功能异常。 ->- 由于父元素list组件的align-items默认样式为stretch,该组件宽度默认充满list组件。设置父元素list组件的align-items样式为非stretch来生效自定义宽度。 +- 使用该组件时父元素list组件的样式columns必须为1,否则功能异常。 +- 由于父元素list组件的align-items默认样式为stretch,该组件宽度默认充满list组件。设置父元素list组件的align-items样式为非stretch来生效自定义宽度。 ## 权限列表 @@ -25,34 +24,33 @@ date: 2021-12-30 18:31:37 ## 子组件 -仅支持<[list-item](/pages/000b0100010105)\>。 +仅支持<[list-item](/pages/010c0201010206)\>。 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - @@ -63,43 +61,42 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

string

+

string

default

+

default

+

list-item-group类型,同一list支持多种type的list-item-group,相同type的list-item-group需要确保渲染后的视图布局也完全相同,当type固定时,使用show属性代替if属性,确保视图布局不变。

+

list-item-group类型,同一list支持多种type的list-item-group,相同type的list-item-group需要确保渲染后的视图布局也完全相同,当type固定时,使用show属性代替if属性,确保视图布局不变。

名称

+ - - - - - - - - - - - - - - @@ -107,41 +104,40 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

flex-direction

+

flex-direction

string

+

string

row

+

row

+

flex容器主轴方向。可选项有:

-
  • column:垂直方向从上到下
  • row:水平方向从左到右
+

flex容器主轴方向。可选项有:

+
  • column:垂直方向从上到下
  • row:水平方向从左到右

justify-content

+

justify-content

string

+

string

flex-start

+

flex-start

+

flex容器当前行的主轴对齐格式。可选项有:

-
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
  • space-evenly5+: 均匀排列每个元素,每个元素之间的间隔相等。
+

flex容器当前行的主轴对齐格式。可选项有:

+
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
  • space-evenly5+: 均匀排列每个元素,每个元素之间的间隔相等。

名称

+ - - - - - - - - - - - @@ -149,7 +145,7 @@ date: 2021-12-30 18:31:37 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" new file mode 100644 index 0000000000000000000000000000000000000000..e905560cb82ff67226fb2176b0abacb91d92f8fb --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" @@ -0,0 +1,546 @@ +--- +title: panel +permalink: /pages/010c0201010208 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# panel + +可滑动面板。提供一种轻量的内容展示的窗口,可方便的在不同尺寸中切换。属于弹出式组件。 + +## 子组件 + +支持 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

参数

+

参数

描述

+

描述

groupclick

+

groupclick

{ groupid: string }

+

{ groupid: string }

group点击事件。

-

groupid:被点击的group的id。

+

group点击事件。

+

groupid:被点击的group的id。

groupcollapse

+

groupcollapse

{ groupid: string }

+

{ groupid: string }

group收拢事件。

-

groupid:收拢的group的id。

-

当不输入参数或者groupid为空时收拢所有分组。

+

group收拢事件。

+

groupid:收拢的group的id。

+

当不输入参数或者groupid为空时收拢所有分组。

groupexpand

+

groupexpand

{ groupid: string }

+

{ groupid: string }

group展开事件。

-

groupid:展开的group的id。

-

当不输入参数或者groupid为空时展开所有分组。

+

group展开事件。

+

groupid:展开的group的id。

+

当不输入参数或者groupid为空时展开所有分组。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

type

+

string

+

foldable

+

+

设置可滑动面板类型,不可动态变更,可选值有:

+
  • minibar:提供minibar和类全屏展示切换效果。

    +
  • foldable:内容永久展示类,提供大(类全屏)、中(类半屏)、小三种尺寸展示切换效果。

    +
  • temporary:内容临时展示区,提供大(类全屏)、中(类半屏)两种尺寸展示切换效果。

    +
+

mode

+

string

+

full

+

+

设置初始状态,mode参数可选值为:

+
  1. mini:类型为minibar和foldable时,为最小状态;类型为temporary,则不生效。

    +
  2. half: 类型为foldable和temporary时,为类半屏状态;类型为minibar,则不生效。

    +
  3. full: 类全屏状态。

    +
+

dragbar

+

boolean

+

true

+

+

设置是否存在dragbar,true表示存在,false表示不存在。

+

fullheight

+

<length>

+

-

+

+

指定full状态下的高度,默认为屏幕尺寸 - 8px。

+

halfheight

+

<length>

+

-

+

+

指定half状态下的高度,默认为屏幕尺寸的一半。

+

miniheight

+

<length>

+

-

+

+

指定mini状态下的高度,默认为48px。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 不支持渲染属性,包括for、if和show。 +>- 不支持focusable和disabled属性。 + +## 样式 + +仅支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

padding

+

<length>

+

0

+

+
该属性可以有1到4个值:
  • 指定一个值时,该值指定四个边的内边距。

    +
  • 指定两个值时,第一个值指定上下两边的内边距,第二个指定左右两边的内边距。

    +
  • 指定三个值时,第一个指定上边的内边距,第二个指定左右两边的内边距,第三个指定下边的内边距。

    +
  • 指定四个值时分别为上、右、下、左边的内边距(顺时针顺序)。

    +
+
+

padding-[left|top|right|bottom]

+

<length>

+

0

+

+

设置左、上、右、下内边距属性。

+

padding-[start|end]

+

<length>

+

0

+

+

设置起始和末端内边距属性。

+

margin

+

<length>

+

0

+

+

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

+
  • 只有一个值时,这个值会被指定给全部的四个边。

    +
  • 两个值时,第一个值被匹配给上和下,第二个值被匹配给左和右。

    +
  • 三个值时,第一个值被匹配给上, 第二个值被匹配给左和右,第三个值被匹配给下。

    +
  • 四个值时,会依次按上、右、下、左的顺序匹配 (即顺时针顺序)。

    +
+

margin-[left|top|right|bottom]

+

<length>

+

0

+

+

设置左、上、右、下外边距属性。

+

margin-[start|end]

+

<length>

+

0

+

+

设置起始和末端外边距属性。

+

border

+

-

+

0

+

+

使用简写属性设置所有的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置时,各属性值为默认值。

+

border-style

+

string

+

solid

+

+

使用简写属性设置所有边框的样式,可选值为:

+
  • dotted:显示为一系列圆点,圆点半径为border-width的一半。
  • dashed:显示为一系列短的方形虚线。
+
  • solid:显示为一条实线。
+

border-[left|top|right|bottom]-style

+

string

+

solid

+

+

分别设置左、上、右、下四个边框的样式,可选值为dotted、dashed、solid。

+

border-[left|top|right|bottom]

+

-

+

-

+

+

使用简写属性设置对应位置的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置的值为默认值。

+

border-width

+

<length>

+

0

+

+

使用简写属性设置元素的所有边框宽度,或者单独为各边边框设置宽度

+

border-[left|top|right|bottom]-width

+

<length>

+

0

+

+

分别设置左、上、右、下四个边框的宽度。

+

border-color

+

<color>

+

black

+

+

使用简写属性设置元素的所有边框颜色,或者单独为各边边框设置颜色

+

border-[left|top|right|bottom]-color

+

<color>

+

black

+

+

分别设置左、上、右、下四个边框的颜色。

+

border-radius

+

<length>

+

-

+

+

border-radius属性是设置元素的外边框圆角半径。设置border-radius时不能单独设置某一个方向的border-[left|top|right|bottom]-width,border-[left|top|right|bottom]-color ,如果要设置color和width,需要将四个方向一起设置(border-width、border-color)。

+

border-[top|bottom]-[left|right]-radius

+

<length>

+

-

+

+

分别设置左上,右上,右下和左下四个角的圆角半径。

+

background

+

<linear-gradient>

+

-

+

+

仅支持设置渐变样式,与background-color、background-image不兼容。

+

background-color

+

<color>

+

-

+

+

设置背景颜色。

+

background-image

+

string

+

-

+

+

设置背景图片。与background-color、background不兼容;支持本地图片资源地址。

+

background-size

+
  • string
  • <length> <length>
  • <percentage> <percentage>
+

auto

+

+

设置背景图片的大小。

+
  • string可选值:
    • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    +
  • length值参数方式:

    设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
  • 百分比参数方式:

    以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
+

background-repeat

+

string

+

repeat

+

+

针对重复背景图像样式进行设置,背景图像默认在水平和垂直方向上重复。

+
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
+

background-position

+
  • string string
  • <length> <length>
  • <percentage> <percentage>
+

0px 0px

+

+
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    +
+
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>
+

opacity

+

number

+

1

+

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

+
+ +## 事件 + +仅支持如下事件: + + + + + + + + + + + +

名称

+

参数

+

描述

+

sizechange

+

{ size: { height: heightLength, width: widthLength }, mode: modeStr }

+

当可滑动面板发生状态变化时触发,mode参数可选值为:

+
  1. mini:类型为minibar和foldable时,处于最小状态;

    +
  2. half: 类型为foldable时,处于类半屏状态;

    +
  3. full: 类全屏状态。

    +
    说明:

    返回的height值为内容区高度值,当dragbar属性为true时,panel本身的高度值为dragbar高度加上内容区高度。

    +
    +
+
+ +## 方法 + +仅支持如下方法: + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

show

+

-

+

弹出panel可滑动面板。

+

close

+

-

+

关闭panel可滑动面板。

+
+ +## 示例 + +``` + +
+
+ +
+ +
+
+ Simple panel in {{modeFlag}} mode +
+
+ +
+
+
+
+``` + +``` +/* xxx.css */ +.doc-page { + flex-direction: column; + justify-content: center; + align-items: center; +} +.btn-div { + width: 100%; + height: 200px; + flex-direction: column; + align-items: center; + justify-content: center; +} +.txt { + color: #000000; + font-weight: bold; + font-size: 39px; +} +.panel-div { + width: 100%; + flex-direction: column; + align-items: center; +} +.inner-txt { + width: 100%; + height: 160px; + flex-direction: column; + align-items: center; + justify-content: center; +} +.inner-btn { + width: 100%; + height: 120px; + justify-content: center; + align-items: center; +} +``` + +``` +// xxx.js +export default { + data: { + modeFlag: "half" + }, + showPanel() { + this.$element('simplepanel').show() + }, + closePanel() { + this.$element('simplepanel').close() + }, + changeMode(e) { + this.modeFlag = e.mode + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/panel6.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" index 9ce9a810475b821de60213067e4286ebaf51e6a9..45448ff379fdac5c36e6287f07555d886ca71dbf 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/09.popup.md" @@ -1,6 +1,6 @@ --- title: popup -permalink: /pages/000b0100010108 +permalink: /pages/010c0201010209 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # popup @@ -25,75 +25,74 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性:↵ +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性:↵ - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104,30 +103,29 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

target

+

target

string

+

string

-

+

-

+

目标元素的id属性值,不支持动态切换。

+

目标元素的id属性值,不支持动态切换。

placement

+

placement

string

+

string

bottom

+

bottom

+

弹出窗口位置。可选值为:

-
  • left:位于目标元素左边;
  • right:位于目标元素右边;
  • top:位于目标元素上边;
  • bottom:位于目标元素下边;
  • topLeft:位于目标元素左上角;
  • topRight:位于目标元素右上角;
  • bottomLeft:位于目标元素左下角;
  • bottomRight:位于目标元素右下角。
+

弹出窗口位置。可选值为:

+
  • left:位于目标元素左边;
  • right:位于目标元素右边;
  • top:位于目标元素上边;
  • bottom:位于目标元素下边;
  • topLeft:位于目标元素左上角;
  • topRight:位于目标元素右上角;
  • bottomLeft:位于目标元素左下角;
  • bottomRight:位于目标元素右下角。

keepalive5+

+

keepalive5+

boolean

+

boolean

false

+

false

+

设置当前popup是否需要保留。设置为true时,点击屏幕区域或者页面切换气泡不会消失,需调用气泡组件的hide方法才可让气泡消失;设置为false时,点击屏幕区域或者页面切换气泡会自动消失。

+

设置当前popup是否需要保留。设置为true时,点击屏幕区域或者页面切换气泡不会消失,需调用气泡组件的hide方法才可让气泡消失;设置为false时,点击屏幕区域或者页面切换气泡会自动消失。

clickable5+

+

clickable5+

boolean

+

boolean

true

+

true

+

popup是否使用点击弹窗,当设置为false时,只支持方法调用显示。

+

popup是否使用点击弹窗,当设置为false时,只支持方法调用显示。

arrowoffset5+

+

arrowoffset5+

<length>

+

<length>

0

+

0

+

popup箭头在弹窗处的偏移,默认居中,正值按照语言方向进行偏移,负值相反。

+

popup箭头在弹窗处的偏移,默认居中,正值按照语言方向进行偏移,负值相反。

名称

+ - - - - - - - - - @@ -138,22 +136,21 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

mask-color

+

mask-color

<color>

+

<color>

-

+

-

+

遮罩层的颜色,默认值为全透明。

+

遮罩层的颜色,默认值为全透明。

名称

+ - - - - - @@ -163,27 +160,26 @@ date: 2021-12-30 18:31:37 仅支持如下方法: - -

名称

参数

+

参数

描述

+

描述

visibilitychange

+

visibilitychange

{ visibility: boolean }

+

{ visibility: boolean }

当气泡弹出和消失时会触发该回调函数。

+

当气泡弹出和消失时会触发该回调函数。

名称

+ - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" index b2497a6734def1eb5bfb7f7a87b8b128f3613f73..b427658ac04c9b539af1a694063a3003937b167e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/10.refresh.md" @@ -1,6 +1,6 @@ --- title: refresh -permalink: /pages/000b0100010109 +permalink: /pages/010c020101020a navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # refresh @@ -25,87 +25,86 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

show5+

+

show5+

-

+

-

弹出气泡提示。

+

弹出气泡提示。

hide5+

+

hide5+

-

+

-

取消气泡提示。

+

取消气泡提示。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -114,41 +113,40 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

offset

+

offset

<length>

+

<length>

-

+

-

+

刷新组件静止时距离父组件顶部的距离。

+

刷新组件静止时距离父组件顶部的距离。

refreshing

+

refreshing

boolean

+

boolean

false

+

false

+

用于标识刷新组件当前是否正在刷新。

+

用于标识刷新组件当前是否正在刷新。

type

+

type

string

+

string

auto

+

auto

+

设置组件刷新时的动效。两个可选值,不支持动态修改。

-
  • auto: 默认效果,列表界面拉到顶后,列表不移动,下拉后有转圈弹出。
  • pulldown: 列表界面拉到顶后,可以继续往下滑动一段距离触发刷新,刷新完成后有回弹效果(如果子组件含有list,防止下拉效果冲突,需将list的scrolleffect设置为no)。
+

设置组件刷新时的动效。两个可选值,不支持动态修改。

+
  • auto: 默认效果,列表界面拉到顶后,列表不移动,下拉后有转圈弹出。
  • pulldown: 列表界面拉到顶后,可以继续往下滑动一段距离触发刷新,刷新完成后有回弹效果(如果子组件含有list,防止下拉效果冲突,需将list的scrolleffect设置为no)。

lasttime

+

lasttime

boolean

+

boolean

false

+

false

+

是否显示上次更新时间,字符串格式为:“上次更新时间:XXXX ”,XXXX 按照时间日期显示规范显示,不可动态修改(建议type为pulldown时使用,固定距离位于内容下拉区域底部,使用时注意offset属性设置,防止出现重叠)。

+

是否显示上次更新时间,字符串格式为:“上次更新时间:XXXX ”,XXXX 按照时间日期显示规范显示,不可动态修改(建议type为pulldown时使用,固定距离位于内容下拉区域底部,使用时注意offset属性设置,防止出现重叠)。

timeoffset6+

+

timeoffset6+

<length>

+

<length>

-

+

-

+

设置更新时间距离父组件顶部的距离。

+

设置更新时间距离父组件顶部的距离。

friction

+

friction

number

+

number

42

+

42

+

下拉摩擦系数,取值范围:0-100,数值越大refresh组件跟手性高,数值越小refresh跟手性低。

-
说明:

仅手机、平板和智能穿戴设备支持。

+

下拉摩擦系数,取值范围:0-100,数值越大refresh组件跟手性高,数值越小refresh跟手性低。

+
说明:

仅手机、平板和智能穿戴设备支持。

名称

+ - - - - - - - - - - - - - - @@ -158,29 +156,28 @@ date: 2021-12-30 18:31:37 仅支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

background-color

+

background-color

<color>

+

<color>

white

+

white

+

用于设置刷新组件的背景颜色。

+

用于设置刷新组件的背景颜色。

progress-color

+

progress-color

<color>

+

<color>

black

+

black

+

用于设置刷新组件的loading颜色。

+

用于设置刷新组件的loading颜色。

名称

+ - - - - - - - - @@ -188,7 +185,7 @@ date: 2021-12-30 18:31:37 ## 方法 -不支持[通用方法](/pages/000b0100010003)。 +不支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" index e25afd9573bdbb787ad11f819c2c993f0db9d549..d10b25e0bd2f4cd13b3c5a6d21420026174b3b5f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/11.stack.md" @@ -1,6 +1,6 @@ --- title: stack -permalink: /pages/000b010001010a +permalink: /pages/010c020101020b navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # stack @@ -25,19 +25,19 @@ date: 2021-12-30 18:31:37 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" index 74c3c48a66caa1c96ca3145cec98afeb344d6884..271e578227411ee820937daef593afbe11169dda 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/12.stepper.md" @@ -1,6 +1,6 @@ --- title: stepper -permalink: /pages/000b010001010b +permalink: /pages/010c020101020c navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # stepper 步骤导航器。当完成一个任务需要多个步骤时,可以使用步骤导航器展示当前进展。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 权限列表 无 @@ -31,26 +28,25 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

refresh

+

refresh

{ refreshing: refreshingValue }

+

{ refreshing: refreshingValue }

下拉刷新状态变化时触发。可能值:

-
  • false:当前处于下拉刷新过程中。
  • true:当前未处于下拉刷新过程中。
+

下拉刷新状态变化时触发。可能值:

+
  • false:当前处于下拉刷新过程中。
  • true:当前未处于下拉刷新过程中。

pulldown

+

pulldown

{ state: string }

+

{ state: string }

下拉开始和松手时触发。可能值:

-
  • start:表示开始下拉。
  • end:表示结束下拉。
+

下拉开始和松手时触发。可能值:

+
  • start:表示开始下拉。
  • end:表示结束下拉。

名称

+ - - - - - - - @@ -58,57 +54,56 @@ date: 2021-12-30 18:31:37 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** >stepper组件默认占满父容器大小,建议父组件使用应用窗口大小(或者父组件为根节点)来优化体验。 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

index

+

index

number

+

number

-

+

-

设置步骤导航器步骤显示第几个stepper-item子组件。

+

设置步骤导航器步骤显示第几个stepper-item子组件。

名称

+ - - - - - - - - - - - - - - - - - @@ -116,23 +111,22 @@ date: 2021-12-30 18:31:37 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,支持如下方法: - -

名称

参数

+

参数

描述

+

描述

finish

+

finish

+

当步骤导航器最后一个步骤完成时触发该事件。

+

当步骤导航器最后一个步骤完成时触发该事件。

skip

+

skip

+

当通过setNextButtonStatus方法设置当前步骤导航器可跳过时,点击右侧跳过按钮触发该事件。

+

当通过setNextButtonStatus方法设置当前步骤导航器可跳过时,点击右侧跳过按钮触发该事件。

change

+

change

{ prevIndex:prevIndex, index: index}

+

{ prevIndex:prevIndex, index: index}

当步骤导航器点击左边或者右边文本按钮进行步骤切换时触发该事件,prevIndex表示老步骤的序号,index表示新步骤的序号。

+

当步骤导航器点击左边或者右边文本按钮进行步骤切换时触发该事件,prevIndex表示老步骤的序号,index表示新步骤的序号。

next

+

next

{ index:index, pendingIndex: pendingIndex }

+

{ index:index, pendingIndex: pendingIndex }

当用户点击下一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改下一个步骤使用哪个stepper-item子组件。

+

当用户点击下一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改下一个步骤使用哪个stepper-item子组件。

back

+

back

{ index:index, pendingIndex: pendingIndex }

+

{ index:index, pendingIndex: pendingIndex }

当用户点击上一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为Object:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改上一个步骤使用哪个stepper-item子组件。

+

当用户点击上一步按钮时触发该事件,index表示当前步骤序号,pendingIndex表示将于跳转的序号,该事件有返回值,返回值格式为Object:{ pendingIndex:pendingIndex },可以通过指定pendingIndex来修改上一个步骤使用哪个stepper-item子组件。

名称

+ - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" new file mode 100644 index 0000000000000000000000000000000000000000..63ffe1f1a2457728940f5da885b2a09903169e50 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" @@ -0,0 +1,240 @@ +--- +title: stepper-item +permalink: /pages/010c020101020d +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:51 +--- +# stepper-item + +步骤导航器子组件,作为步骤导航器某一个步骤的内容展示组件。 + +## 权限列表 + +无 + +## 子组件 + +支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

参数

+

参数

描述

+

描述

setNextButtonStatus

+

setNextButtonStatus

{ status: string, label: label }

+

{ status: string, label: label }

设置当前步骤导航器下一步文本按钮的状态,参数中status类型为string,可选值为:

-
  1. normal:正常状态,下一步文本按钮正常显示,可点击进入下一个步骤;
  2. disabled:不可用状态,下一步文本按钮灰度显示,不可点击进入下一个步骤;
  3. waiting:等待状态,下一步文本按钮不显示,使用等待进度条,不可点击进入下一个步骤。
  4. skip:跳过状态,下一步文本按钮显示跳过按钮,点击时会跳过剩下步骤。
+

设置当前步骤导航器下一步文本按钮的状态,参数中status类型为string,可选值为:

+
  1. normal:正常状态,下一步文本按钮正常显示,可点击进入下一个步骤;
  2. disabled:不可用状态,下一步文本按钮灰度显示,不可点击进入下一个步骤;
  3. waiting:等待状态,下一步文本按钮不显示,使用等待进度条,不可点击进入下一个步骤。
  4. skip:跳过状态,下一步文本按钮显示跳过按钮,点击时会跳过剩下步骤。
+ + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

label

+

Label

+

-

+

+

自定义步骤导航器底部步骤提示文本按钮属性,不支持动态修改。如果没有定义该属性,步骤导航器在中文语言环境下,使用“返回”和“下一步”文本按钮,在非中文语言环境下,使用“BACK”和“NEXT”文本按钮。针对第一个步骤,没有回退文本按钮,针对最后一个步骤,下一步文本按钮文本使用“开始”(中文语言)或者“START”(非中文语言)。

+
+ +**表 1** Label对象定义 + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

prevLabel

+

string

+

-

+

步骤导航器底部回退文本按钮的描述文本。

+

nextLabel

+

string

+

-

+

步骤导航器底部下一步文本按钮的描述文本。

+

status

+

string

+

normal

+

步骤导航器当前步骤的初始状态,可选值为:

+
  • normal:正常状态,右侧文本按钮正常显示,可点击进入下一个步骤。
+
  • disabled:不可用状态,右侧文本按钮灰度显示,不可点击进入下一个步骤。
+
  • waiting:等待状态,右侧文本按钮不显示,使用等待进度条,不可点击进入下一个步骤。
+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

-

+

+

文本颜色。

+

font-size

+

<length>

+

-

+

+

文本大小。

+

allow-scale

+

boolean

+

true

+

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+

font-style

+

string

+

normal

+

+

文本字体样式,可选值为:

+
  • normal: 标准的字体样式;
  • italic: 斜体的字体样式。
+

font-weight

+

number|string

+

normal

+

+

文本字体粗细,number类型取值[100, 900]的整数(被100整除),默认为400,取值越大,字体越粗。string类型取值为:lighter、normal、bold、bolder。

+

text-decoration

+

string

+

none

+

+

文本修饰,可选值为:

+
  • underline: 文本下划线修饰。
  • line-through: 穿过文本的修饰线。
  • none: 标准文本。
+

font-family

+

string

+

sans-serif

+

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 不支持长宽样式,宽和父容器stepper一样,高是父容器stepper减去底部导航按钮的高度。 +>- 不支持posit样式。 + +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

appear

+

-

+

当该步骤出现时触发。

+

disappear

+

-

+

当该步骤消失时触发。

+
+ +## 方法 + +不支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +详见[stepper示例](/pages/010c020101020c)。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" index 6a1618cdb1ccbb27c0370c8bb3b9c2dbd017ae4d..2eb6a876e7b8519c593a5d1452793d057853a2c9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/14.swiper.md" @@ -1,6 +1,6 @@ --- title: swiper -permalink: /pages/000b010001010d +permalink: /pages/010c020101020e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # swiper @@ -25,156 +25,142 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -184,85 +170,84 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

index

+

index

number

+

number

0

+

0

+

当前在容器中显示的子组件的索引值。

+

当前在容器中显示的子组件的索引值。

autoplay

+

autoplay

boolean

+

boolean

false

+

false

+

子组件是否自动播放,自动播放状态下,导航点不可操作5+

+

子组件是否自动播放,自动播放状态下,导航点不可操作5+

interval

+

interval

number

+

number

3000

+

3000

+

使用自动播放时播放的时间间隔,单位为ms。

+

使用自动播放时播放的时间间隔,单位为ms。

indicator

+

indicator

boolean

+

boolean

true

+

true

+

是否启用导航点指示器,默认true。

+

是否启用导航点指示器,默认true。

digital5+

+

digital5+

boolean

+

boolean

false

+

false

+

是否启用数字导航点,默认为false。

-
说明:

必须设置indicator时才能生效数字导航点。

+

是否启用数字导航点,默认为false。

+
说明:

必须设置indicator时才能生效数字导航点。

indicatormask

+

indicatordisabled5+

boolean

+

boolean

false

+

false

+

是否采用指示器蒙版,设置为true时,指示器会有渐变蒙版出现。

-
说明:

手机上不生效5+

-
-

indicatordisabled5+

-

boolean

-

false

-

-

指示器是否禁止用户手势操作,设置为true时,指示器不会响应用户的点击拖拽。

+

指示器是否禁止用户手势操作,设置为true时,指示器不会响应用户的点击拖拽。

loop

+

loop

boolean

+

boolean

true

+

true

+

是否开启循环滑动。

+

是否开启循环滑动。

duration

+

duration

number

+

number

-

+

-

+

子组件切换的动画时长。

+

子组件切换的动画时长。

vertical

+

vertical

boolean

+

boolean

false

+

false

+

是否为纵向滑动,纵向滑动时采用纵向的指示器。

+

是否为纵向滑动,纵向滑动时采用纵向的指示器。

cachedsize7+

+

cachedsize7+

number

+

number

-1

+

-1

+

swiper延迟加载时item最少缓存数量。-1表示全部缓存。

+

swiper延迟加载时item最少缓存数量。-1表示全部缓存。

scrolleffect7+

+

scrolleffect7+

string

+

string

spring

+

spring

+

滑动效果。目前支持如下:

-
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化
  • none:滑动到边缘后无效果。
    说明:

    该属性仅在loop属性为false时生效。

    +

滑动效果。目前支持如下:

+
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化
  • none:滑动到边缘后无效果。
    说明:

    该属性仅在loop属性为false时生效。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -270,36 +255,35 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

indicator-color

+

indicator-color

<color>

+

<color>

-

+

-

+

导航点指示器的填充颜色。

+

导航点指示器的填充颜色。

indicator-selected-color

+

indicator-selected-color

<color>

+

<color>

#ff007dff

+

#ff007dff

+

导航点指示器选中的颜色。

+

导航点指示器选中的颜色。

indicator-size

+

indicator-size

<length>

+

<length>

4px

+

4px

+

导航点指示器的直径大小。

+

导航点指示器的直径大小。

indicator-top|left|right|bottom

+

indicator-top|left|right|bottom

<length> | <percentage>

+

<length> | <percentage>

-

+

-

+

导航点指示器在swiper中的相对位置。

+

导航点指示器在swiper中的相对位置。

next-margin7+

+

next-margin7+

<length> | <percentage>

+

<length> | <percentage>

-

+

-

+

后边距,用于露出后一项的一小部分。

+

后边距,用于露出后一项的一小部分。

previous-margin7+

+

previous-margin7+

<length> | <percentage>

+

<length> | <percentage>

-

+

-

+

前边距,用于露出前一项的一小部分。

+

前边距,用于露出前一项的一小部分。

名称

+ - - - - - - - - - - - @@ -307,36 +291,35 @@ date: 2021-12-30 18:31:37 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

参数

+

参数

描述

+

描述

change

+

change

{ index: currentIndex }

+

{ index: currentIndex }

当前显示的组件索引变化时触发该事件。

+

当前显示的组件索引变化时触发该事件。

rotation

+

rotation

{ value: rotationValue }

+

{ value: rotationValue }

智能穿戴表冠旋转事件触发时的回调。

+

智能穿戴表冠旋转事件触发时的回调。

animationfinish7+

+

animationfinish7+

-

+

-

动画结束时触发该事件。

+

动画结束时触发该事件。

名称

+ - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" similarity index 41% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" index 858fdb8047a5d4ec0d7253ee3a558dbe7cc7a1c7..fb6686d5e5a41097b27ada96cf2bba6fb95f2a7b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/15.tabs.md" @@ -1,6 +1,6 @@ --- title: tabs -permalink: /pages/000b010001010e +permalink: /pages/010c020101020f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # tabs @@ -21,46 +21,45 @@ tab页签容器。 ## 子组件 -仅支持最多一个<[tab-bar](/pages/000b010001010f)\>和最多一个<[tab-content](/pages/000b0100010110)\>。 +仅支持最多一个<[tab-bar](/pages/010c0201010210)\>和最多一个<[tab-content](/pages/010c0201010211)\>。 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

swipeTo

+

swipeTo

{ index: number(指定位置) }

+

{ index: number(指定位置) }

切换到index位置的子组件。

+

切换到index位置的子组件。

showNext

+

showNext

+

显示下一个子组件。

+

显示下一个子组件。

showPrevious

+

showPrevious

+

显示上一个子组件。

+

显示上一个子组件。

名称

+ - - - - - - - - - - - - - - @@ -68,27 +67,26 @@ tab页签容器。 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

index

+

index

number

+

number

0

+

0

+

当前处于激活态的tab索引。

+

当前处于激活态的tab索引。

vertical

+

vertical

boolean

+

boolean

false

+

false

+

是否为纵向的tab,默认为false,可选值为:

-
  • false:tabbar和tabcontent上下排列。
  • true:tabbar和tabcontent左右排列。
+

是否为纵向的tab,默认为false,可选值为:

+
  • false:tabbar和tabcontent上下排列。
  • true:tabbar和tabcontent左右排列。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" index f0fdad0921fe84dbae20b9a89390b83308ae66af..a8760901443d24b3899d4864ffe6ca3e2521a289 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/16.tab-bar.md" @@ -1,6 +1,6 @@ --- title: tab-bar -permalink: /pages/000b010001010f +permalink: /pages/010c0201010210 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # tab-bar -<[tabs](/pages/000b010001010e)\>的子组件,用来展示tab的标签区,子组件排列方式为横向排列。 +<[tabs](/pages/010c020101020f)\>的子组件,用来展示tab的标签区,子组件排列方式为横向排列。 ## 权限列表 @@ -25,31 +25,30 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

change

+

change

{ index: indexValue }

+

{ index: indexValue }

tab页签切换后触发。

-
说明:

动态修改index值不会触发该回调。

+

tab页签切换后触发。

+
说明:

动态修改index值不会触发该回调。

名称

+ - - - - - - - - - @@ -57,17 +56,17 @@ date: 2021-12-30 18:31:37 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 -详见[tabs示例](/pages/000b010001010e#section14993155318710)。 +详见[tabs示例](/pages/010c020101020f#section14993155318710)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" index 0b22213ac379463d679b88e35d7f66b6b0237e57..fc538eb64a2a2630935b7e1499e055d1303a1d9e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/17.tab-content.md" @@ -1,6 +1,6 @@ --- title: tab-content -permalink: /pages/000b0100010110 +permalink: /pages/010c0201010211 navbar: true sidebar: true prev: true @@ -9,11 +9,11 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # tab-content -<[tabs](/pages/000b010001010e)\>的子组件,用来展示tab的内容区,高度默认充满tabs剩余空间,子组件排列方式为横向排列,当作为容器组件的子元素时在主轴方向需要设置tab-content的确定长度,否则无法显示。 +<[tabs](/pages/010c020101020f)\>的子组件,用来展示tab的内容区,高度默认充满tabs剩余空间,子组件排列方式为横向排列,当作为容器组件的子元素时在主轴方向需要设置tab-content的确定长度,否则无法显示。 ## 权限列表 @@ -25,30 +25,29 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

mode

+

mode

string

+

string

scrollable

+

scrollable

+

设置组件宽度的可延展性。可选值为:

-
  • scrollable:子组件宽度为实际设置的宽度,当宽度之和(包括margin边距)大于tab-bar的宽度时,子组件可以横向滑动。
  • fixed:子组件宽度均分tab-bar的宽度。
+

设置组件宽度的可延展性。可选值为:

+
  • scrollable:子组件宽度为实际设置的宽度,当宽度之和(包括margin边距)大于tab-bar的宽度时,子组件可以横向滑动。
  • fixed:子组件宽度均分tab-bar的宽度。

名称

+ - - - - - - - - - @@ -56,13 +55,13 @@ date: 2021-12-30 18:31:37 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 示例 -详见[tabs示例](/pages/000b010001010e#section14993155318710)。 +详见[tabs示例](/pages/010c020101020f#section14993155318710)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" index 8209aaca7c2da4297d6e53965e0f4b0503a7242f..8bddd122cc98d73ec31e938323068e6f90d25aed 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/01.button.md" @@ -1,6 +1,6 @@ --- title: button -permalink: /pages/000b0100010200 +permalink: /pages/010c0201010301 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # button @@ -21,76 +21,75 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

scrollable

+

scrollable

boolean

+

boolean

true

+

true

+

是否可以通过左右滑动进行页面切换。默认为true,设置为false后,页面的切换只能通过tab-bar的点击实现。

+

是否可以通过左右滑动进行页面切换。默认为true,设置为false后,页面的切换只能通过tab-bar的点击实现。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -98,126 +97,125 @@ date: 2021-12-30 18:31:37 ## 样式 -**type设置为非arc时:** +### type设置为非arc -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

string

+

string

-

+

-

+

不支持动态修改。如果该属性缺省,展示类胶囊型按钮,不同于胶囊类型,四边圆角可以通过border-radius分别指定,如果需要设置该属性,则可选值包括如下:

-
  • capsule:胶囊型按钮,带圆角按钮,有背景色和文本;
  • circle:圆形按钮,支持放置图标;
  • text:文本按钮,仅包含文本显示;
  • arc:弧形按钮,仅支持智能穿戴;
  • download:下载按钮,额外增加下载进度条功能,仅支持手机和智慧屏。
+

不支持动态修改。如果该属性缺省,展示类胶囊型按钮,不同于胶囊类型,四边圆角可以通过border-radius分别指定,如果需要设置该属性,则可选值包括如下:

+
  • capsule:胶囊型按钮,带圆角按钮,有背景色和文本;
  • circle:圆形按钮,支持放置图标;
  • text:文本按钮,仅包含文本显示;
  • arc:弧形按钮,仅支持智能穿戴;
  • download:下载按钮,额外增加下载进度条功能,仅支持手机和智慧屏。

value

+

value

string

+

string

-

+

-

+

button的文本值。

+

button的文本值。

icon

+

icon

string

+

string

-

+

-

+

button的图标路径,图标格式为jpg,png和svg。

+

button的图标路径,图标格式为jpg,png和svg。

placement5+

+

placement5+

string

+

string

end

+

end

+

仅在type属性为缺省时生效,设置图标位于文本的位置,可选值为:

-
  • start:图标位于文本起始处;
  • end:图标位于文本结束处;
  • top:图标位于文本上方;
  • bottom:图标位于文本下方。
+

仅在type属性为缺省时生效,设置图标位于文本的位置,可选值为:

+
  • start:图标位于文本起始处;
  • end:图标位于文本结束处;
  • top:图标位于文本上方;
  • bottom:图标位于文本下方。

waiting

+

waiting

boolean

+

boolean

false

+

false

+

waiting状态,waiting为true时展现等待中转圈效果,位于文本左侧。类型为download时不生效,不支持智能穿戴。

+

waiting状态,waiting为true时展现等待中转圈效果,位于文本左侧。类型为download时不生效,不支持智能穿戴。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -228,87 +226,86 @@ date: 2021-12-30 18:31:37 >- 圆形按钮(type=circle)时,不支持文本相关样式; >- 文本按钮(type=text)时,自适应文本大小,不支持尺寸设置(radius,width,height),背景透明不支持background-color样式。 -**type设置为arc时:** +### type设置为arc -除支持[通用样式](/pages/000b0100010001)中background-color、opacity、display、visibility、position、\[left|top|right|bottom外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)中background-color、opacity、display、visibility、position、\[left|top|right|bottom外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

text-color

+

text-color

<color>

+

<color>

#ff007dff

+

#ff007dff

+

按钮的文本颜色。

+

按钮的文本颜色。

font-size

+

font-size

<length>

+

<length>

16px

+

16px

+

按钮的文本尺寸。

+

按钮的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

font-style

+

font-style

string

+

string

normal

+

normal

+

按钮的字体样式。

+

按钮的字体样式。

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

按钮的字体粗细。见text组件font-weight的样式属性

+

按钮的字体粗细。见text组件font-weight的样式属性

font-family

+

font-family

<string>

+

<string>

sans-serif

+

sans-serif

+

按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

icon-width

+

icon-width

<length>

+

<length>

-

+

-

+

设置圆形按钮内部图标的宽,默认填满整个圆形按钮。

-
说明:

icon使用svg图源时必须设置该样式。

+

设置圆形按钮内部图标的宽,默认填满整个圆形按钮。

+
说明:

icon使用svg图源时必须设置该样式。

icon-height

+

icon-height

<length>

+

<length>

-

+

-

+

设置圆形按钮内部图标的高,默认填满整个圆形按钮。

-
说明:

icon使用svg图源时必须设置该样式。

+

设置圆形按钮内部图标的高,默认填满整个圆形按钮。

+
说明:

icon使用svg图源时必须设置该样式。

radius

+

radius

<length>

+

<length>

-

+

-

+

圆形按钮半径或者胶囊按钮圆角半径。在圆形按钮类型下该样式优先于通用样式的width和height样式。

+

按钮圆角半径。在圆形按钮类型下该样式优先于通用样式的width和height样式。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -316,29 +313,28 @@ date: 2021-12-30 18:31:37 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 类型为download时,支持如下方法: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

text-color

+

text-color

<color>

+

<color>

#de0000

+

#de0000

+

弧形按钮的文本颜色。

+

弧形按钮的文本颜色。

font-size

+

font-size

<length>

+

<length>

37.5px

+

37.5px

+

弧形按钮的文本尺寸。

+

弧形按钮的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

弧形按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+

弧形按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

font-style

+

font-style

string

+

string

normal

+

normal

+

弧形按钮的字体样式。

+

弧形按钮的字体样式。

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

弧形按钮的字体粗细。见text组件font-weight的样式属性

+

弧形按钮的字体粗细。见text组件font-weight的样式属性

font-family

+

font-family

<string>

+

<string>

sans-serif

+

sans-serif

+

按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" index ccb73c0add36856b4828112bf5d1768ff838084a..3bb4b42c631c2b4e8ed1edf1225f2e3716a41306 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/02.chart.md" @@ -1,6 +1,6 @@ --- title: chart -permalink: /pages/000b0100010201 +permalink: /pages/010c0201010302 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:51 --- # chart @@ -25,93 +25,92 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

setProgress

+

setProgress

{ progress:percent }

+

{ progress:percent }

设定下载按钮进度条进度,取值位于0-100区间内,当设置的值大于0时,下载按钮展现进度条。当设置的值大于等于100时,取消进度条显示。

-
说明:

浮在进度条上的文字通过value值进行变更。

+

设定下载按钮进度条进度,取值位于0-100区间内,当设置的值大于0时,下载按钮展现进度条。当设置的值大于等于100时,取消进度条显示。

+
说明:

浮在进度条上的文字通过value值进行变更。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -121,50 +120,50 @@ date: 2021-12-30 18:31:37 **表 1** ChartOptions -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

string

+

string

line

+

line

+

设置图表类型(不支持动态修改),可选项有:

-
  • bar:柱状图。
  • line:线形图。
  • gauge:量规图。
  • progress5+:进度类圆形图表。
  • loading5+:加载类圆形图表。
  • rainbow5+:占比类圆形图表。
+

设置图表类型(不支持动态修改),可选项有:

+
  • bar:柱状图。
  • line:线形图。
  • gauge:量规图。
  • progress5+:进度类圆形图表。
  • loading5+:加载类圆形图表。
  • rainbow5+:占比类圆形图表。

options

+

options

ChartOptions

+

ChartOptions

-

+

-

+

图表参数设置,柱状图和线形图必须设置参数设置,量规图不生效。可以设置x轴、y轴的最小值、最大值、刻度数、是否显示,线条宽度、是否平滑等。(不支持动态修改)

+

图表参数设置,柱状图和线形图必须设置参数设置,量规图不生效。可以设置x轴、y轴的最小值、最大值、刻度数、是否显示,线条宽度、是否平滑等。(不支持动态修改)

datasets

+

datasets

Array<ChartDataset>

+

Array<ChartDataset>

-

+

-

+

数据集合,柱状图和线形图必须设置数据集合,量规图不生效。可以设置多条数据集及其背景色。

+

数据集合,柱状图和线形图必须设置数据集合,量规图不生效。可以设置多条数据集及其背景色。

segments5+

+

segments5+

DataSegment | Array<DataSegment>

+

DataSegment | Array<DataSegment>

-

+

-

+

进度类、加载类和占比类圆形图表使用的数据结构。

-

DataSegment针对进度类和加载类圆形图表使用,

-

Array<DataSegment>针对占比类图标使用,DataSegment最多9个。

-
说明:

仅手机和平板设备支持。

+

进度类、加载类和占比类圆形图表使用的数据结构。

+

DataSegment针对进度类和加载类圆形图表使用,

+

Array<DataSegment>针对占比类图标使用,DataSegment最多9个。

+
说明:

仅手机和平板设备支持。

effects5+

+

effects5+

boolean

+

boolean

true

+

true

+

是否开启占比类、进度类圆形图表特效。

-
说明:

仅手机和平板设备支持。

+

是否开启占比类、进度类圆形图表特效。

+
说明:

仅手机和平板设备支持。

animationduration6+

+

animationduration6+

number

+

number

3000

+

3000

+

设置占比类圆形图表展开动画时长,单位为ms。

-
说明:

仅手机和平板设备支持。

+

设置占比类圆形图表展开动画时长,单位为ms。

+
说明:

仅手机和平板设备支持。

名称

+ - - - - - - - - - - - - - - - - - - - @@ -174,63 +173,63 @@ date: 2021-12-30 18:31:37 **表 2** ChartDataset -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

xAxis

+

xAxis

ChartAxis

+

ChartAxis

-

+

-

+

x轴参数设置。可以设置x轴最小值、最大值、刻度数以及是否显示。

+

x轴参数设置。可以设置x轴最小值、最大值、刻度数以及是否显示。

yAxis

+

yAxis

ChartAxis

+

ChartAxis

-

+

-

+

y轴参数设置。可以设置y轴最小值、最大值、刻度数以及是否显示。

+

y轴参数设置。可以设置y轴最小值、最大值、刻度数以及是否显示。

series

+

series

ChartSeries

+

ChartSeries

-

+

-

+

数据序列参数设置。可以设置1)线的样式,如线宽、是否平滑;2)设置线最前端位置白点的样式和大小。

-
说明:

仅线形图支持。

+

数据序列参数设置。可以设置1)线的样式,如线宽、是否平滑;2)设置线最前端位置白点的样式和大小。

+
说明:

仅线形图支持。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -240,78 +239,78 @@ date: 2021-12-30 18:31:37 **表 3** ChartAxis -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

strokeColor

+

strokeColor

<color>

+

<color>

#ff6384

+

#ff6384

+

线条颜色。

-
说明:

仅线形图支持。

+

线条颜色。

+
说明:

仅线形图支持。

fillColor

+

fillColor

<color>

+

<color>

#ff6384

+

#ff6384

+

填充颜色。线形图表示填充的渐变颜色。

+

填充颜色。线形图表示填充的渐变颜色。

data

+

data

Array<number> | Array<Point>5+

+

Array<number> | Array<Point>5+

-

+

-

+

设置绘制线或柱中的点集。

+

设置绘制线或柱中的点集。

gradient

+

gradient

boolean

+

boolean

false

+

false

+

设置是否显示填充渐变颜色。

-
说明:

仅线形图支持。

+

设置是否显示填充渐变颜色。

+
说明:

仅线形图支持。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -320,71 +319,71 @@ date: 2021-12-30 18:31:37 **表 4** ChartSeries -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

min

+

min

number

+

number

0

+

0

+

轴的最小值。

-
说明:

仅线形图支持负数。

+

轴的最小值。

+
说明:

仅线形图支持负数。

max

+

max

number

+

number

100

+

100

+

轴的最大值。

-
说明:

仅线形图支持负数。

+

轴的最大值。

+
说明:

仅线形图支持负数。

axisTick

+

axisTick

number

+

number

10

+

10

+

轴显示的刻度数量。

-
说明:

仅支持1~20,且具体显示的效果与如下计算值有关(图的宽度所占的像素/(max-min))。

-

在柱状图中,每组数据显示的柱子数量与刻度数量一致,且柱子显示在刻度处。

+

轴显示的刻度数量。

+
说明:

仅支持1~20,且具体显示的效果与如下计算值有关(图的宽度所占的像素/(max-min))。

+

在柱状图中,每组数据显示的柱子数量与刻度数量一致,且柱子显示在刻度处。

display

+

display

boolean

+

boolean

false

+

false

+

是否显示轴。

+

是否显示轴。

color

+

color

<color>

+

<color>

#c0c0c0

+

#c0c0c0

+

轴颜色。

+

轴颜色。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -393,38 +392,38 @@ date: 2021-12-30 18:31:37 **表 5** ChartLineStyle -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

lineStyle

+

lineStyle

ChartLineStyle

+

ChartLineStyle

-

+

-

+

线样式设置,如线宽、是否平滑。

+

线样式设置,如线宽、是否平滑。

headPoint

+

headPoint

PointStyle

+

PointStyle

-

+

-

+

线最前端位置白点的样式和大小。

+

线最前端位置白点的样式和大小。

topPoint

+

topPoint

PointStyle

+

PointStyle

-

+

-

+

最高点的样式和大小。

+

最高点的样式和大小。

bottomPoint

+

bottomPoint

PointStyle

+

PointStyle

-

+

-

+

最低点的样式和大小。

+

最低点的样式和大小。

loop

+

loop

ChartLoop

+

ChartLoop

-

+

-

+

设置屏幕显示满时,是否需要重头开始绘制。

+

设置屏幕显示满时,是否需要重头开始绘制。

名称

+ - - - - - - - - - - - - - - @@ -433,72 +432,72 @@ date: 2021-12-30 18:31:37 **表 6** PointStyle -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

width

+

width

<length>

+

<length>

1px

+

1px

+

线宽设置。

+

线宽设置。

smooth

+

smooth

boolean

+

boolean

false

+

false

+

是否平滑。

+

是否平滑。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -507,38 +506,38 @@ date: 2021-12-30 18:31:37 **表 7** ChartLoop -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

shape

+

shape

string

+

string

circle

+

circle

+

高亮点的形状。可选值为:

-
  • circle:圆形。
  • square:方形。
  • triangle:三角形。
+

高亮点的形状。可选值为:

+
  • circle:圆形。
  • square:方形。
  • triangle:三角形。

size

+

size

<length>

+

<length>

5px

+

5px

+

高亮点的大小。

+

高亮点的大小。

strokeWidth

+

strokeWidth

<length>

+

<length>

1px

+

1px

+

边框宽度

+

边框宽度

strokeColor

+

strokeColor

<color>

+

<color>

#ff0000

+

#ff0000

+

边框颜色。

+

边框颜色。

fillColor

+

fillColor

<color>

+

<color>

#ff0000

+

#ff0000

+

填充颜色。

+

填充颜色。

名称

+ - - - - - - - - - - - - - - @@ -547,93 +546,93 @@ date: 2021-12-30 18:31:37 **表 8** Point5+ -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

margin

+

margin

<length>

+

<length>

1

+

1

+

擦除点的个数(最新绘制的点与最老的点之间的横向距离)。注意:轻量设备margin和topPoint/bottomPoint/headPoint同时使用时,有概率出现point正好位于擦除区域的情况,导致point不可见,因此不建议同时使用。

+

擦除点的个数(最新绘制的点与最老的点之间的横向距离)。注意:轻量设备margin和topPoint/bottomPoint/headPoint同时使用时,有概率出现point正好位于擦除区域的情况,导致point不可见,因此不建议同时使用。

gradient

+

gradient

boolean

+

boolean

false

+

false

+

是否需要渐变擦除。

+

是否需要渐变擦除。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -642,136 +641,135 @@ date: 2021-12-30 18:31:37 **表 9** DataSegment5+ -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

value

+

value

number

+

number

0

+

0

+

表示绘制点的Y轴坐标。

+

表示绘制点的Y轴坐标。

pointStyle

+

pointStyle

PointStyle

+

PointStyle

-

+

-

+

表示当前数据点的绘制样式。

+

表示当前数据点的绘制样式。

description

+

description

string

+

string

-

+

-

+

表示当前点的注释内容。

+

表示当前点的注释内容。

textLocation

+

textLocation

string

+

string

-

+

-

+

可选值为top,bottom,none。分别表示注释的绘制位置位于点的上方,下方,以及不绘制。

+

可选值为top,bottom,none。分别表示注释的绘制位置位于点的上方,下方,以及不绘制。

textColor

+

textColor

<color>

+

<color>

#000000

+

#000000

+

表示注释文字的颜色。

+

表示注释文字的颜色。

lineDash

+

lineDash

string

+

string

solid

+

solid

+

表示绘制当前线段虚线的样式。“dashed, 5, 5”表示纯虚线,绘制5px的实线后留5px的空白。“solid”表示绘制实线。

+

表示绘制当前线段虚线的样式。“dashed, 5, 5”表示纯虚线,绘制5px的实线后留5px的空白。“solid”表示绘制实线。

lineColor

+

lineColor

<color>

+

<color>

#000000

+

#000000

+

表示绘制当前线段的颜色。此颜色不设置会默认使用整体的strokeColor。

+

表示绘制当前线段的颜色。此颜色不设置会默认使用整体的strokeColor。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

startColor

+

startColor

Color

+

Color

-

+

-

+

起始位置的颜色,设置startColor必须设置endColor。不设置startColor时,会使用系统默认预置的颜色数组,具体颜色值见下表。

+

起始位置的颜色,设置startColor必须设置endColor。不设置startColor时,会使用系统默认预置的颜色数组,具体颜色值见下表。

endColor

+

endColor

Color

+

Color

-

+

-

+

终止位置的颜色,设置endColor必须设置startColor。

-

不设置startColor时,会使用系统默认预置的颜色数组。

+

终止位置的颜色,设置endColor必须设置startColor。

+

不设置startColor时,会使用系统默认预置的颜色数组。

value

+

value

number

+

number

0

+

0

+

占比数据的所占份额,最大100。

+

占比数据的所占份额,最大100。

name

+

name

string

+

string

-

+

-

+

此类数据的名称。

+

此类数据的名称。

- -

数据组

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -779,28 +777,27 @@ date: 2021-12-30 18:31:37 当类型为量规图时,还支持如下属性: - -

数据组

浅色主题

+

浅色主题

深色主题

+

深色主题

0

+

0

起始颜色:#f7ce00,结束颜色:#f99b11

+

起始颜色:#f7ce00,结束颜色:#f99b11

起始颜色:#d1a738,结束颜色:#eb933d

+

起始颜色:#d1a738,结束颜色:#eb933d

1

+

1

起始颜色:#f76223,结束颜色:#f2400a

+

起始颜色:#f76223,结束颜色:#f2400a

起始颜色:#e67d50,结束颜色:#d9542b

+

起始颜色:#e67d50,结束颜色:#d9542b

2

+

2

起始颜色:#f772ac,结束颜色:#e65392

+

起始颜色:#f772ac,结束颜色:#e65392

起始颜色:#d5749e,结束颜色:#d6568d

+

起始颜色:#d5749e,结束颜色:#d6568d

3

+

3

起始颜色:#a575eb,结束颜色:#a12df7

+

起始颜色:#a575eb,结束颜色:#a12df7

起始颜色:#9973d1,结束颜色:#5552d9

+

起始颜色:#9973d1,结束颜色:#5552d9

4

+

4

起始颜色:#7b79f7,结束颜色:#4b48f7

+

起始颜色:#7b79f7,结束颜色:#4b48f7

起始颜色:#7977d9,结束颜色:#f99b11

+

起始颜色:#7977d9,结束颜色:#f99b11

5

+

5

起始颜色:#4b8af3,结束颜色:#007dff

+

起始颜色:#4b8af3,结束颜色:#007dff

起始颜色:#4c81d9,结束颜色:#217bd9

+

起始颜色:#4c81d9,结束颜色:#217bd9

6

+

6

起始颜色:#73c1e6,结束颜色:#4fb4e3

+

起始颜色:#73c1e6,结束颜色:#4fb4e3

起始颜色:#5ea6d1,结束颜色:#4895c2

+

起始颜色:#5ea6d1,结束颜色:#4895c2

7

+

7

起始颜色:#a5d61d,结束颜色:#69d14f

+

起始颜色:#a5d61d,结束颜色:#69d14f

起始颜色:#91c23a,结束颜色:#70ba5d

+

起始颜色:#91c23a,结束颜色:#70ba5d

8

+

8

起始颜色:#a2a2b0,结束颜色:#8e8e93

+

起始颜色:#a2a2b0,结束颜色:#8e8e93

起始颜色:#8c8c99,结束颜色:#6b6b76

+

起始颜色:#8c8c99,结束颜色:#6b6b76

名称

+ - - - - - - - - - @@ -808,134 +805,133 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

percent

+

percent

number

+

number

0

+

0

+

当前值占整体的百分比,取值范围为0-100。

+

当前值占整体的百分比,取值范围为0-100。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -943,29 +939,28 @@ date: 2021-12-30 18:31:37 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

stroke-width

+

stroke-width

<length>

+

<length>

32px(量规)

-

24px(占比类圆形图表)

+

32px(量规)

+

24px(占比类圆形图表)

+

量规、占比类圆形图表组件刻度条的宽度。

+

量规、占比类圆形图表组件刻度条的宽度。

start-angle

+

start-angle

<deg>

+

<deg>

240(量规)

-

0(占比类圆形图表)

+

240(量规)

+

0(占比类圆形图表)

+

量规、占比类圆形图表组件刻度条起始角度,以时钟0点为基线。范围为0到360。

+

量规、占比类圆形图表组件刻度条起始角度,以时钟0点为基线。范围为0到360。

total-angle

+

total-angle

<deg>

+

<deg>

240(量规)

-

360(占比类圆形图表)

+

240(量规)

+

360(占比类圆形图表)

+

量规、占比类圆形图表组件刻度条总长度,范围为-360到360,负数标识起点到终点为逆时针。

+

量规、占比类圆形图表组件刻度条总长度,范围为-360到360,负数标识起点到终点为逆时针。

center-x

+

center-x

<length>

+

<length>

-

+

-

+

量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-y和radius一起配置才能生效。(仅量规图支持)

+

量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-y和radius一起配置才能生效。(仅量规图支持)

center-y

+

center-y

<length>

+

<length>

-

+

-

+

量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-x和radius一起配置才能生效。(仅量规图支持)

+

量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-x和radius一起配置才能生效。(仅量规图支持)

radius

+

radius

<length>

+

<length>

-

+

-

+

量规组件刻度条半径,该样式优先于通用样式的width和height样式。该样式需要和center-x和center-y一起配置才能生效。(仅量规图支持)

+

量规组件刻度条半径,该样式优先于通用样式的width和height样式。该样式需要和center-x和center-y一起配置才能生效。(仅量规图支持)

colors

+

colors

Array

+

Array

-

+

-

+

量规组件刻度条每一个区段的颜色。

-

如:colors: #ff0000, #00ff00。(仅量规图支持)

+

量规组件刻度条每一个区段的颜色。

+

如:colors: #ff0000, #00ff00。(仅量规图支持)

weights

+

weights

Array

+

Array

-

+

-

+

量规组件刻度条每一个区段的权重。

-

如:weights: 2, 2。(仅量规图支持)

+

量规组件刻度条每一个区段的权重。

+

如:weights: 2, 2。(仅量规图支持)

font-family5+

+

font-family5+

Array

+

Array

-

+

-

+

表示绘制注释的字体样式,支持自定义字体

+

表示绘制注释的字体样式,支持自定义字体

font-size5+

+

font-size5+

<length>

+

<length>

-

+

-

+

表示绘制注释的字体的大小。

+

表示绘制注释的字体的大小。

方法

+ - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" new file mode 100644 index 0000000000000000000000000000000000000000..70fe89e3f2f7518af54c7547662abeea6a12302b --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" @@ -0,0 +1,257 @@ +--- +title: divider +permalink: /pages/010c0201010303 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# divider + +提供分隔器组件,分隔不同内容块/内容元素。可用于列表或界面布局。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

方法

参数

+

参数

描述

+

描述

append

+

append

{

-

serial: number, // 设置要更新的线形图数据下标

-

data: Array<number>, // 设置新增的数据

-

}

+

{

+

serial: number, // 设置要更新的线形图数据下标

+

data: Array<number>, // 设置新增的数据

+

}

往已有的数据序列中动态添加数据,根据serial指定目标序列,serial为datasets数组的下标,从0开始。注意:不会更新datasets[index].data。仅线形图支持,按横坐标加1递增(与xAxis min/max设置相关)。

+

往已有的数据序列中动态添加数据,根据serial指定目标序列,serial为datasets数组的下标,从0开始。注意:不会更新datasets[index].data。仅线形图支持,按横坐标加1递增(与xAxis min/max设置相关)。

+ + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

vertical

+

boolean

+

false

+

+

使用水平分割线还是垂直分割线,默认水平。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>不支持focusable、disabled属性。 + +## 样式 + +仅支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

margin

+

<length>

+

0

+

+

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

+

margin-[left|top|right|bottom]

+

<length>

+

0

+

+

使用简写属性设置左、上、右、下外边距属性,类型length,单位px,默认值0。

+

color

+

<color>

+

#08000000

+

+

设置分割线颜色。

+

stroke-width

+

<length>

+

1

+

+

设置分割线宽度。

+

display

+

string

+

flex

+

+

确定分割线所产生的框的类型。值flex/none,默认值flex。

+

visibility

+

string

+

visible

+

+

是否显示分割线。不可见的框会占用布局。visible代表显示元素,hidden代表不显示元素。

+

line-cap

+

string

+

butt

+

+

设置分割线条的端点样式,默认为butt,可选值为:

+
  • butt:分割线两端为平行线;
  • round:分割线两端额外添加半圆;
  • square:分割线两端额外添加半方形;
+
说明:

round和square会额外增加一个线宽的分割线长度。

+
+

flex

+

number

+

-

+

+

规定了分割线如何适应父组件中的可用空间。它作为一个简写属性,用来设置组件的flex-grow。

+
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

+
+

flex-grow

+

number

+

0

+

+

设置分割线的伸展因子,指定父组件容器主轴方向上剩余空间(容器本身大小减去所有flex项加起来的大小)的分配系数。0为不伸展。

+
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

+
+

+

flex-shrink

+

number

+

1

+

+

设置分割线的收缩因子,flex元素仅在默认宽度之和大于容器的时候才会发生收缩,0为不收缩。

+
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

+
+

flex-basis

+

<length>

+

+

-

+

+

设置分割线在主轴方向上的初始大小。

+
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

+
+
+ +## 事件 + +不支持。 + +## 方法 + +不支持。 + +## 示例 + +``` + +
+
+ +
+
+``` + +``` +/* xxx.css */ +.container { + margin: 20px; + flex-direction:column; + width:100%; + height:100%; + align-items:center; +} +.content{ + width:80%; + height:40%; + border:1px solid #000000; + align-items: center; + justify-content: center; + flex-direction:column; +} +.divider { + margin: 10px; + color: #ff0000ff; + stroke-width: 3px; + line-cap: round; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/1.jpg) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" index ad68ea34e9d81daa86d07525dc6a79a9457e3471..f6fb6b1d2fe896515b0661dfb2de13d6047b2d31 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/04.image.md" @@ -1,6 +1,6 @@ --- title: image -permalink: /pages/000b0100010203 +permalink: /pages/010c0201010304 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:52 --- # image @@ -21,43 +21,42 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - @@ -65,67 +64,66 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下属性: +除支持[通用样式](/pages/010c0201010102)外,还支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

src

+

src

string

+

string

-

+

-

+

图片的路径,支持本地路径,图片格式包括png、jpg、bmp、svg和gif。

-

支持Base64字符串6+。格式为data:image/[png | jpeg | bmp | webp];base64, [base64 data], 其中[base64 data]为Base64字符串数据。

-

支持dataability://的路径前缀,用于访问通过data ability提供的图片路径6+

+

图片的路径,支持本地路径,图片格式包括png、jpg、bmp、svg和gif。

+

支持Base64字符串6+。格式为data:image/[png | jpeg | bmp | webp];base64, [base64 data], 其中[base64 data]为Base64字符串数据。

+

支持dataability://的路径前缀,用于访问通过data ability提供的图片路径6+

alt

+

alt

string

+

string

-

+

-

+

占位图,当指定图片在加载中时显示。

+

占位图,当指定图片在加载中时显示。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -134,35 +132,35 @@ date: 2021-12-30 18:31:37 **表 1** object-fit 类型说明 -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

object-fit

+

object-fit

string

+

string

cover

+

cover

+

设置图片的缩放类型。可选值类型说明请见object-fit 类型说明。(不支持svg格式)

+

设置图片的缩放类型。可选值类型说明请见object-fit 类型说明。(不支持svg格式)

match-text-direction

+

match-text-direction

boolean

+

boolean

false

+

false

+

图片是否跟随文字方向。(不支持svg格式)

+

图片是否跟随文字方向。(不支持svg格式)

fit-original-size

+

fit-original-size

boolean

+

boolean

false

+

false

+

image组件在未设置宽高的情况下是否适应图源尺寸(该属性为true时object-fit属性不生效),svg类型图源不支持该属性。

+

image组件在未设置宽高的情况下是否适应图源尺寸(该属性为true时object-fit属性不生效),svg类型图源不支持该属性。

object-position7+

+

object-position7+

string

+

string

0px 0px

+

0px 0px

+

设置图片在组件内展示的位置。

-

设置类型有两种:

-

1. 像素,单位px,示例 15px 15px 代表X轴或者Y轴移动的位置

-

2. 字符,可选值:

-
  • left 图片显示在组件左侧;
  • top 图片显示在组件顶部位置;
  • right 图片显示在组件右侧位置;
  • bottom图片显示在组件底部位置。
+

设置图片在组件内展示的位置。

+

设置类型有两种:

+

1. 像素,单位px,示例 15px 15px 代表X轴或者Y轴移动的位置

+

2. 字符,可选值:

+
  • left 图片显示在组件左侧;
  • top 图片显示在组件顶部位置;
  • right 图片显示在组件右侧位置;
  • bottom图片显示在组件底部位置。

类型

+ - - - - - - - - - - - @@ -178,29 +176,28 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

类型

描述

+

描述

cover

+

cover

保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界,居中显示。

+

保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界,居中显示。

contain

+

contain

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内,居中显示。

+

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内,居中显示。

fill

+

fill

不保持宽高比进行放大缩小,使得图片填充满显示边界。

+

不保持宽高比进行放大缩小,使得图片填充满显示边界。

none

+

none

保持原有尺寸进行居中显示。

+

保持原有尺寸进行居中显示。

scale-down

+

scale-down

保持宽高比居中显示,图片缩小或者保持不变。

+

保持宽高比居中显示,图片缩小或者保持不变。

名称

+ - - - - - - - - @@ -208,14 +205,14 @@ date: 2021-12-30 18:31:37 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 ```
- +

名称

参数

+

参数

描述

+

描述

complete(Rich)

+

complete(Rich)

{ width:width, height:height }

+

{ width:width, height:height }

图片成功加载时触发该回调,返回成功加载的图源尺寸。

+

图片成功加载时触发该回调,返回成功加载的图源尺寸。

error(Rich)

+

error(Rich)

{ width:width, height:height }

+

{ width:width, height:height }

图片加载出现异常时触发该回调,异常时长宽为零。

+

图片加载出现异常时触发该回调,异常时长宽为零。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -123,82 +122,82 @@ date: 2021-12-30 18:31:37 **表 1** ImageFrame说明 -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

images

+

images

Array<ImageFrame>

+

Array<ImageFrame>

-

+

-

+

设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小和图片位置信息。目前支持以下图片格式:png、jpg。ImageFrame的详细说明请见表1

-
说明:

使用时需要使用数据绑定的方式,如images = {{images}},js中声明相应变量:images: [{src: "/common/heart-rate01.png"}, {src: "/common/heart-rate02.png"}]。

-

js中声明相应变量:images: [{src: "/common/heart-rate01.png", duration: "100"}, {src: "/common/heart-rate02.png", duration: "200"}]。支持配置每一帧图片的时长,单位毫秒。6+

+

设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小和图片位置信息。目前支持以下图片格式:png、jpg。ImageFrame的详细说明请见表1

+
说明:

使用时需要使用数据绑定的方式,如images = {{images}},js中声明相应变量:images: [{src: "/common/heart-rate01.png"}, {src: "/common/heart-rate02.png"}]。

+

js中声明相应变量:images: [{src: "/common/heart-rate01.png", duration: "100"}, {src: "/common/heart-rate02.png", duration: "200"}]。支持配置每一帧图片的时长,单位毫秒。6+

predecode6+

+

predecode6+

number

+

number

0

+

0

+

是否启用预解码,默认值为0,即不启用预解码,如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。

+

是否启用预解码,默认值为0,即不启用预解码,如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。

iteration

+

iteration

number | string

+

number | string

infinite

+

infinite

+

设置帧动画播放次数。number表示固定次数,infinite枚举表示无限次数播放。

+

设置帧动画播放次数。number表示固定次数,infinite枚举表示无限次数播放。

reverse

+

reverse

boolean

+

boolean

false

+

false

+

设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。

+

设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。

fixedsize

+

fixedsize

boolean

+

boolean

true

+

true

+

设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的width 、height 、top 和left属性是无效的。false表示每一张图片的 width 、height 、top和left属性都要单独设置。

+

设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的width 、height 、top 和left属性是无效的。false表示每一张图片的 width 、height 、top和left属性都要单独设置。

duration

+

duration

string

+

string

-

+

-

+

设置单次播放时长。单位支持[s(秒)|ms(毫秒)],默认单位为ms。 duration为0时,不播放图片。 值改变只会在下一次循环开始时生效,当images中设置了单独的duration后,该属性设置无效。

+

设置单次播放时长。单位支持[s(秒)|ms(毫秒)],默认单位为ms。 duration为0时,不播放图片。 值改变只会在下一次循环开始时生效,当images中设置了单独的duration后,该属性设置无效。

fillmode5+

+

fillmode5+

string

+

string

forwards

+

forwards

+

指定帧动画执行结束后的状态。可选项有:

-
  • none:恢复初始状态。
  • forwards:保持帧动画结束时的状态(在最后一个关键帧中定义)。
+

指定帧动画执行结束后的状态。可选项有:

+
  • none:恢复初始状态。
  • forwards:保持帧动画结束时的状态(在最后一个关键帧中定义)。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -206,47 +205,46 @@ date: 2021-12-30 18:31:37 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

src

+

src

<uri>

+

<uri>

-

+

-

+

图片路径,图片格式为svg,png和jpg

+

图片路径,图片格式为svg,png和jpg

width

+

width

<length>

+

<length>

0

+

0

+

图片宽度。

+

图片宽度。

height

+

height

<length>

+

<length>

0

+

0

+

图片高度。

+

图片高度。

top

+

top

<length>

+

<length>

0

+

0

+

图片相对于组件左上角的纵向坐标。

+

图片相对于组件左上角的纵向坐标。

left

+

left

<length>

+

<length>

0

+

0

+

图片相对于组件左上角的横向坐标。

+

图片相对于组件左上角的横向坐标。

duration6+

+

duration6+

number

+

number

-

+

-

+

每一帧图片的播放时长,单位毫秒。

+

每一帧图片的播放时长,单位毫秒。

名称

+ - - - - - - - - - - - - - - @@ -254,51 +252,50 @@ date: 2021-12-30 18:31:37 ## 方法 -支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

参数

+

参数

描述

+

描述

start

+

start

-

+

-

帧动画启动时触发。

+

帧动画启动时触发。

pause

+

pause

-

+

-

帧动画暂停时触发。

+

帧动画暂停时触发。

stop

+

stop

-

+

-

帧动画结束时触发。

+

帧动画结束时触发。

resume

+

resume

-

+

-

帧动画恢复时触发。

+

帧动画恢复时触发。

名称

+ - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" index 7bd113e2715af36f37ad3befe4d44c4d732ddfde..6b7f645888d183aeb1d7977897217a233fc42f4c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/06.input.md" @@ -1,6 +1,6 @@ --- title: input -permalink: /pages/000b0100010205 +permalink: /pages/010c0201010306 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:52 --- # input @@ -25,195 +25,194 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

start

+

start

-

+

-

开始播放图片帧动画。再次调用,重新从第1帧开始播放。

+

开始播放图片帧动画。再次调用,重新从第1帧开始播放。

pause

+

pause

-

+

-

暂停播放图片帧动画。

+

暂停播放图片帧动画。

stop

+

stop

-

+

-

停止播放图片帧动画。

+

停止播放图片帧动画。

resume

+

resume

-

+

-

继续播放图片帧。

+

继续播放图片帧。

getState

+

getState

-

+

-

获取播放状态。可能值有:

-
  • playing:播放中
  • paused:已暂停
  • stopped:已停止。
+

获取播放状态。可能值有:

+
  • playing:播放中
  • paused:已暂停
  • stopped:已停止。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -222,26 +221,26 @@ date: 2021-12-30 18:31:37 **表 1** MenuOption5+ -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

string

+

string

text

+

text

+

input组件类型,可选值为text,email,date,time,number,password,button,checkbox,radio。

-

其中text,email,date,time,number,password这六种类型之间支持动态切换修改。

-

button,checkbox,radio不支持动态修改。可选值定义如下:

-
  • button:定义可点击的按钮;
  • checkbox:定义多选框;
  • radio:定义单选按钮,允许在多个拥有相同name值的选项中选中其中一个;
  • text:定义一个单行的文本字段
  • email:定义用于e-mail地址的字段;
  • date:定义 date 控件(包括年、月、日,不包括时间);
  • time:定义用于输入时间的控件(不带时区);
  • number:定义用于输入数字的字段;
  • password:定义密码字段(字段中的字符会被遮蔽)。
    说明:

    智能穿戴仅支持button、radio、checkbox类型。

    +

input组件类型,可选值为text,email,date,time,number,password,button,checkbox,radio。

+

其中text,email,date,time,number,password这六种类型之间支持动态切换修改。

+

button,checkbox,radio不支持动态修改。可选值定义如下:

+
  • button:定义可点击的按钮;
  • checkbox:定义多选框;
  • radio:定义单选按钮,允许在多个拥有相同name值的选项中选中其中一个;
  • text:定义一个单行的文本字段
  • email:定义用于e-mail地址的字段;
  • date:定义 date 控件(包括年、月、日,不包括时间);
  • time:定义用于输入时间的控件(不带时区);
  • number:定义用于输入数字的字段;
  • password:定义密码字段(字段中的字符会被遮蔽)。
    说明:

    智能穿戴仅支持button、radio、checkbox类型。

checked

+

checked

boolean

+

boolean

false

+

false

+

当前组件是否选中,仅type为checkbox和radio生效。

+

当前组件是否选中,仅type为checkbox和radio生效。

name

+

name

string

+

string

-

+

-

+

input组件的名称。

+

input组件的名称。

value

+

value

string

+

string

-

+

-

+

input组件的value值,当类型为radio时必填且相同name值的选项该值唯一。

+

input组件的value值,当类型为radio时必填且相同name值的选项该值唯一。

placeholder

+

placeholder

string

+

string

-

+

-

+

设置提示文本的内容,仅在type为text|email|date|time|number|password时生效。

+

设置提示文本的内容,仅在type为text|email|date|time|number|password时生效。

maxlength

+

maxlength

number

+

number

-

+

-

+

输入框可输入的最多字符数量,不填表示不限制输入框中字符数量。

+

输入框可输入的最多字符数量,不填表示不限制输入框中字符数量。

enterkeytype

+

enterkeytype

string

+

string

default

+

default

+

不支持动态修改。

-

设置软键盘Enter按钮的类型,可选值为:

-
  • default:默认
  • next:下一项
  • go:前往
  • done:完成
  • send:发送
  • search:搜索
-
说明:

除“next”外,点击后会自动收起软键盘。

+

不支持动态修改。

+

设置软键盘Enter按钮的类型,可选值为:

+
  • default:默认
  • next:下一项
  • go:前往
  • done:完成
  • send:发送
  • search:搜索
+
说明:

除“next”外,点击后会自动收起软键盘。

headericon

+

headericon

string

+

string

-

+

-

+

在文本输入前的图标资源路径,该图标不支持点击事件(button,checkbox和radio不生效),图标格式为jpg,png和svg。

+

在文本输入前的图标资源路径,该图标不支持点击事件(button,checkbox和radio不生效),图标格式为jpg,png和svg。

showcounter5+

+

showcounter5+

boolean

+

boolean

false

+

false

+

文本输入框是否显示计数下标,需要配合maxlength一起使用。

+

文本输入框是否显示计数下标,需要配合maxlength一起使用。

menuoptions5+

+

menuoptions5+

Array<MenuOption>

+

Array<MenuOption>

-

+

-

+

设置文本选择弹框点击更多按钮之后显示的菜单项。

+

设置文本选择弹框点击更多按钮之后显示的菜单项。

autofocus6+

+

autofocus6+

boolean

+

boolean

false

+

false

+

是否自动获焦。

-
说明:

应用首页中设置不生效,可在onActive中延迟(100-500ms左右)调用focus方法实现输入框在首页中自动获焦。

+

是否自动获焦。

+
说明:

应用首页中设置不生效,可在onActive中延迟(100-500ms左右)调用focus方法实现输入框在首页中自动获焦。

selectedstart6+

+

selectedstart6+

number

+

number

-1

+

-1

+

开始选择文本时初始选择位置。

+

开始选择文本时初始选择位置。

selectedend6+

+

selectedend6+

number

+

number

-1

+

-1

+

开始选择文本时结尾选择位置。

+

开始选择文本时结尾选择位置。

softkeyboardenabled6+

+

softkeyboardenabled6+

boolean

+

boolean

true

+

true

+

编辑时是否弹出系统软键盘。

+

编辑时是否弹出系统软键盘。

showpasswordicon6+

+

showpasswordicon6+

boolean

+

boolean

true

+

true

+

是否显示密码框末尾的图标(仅type为password时生效)。

+

是否显示密码框末尾的图标(仅type为password时生效)。

名称

+ - - - - - - - - @@ -249,87 +248,86 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

描述

+

描述

icon

+

icon

string

+

string

菜单选项中的图标路径。

+

菜单选项中的图标路径。

content

+

content

string

+

string

菜单选项中的文本内容。

+

菜单选项中的文本内容。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -337,69 +335,68 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - 当input类型为text、email、date、time、number、password时,支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

#e6000000

+

#e6000000

+

单行输入框或者按钮的文本颜色。

+

单行输入框或者按钮的文本颜色。

font-size

+

font-size

<length>

+

<length>

16px

+

16px

+

单行输入框或者按钮的文本尺寸。

+

单行输入框或者按钮的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

单行输入框或者按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

单行输入框或者按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

placeholder-color

+

placeholder-color

<color>

+

<color>

#99000000

+

#99000000

+

单行输入框的提示文本的颜色,type为text|email|date|time|number|password时生效。

+

单行输入框的提示文本的颜色,type为text|email|date|time|number|password时生效。

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

单行输入框或者按钮的字体粗细,见text组件font-weight的样式属性

+

单行输入框或者按钮的字体粗细,见text组件font-weight的样式属性

caret-color6+

+

caret-color6+

<color>

+

<color>

-

+

-

+

设置输入光标的颜色。

+

设置输入光标的颜色。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - @@ -407,20 +404,19 @@ date: 2021-12-30 18:31:37 - 当input类型为checkbox、radio时,支持如下事件: - -

名称

参数

+

参数

描述

+

描述

change

+

change

{ value:inputValue }

+

{ value:inputValue }

输入框输入内容发生变化时触发该事件,返回用户当前输入值。

-
说明:

改变value属性值不会触发该回调。

+

输入框输入内容发生变化时触发该事件,返回用户当前输入值。

+
说明:

改变value属性值不会触发该回调。

enterkeyclick

+

enterkeyclick

{ value:enterKey }

+

{ value:enterKey }

软键盘enter键点击后触发该事件,返回enter按钮的类型,enterKey类型为number,可选值为:

-
  • 2:设置enterkeytype属性为go时生效。
  • 3:设置enterkeytype属性为search时生效。
  • 4:设置enterkeytype属性为send时生效。
  • 5:设置enterkeytype属性为next时生效。
  • 6:不设置enterkeytype或者设置enterkeytype属性为default、done时生效。
+

软键盘enter键点击后触发该事件,返回enter按钮的类型,enterKey类型为number,可选值为:

+
  • 2:设置enterkeytype属性为go时生效。
  • 3:设置enterkeytype属性为search时生效。
  • 4:设置enterkeytype属性为send时生效。
  • 5:设置enterkeytype属性为next时生效。
  • 6:不设置enterkeytype或者设置enterkeytype属性为default、done时生效。

translate5+

+

translate5+

{ value: selectedText }

+

{ value: selectedText }

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

share5+

+

share5+

{ value: selectedText }

+

{ value: selectedText }

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

search5+

+

search5+

{ value: selectedText }

+

{ value: selectedText }

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

optionselect5+

+

optionselect5+

{ index:optionIndex, value: selectedText }

+

{ index:optionIndex, value: selectedText }

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

+

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

selectchange6+

+

selectchange6+

{ start: number,end: number }

+

{ start: number,end: number }

文本选择变化时触发事件。

+

文本选择变化时触发事件。

名称

+ - - - - - @@ -429,36 +425,35 @@ date: 2021-12-30 18:31:37 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

参数

+

参数

描述

+

描述

change

+

change

{ checked:true | false }

+

{ checked:true | false }

checkbox多选框或radio单选框的checked状态发生变化时触发该事件。

+

checkbox多选框或radio单选框的checked状态发生变化时触发该事件。

名称

+ - - - - - - - - - - - @@ -535,6 +530,8 @@ date: 2021-12-30 18:31:37 .div-button { flex-direction: column; align-items: center; + + } .button { margin-top: 30px; @@ -549,7 +546,8 @@ date: 2021-12-30 18:31:37 ```
- + +
``` @@ -558,6 +556,8 @@ date: 2021-12-30 18:31:37 .content{ width: 100%; height: 200px; + + align-items: center; justify-content: center; } @@ -586,6 +586,7 @@ date: 2021-12-30 18:31:37 + ``` ``` diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" new file mode 100644 index 0000000000000000000000000000000000000000..273fc55cdfa6de0d651422ab38504263d6b5a15f --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" @@ -0,0 +1,311 @@ +--- +title: label +permalink: /pages/010c0201010307 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# label + +为input、button、textarea组件定义相应的标注,点击该标注时会触发绑定组件的点击效果。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

参数

+

参数

描述

+

描述

focus

+

focus

{ focus: true|false },focus不传默认为true。

+

{ focus: true|false },focus不传默认为true。

使组件获得或者失去焦点,type为text|email|date|time|number|password时,可弹出或收起输入法。

+

使组件获得或者失去焦点,type为text|email|date|time|number|password时,可弹出或收起输入法。

showError

+

showError

{ error: string }

+

{ error: string }

展示输入错误提示,type为text|email|date|time|number|password时生效。

+

展示输入错误提示,type为text|email|date|time|number|password时生效。

delete6+

+

delete6+

-

+

-

type为text|email|date|time|number|password时,根据当前光标位置删除文本内容,如果当前输入组件没有光标,默认删除最后一个字符并展示光标。

+

type为text|email|date|time|number|password时,根据当前光标位置删除文本内容,如果当前输入组件没有光标,默认删除最后一个字符并展示光标。

+ + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

target

+

string

+

-

+

+

目标组件的属性id值。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e5000000

+

+

设置文本的颜色。

+

font-size

+

<length>

+

30px

+

+

设置文本的尺寸。

+

allow-scale

+

boolean

+

true

+

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果需要支持动态生效,请参看config描述文件中config-changes标签。

+
+

letter-spacing

+

<length>

+

0px

+

+

设置文本的字符间距。

+

font-style

+

string

+

normal

+

+

设置文本的字体样式,可选值为:

+
  • normal:标准的字体样式;
  • italic:斜体的字体样式。
+

font-weight

+

number | string

+

normal

+

+

设置文本的字体粗细,number类型取值[100, 900],默认为400,取值越大,字体越粗。

+
说明:

number取值必须为100的整数倍。

+
+

string类型取值支持如下四个值:lighter、normal、bold、bolder。

+

text-decoration

+

string

+

none

+

+

设置文本的文本修饰,可选值为:

+
  • underline:文字下划线修饰;
  • line-through:穿过文本的修饰线n
  • none:标准文本。
+

text-align

+

string

+

start

+

+

设置文本的文本对齐方式,可选值为:

+
  • left:文本左对齐;
  • center:文本居中对齐;
  • right:文本右对齐;
  • start:根据文字书写相同的方向对齐;
  • end:根据文字书写相反的方向对齐。
+
说明:

如文本宽度未指定大小,文本的宽度和父容器的宽度大小相等的情况下,对齐效果可能会不明显。

+
+

line-height

+

<length>

+

0px

+

+

设置文本的文本行高,设置为0px时,不限制文本行高,自适应字体大小。

+

text-overflow

+

string

+

clip

+

+

在设置了最大行数的情况下生效,可选值为:

+
  • clip:将文本根据父容器大小进行裁剪显示;
  • ellipsis:根据父容器大小显示,显示不下的文本用省略号代替。需配合max-lines使用。
+

font-family

+

string

+

sans-serif

+

+

设置文本的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

max-lines

+

number

+

-

+

+

设置文本的最大行数。

+

min-font-size

+

<length>

+

-

+

+

文本最小字号,需要和文本最大字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

+

max-font-size

+

<length>

+

-

+

+

文本最大字号,需要和文本最小字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

+

font-size-step

+

<length>

+

1px

+

+

文本动态调整字号时的步长,需要设置最小,最大字号样式生效。

+

prefer-font-sizes

+

<array>

+

-

+

+

预设的字号集合,在动态尺寸调整时,优先使用预设字号集合中的字号匹配设置的最大行数,如果预设字号集合未设置,则使用最大最小和步长调整字号。针对仍然无法满足最大行数要求的情况,使用text-overflow设置项进行截断,设置预设尺寸集后,font-size、max-font-size、min-font-size和font-size-step不生效。

+

如:prefer-font-sizes: 12px,14px,16px

+
+ +## 事件 + +不支持。 + +## 方法 + +不支持。 + +## 示例 + +``` + +
+
+ + +
+
+ + +
+
+ + +
+
+``` + +``` +/*xxx.css */ +.container { + flex-direction: column; + align-items: center; +} +.row { + flex-direction: row; +} +.label { + width: 200px; + margin-top: 50px; +} +.input { + margin-left: 100px; + margin-top: 50px; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152834002.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" index c0bc933798924218b46b815d6b0e53b8dc94e898..42b83d4b1b0238ef855b40116110d0a7e4bee462 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/08.marquee.md" @@ -1,6 +1,6 @@ --- title: marquee -permalink: /pages/000b0100010207 +permalink: /pages/010c0201010308 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:52 --- # marquee @@ -25,52 +25,51 @@ date: 2021-12-30 18:31:37 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - - - - - - @@ -78,76 +77,75 @@ date: 2021-12-30 18:31:37 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

scrollamount

+

scrollamount

number

+

number

6

+

6

+

跑马灯每次滚动时移动的最大长度。

+

跑马灯每次滚动时移动的最大长度。

loop

+

loop

number

+

number

-1

+

-1

+

跑马灯滚动的次数。如果未指定,则默认值为-1,当该值小于等于零时表示marquee将连续滚动。

+

跑马灯滚动的次数。如果未指定,则默认值为-1,当该值小于等于零时表示marquee将连续滚动。

direction

+

direction

string

+

string

left

+

left

+

设置跑马灯的文字滚动方向,可选值为left和right。

+

设置跑马灯的文字滚动方向,可选值为left和right。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -155,36 +153,35 @@ date: 2021-12-30 18:31:37 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

#e5000000

+

#e5000000

+

设置跑马灯中文字的文本颜色。

+

设置跑马灯中文字的文本颜色。

font-size

+

font-size

<length>

+

<length>

37.5

+

37.5

+

设置跑马灯中文字的文本尺寸。

+

设置跑马灯中文字的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

设置跑马灯中文字的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

设置跑马灯中文字的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

设置跑马灯中文字的字体的粗细,见text组件font-weight的样式属性

+

设置跑马灯中文字的字体的粗细,见text组件font-weight的样式属性

font-family

+

font-family

string

+

string

sans-serif

+

sans-serif

+

设置跑马灯中文字的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

设置跑马灯中文字的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

名称

+ - - - - - - - - - - - @@ -192,29 +189,28 @@ date: 2021-12-30 18:31:37 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: - -

名称

参数

+

参数

描述

+

描述

bounce(Rich)

+

bounce(Rich)

-

+

-

当文本滚动到末尾时触发该事件。

+

当文本滚动到末尾时触发该事件。

finish(Rich)

+

finish(Rich)

-

+

-

当完成滚动次数时触发该事件。需要在 loop 属性值大于 0 时触发。

+

当完成滚动次数时触发该事件。需要在 loop 属性值大于 0 时触发。

start(Rich)

+

start(Rich)

-

+

-

当文本滚动开始时触发该事件。

+

当文本滚动开始时触发该事件。

名称

+ - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" index dd585b531270ceeddb468fe15ff95bd7fa09c7a9..d0214a3bb47ee5ac3d84856f7c191fd6fde82ff9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/09.menu.md" @@ -1,6 +1,6 @@ --- title: menu -permalink: /pages/000b0100010208 +permalink: /pages/010c0201010309 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:37 +date: 2022-02-12 09:01:52 --- # menu @@ -21,159 +21,157 @@ date: 2021-12-30 18:31:37 ## 子组件 -<[option](/pages/000b0100010209)\>子组件。 +<[option](/pages/010c020101030a)\>子组件。 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性:↵ +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性:↵ - -

名称

参数

+

参数

描述

+

描述

start

+

start

-

+

-

开始滚动。

+

开始滚动。

stop

+

stop

-

+

-

停止滚动。

+

停止滚动。

名称

+ - - - - - - - - - - - - - - - - - - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

target

+

target

string

+

string

-

+

-

+

目标元素选择器。当使用目标元素选择器后,点击目标元素会自动弹出menu菜单。弹出菜单位置优先为目标元素右下角,当右边可视空间不足时会适当左移,当下方空间不足时会适当上移。

+

目标元素选择器。当使用目标元素选择器后,点击目标元素会自动弹出menu菜单。弹出菜单位置优先为目标元素右下角,当右边可视空间不足时会适当左移,当下方空间不足时会适当上移。

type

+

type

string

+

string

click

+

click

+

目标元素触发弹窗的方式,可选值有:

-
  • click:点击弹窗。
  • longpress:长按弹窗。
+

目标元素触发弹窗的方式,可选值有:

+
  • click:点击弹窗。
  • longpress:长按弹窗。

title

+

title

string

+

string

-

+

-

+

菜单标题内容。

+

菜单标题内容。

>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持focusable、disabled属性。 +>不支持focusable、disabled属性。 ## 样式 仅支持如下样式: - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -183,27 +181,26 @@ date: 2021-12-30 18:31:37 仅支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

text-color

+

text-color

<color>

+

<color>

-

+

-

+

设置菜单的文本颜色。

+

设置菜单的文本颜色。

font-size

+

font-size

<length>

+

<length>

30px

+

30px

+

设置菜单的文本尺寸。

+

设置菜单的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

设置菜单的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

设置菜单的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

letter-spacing

+

letter-spacing

<length>

+

<length>

0

+

0

+

设置菜单的字符间距。

+

设置菜单的字符间距。

font-style

+

font-style

string

+

string

normal

+

normal

+

设置菜单的字体样式。见text组件font-style的样式属性

+

设置菜单的字体样式。见text组件font-style的样式属性

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

设置菜单的字体粗细。见text组件font-weight的样式属性

+

设置菜单的字体粗细。见text组件font-weight的样式属性

font-family

+

font-family

string

+

string

sans-serif

+

sans-serif

+

设置菜单的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

设置菜单的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

名称

+ - - - - - - - - @@ -213,20 +210,19 @@ date: 2021-12-30 18:31:37 仅支持如下方法。 - -

名称

参数

+

参数

描述

+

描述

selected

+

selected

{ value:value }

+

{ value:value }

菜单中某个值被点击选中时触发,返回的value值为option组件的value属性。

+

菜单中某个值被点击选中时触发,返回的value值为option组件的value属性。

cancel

+

cancel

-

+

-

用户取消。

+

用户取消。

名称

+ - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d3ccd69a1ef953b6000ed64b651b5e7c028db86 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" @@ -0,0 +1,180 @@ +--- +title: option +permalink: /pages/010c020101030a +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# option + +当作为<[select](/pages/010c0201010313)\>的子组件时用来展示下拉选择的具体项目。 + +当作为<[menu](/pages/010c0201010309)\>的子组件时用来展示弹出菜单的具体项目。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性:↵ + +

名称

参数

+

参数

描述

+

描述

show

+

show

{ x:x, y:y }

+

{ x:x, y:y }

显示menu菜单。(x, y)指定菜单弹窗位置。其中x表示距离可见区域左边沿的 X 轴坐标,不包含任何滚动偏移,y表示距离可见区域上边沿的 Y 轴坐标,不包含任何滚动偏移以及状态栏。菜单优先显示在弹窗位置右下角,当右边可视空间不足时会适当左移,当下方空间不足时会适当上移。

+

显示menu菜单。(x, y)指定菜单弹窗位置。其中x表示距离可见区域左边沿的 X 轴坐标,不包含任何滚动偏移,y表示距离可见区域上边沿的 Y 轴坐标,不包含任何滚动偏移以及状态栏。菜单优先显示在弹窗位置右下角,当右边可视空间不足时会适当左移,当下方空间不足时会适当上移。

+ + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

selected

+

boolean

+

-

+

+

选择项是否为下拉列表的默认项,仅在父组件是select时生效。

+

value

+

string

+

-

+

+

选择项的值,作为select、menu父组件的selected事件中的返回值。

+
说明:

option选项的UI展示值需要放在标签内,如<option value="10">十月</option>

+
+

icon

+

string

+

-

+

+

图标资源路径,该图标展示在选项文本前,图标格式为jpg,png和svg。

+
+ +## 样式 + +支持如下样式。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e6000000

+

+

选择项的文本颜色。

+

font-size

+

<length>

+

16px

+

+

选择项的文本尺寸。

+

allow-scale

+

boolean

+

true

+

+

选择项的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+
+

font-weight

+

number | string

+

normal

+

+

选择项的字体粗细,见text组件font-weight的样式属性

+

text-decoration

+

string

+

none

+

+

选择项的文本修饰,见text组件text-decoration的样式属性

+

font-family

+

string

+

sans-serif

+

+

选择项的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+
+ +## 事件 + +不支持。 + +## 方法 + +不支持。 + +## 示例 + +详见[menu示例](/pages/010c0201010309#section54636714136)。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" new file mode 100644 index 0000000000000000000000000000000000000000..f6ce2738a6830e060e872db24f8c6aba3327b162 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" @@ -0,0 +1,846 @@ +--- +title: picker +permalink: /pages/010c020101030b +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# picker + +滑动选择器组件,类型支持普通选择器、日期选择器、时间选择器、时间日期选择器和多列文本选择器。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性:↵ + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

type

+

string

+

-

+

+

该属性值不支持动态修改。可选择项有:

+
  • text:文本选择器。
  • date:日期选择器。
  • time:时间选择器。
  • datetime:日期时间选择器。
  • multi-text:多列文本选择器。
+
+ +### 普通选择器 + +滑动选择器类型设置为text时表示普通选择器。 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

range

+

Array

+

-

+

+

设置普通选择器的取值范围,如["15", "20", "25"]。

+
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:["15", "20", "25"]。

+
+

selected

+

string

+

0

+

+

设置普通选择器弹窗的默认取值,取值需要是 range 的索引值,该取值表示选择器弹窗界面的默认选择值。

+

value

+

string

+

-

+

+

设置普通选择器的值。

+
+ +### 日期选择器 + +滑动选择器类型设置为date时表示日期选择器。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

start

+

<time>

+

1970-1-1

+

+

设置日期选择器的起始时间,格式为 YYYY-MM-DD。

+

end

+

<time>

+

2100-12-31

+

+

设置日期选择器的结束时间,格式为 YYYY-MM-DD。

+

selected

+

string

+

当前日期

+

+

设置日期选择器弹窗的默认取值,格式为 YYYY-MM-DD,该取值表示选择器弹窗界面的默认选择值。

+

value

+

string

+

-

+

+

设置日期选择器的值。

+

lunar5+

+

boolean

+

false

+

+

设置日期选择器弹窗界面是否为农历展示。

+

lunarswitch

+

boolean

+

false

+

+

设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。

+
说明:

仅手机和平板设备支持。 当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。

+
+
+ +### 时间选择器 + +滑动选择器类型设置为time时表示时间选择器。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

containsecond

+

boolean

+

false

+

+

设置时间选择器是否包含秒。

+

selected

+

string

+

当前时间

+

+

设置时间选择器弹窗的默认取值,格式为 HH:mm;当包含秒时,格式为HH:mm:ss,

+

该取值表示选择器弹窗界面的默认选择值。

+

value

+

string

+

-

+

+

设置时间选择器的值。

+

hours

+

number

+

241-4

+

-5+

+

+

设置时间选择器采用的时间格式,可选值:

+
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    +
    +
+
+ +### 日期时间选择器 + +滑动选择器类型设置为datetime时表示日期时间选择器,日期的选择范围为本年的日月。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

selected

+

string

+

当前日期时间

+

+

设置日期时间选择器弹窗的默认取值,有两种可选格式。

+
  • 月日时分:MM-DD-HH-mm
  • 年月日时分:YYYY-MM-DD-HH-mm
+

不设置年时,默认使用当前年,该取值表示选择器弹窗界面的默认选择值。

+

value

+

string

+

-

+

+

设置日期时间选择器的值。

+

hours

+

number

+

241-4

+

-5+

+

+

设置日期时间选择器采用的时间格式,可选值:

+
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    +
    +
+

lunar5+

+

boolean

+

false

+

+

设置日期时间选择器弹窗界面是否为农历展示。

+

lunarswitch

+

boolean

+

false

+

+

设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。

+
说明:

仅手机和平板设备支持。 当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。

+
+
+ +### 多列文本选择器 + +滑动选择器类型设置为multi-text时表示多列文本选择器。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

columns

+

number

+

-

+

+

设置多列文本选择器的列数。

+

range

+

二维Array

+

-

+

+

设置多列文本选择器的选择项,其中range 为二维数组。长度表示多少列,数组的每项表示每列的数据,如 [["a","b"], ["c","d"]]。

+
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:[["a","b"], ["c","d"]]。

+
+

selected

+

Array

+

[0,0,0,…]

+

+

设置多列文本选择器弹窗的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗界面的默认选择值。

+

value

+

Array

+

-

+

+

设置多列文本选择器的值,每一列被选中项对应的值构成的数组。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

text-color

+

<color>

+

-

+

+

选择器的文本颜色。

+

font-size

+

<length>

+

-

+

+

选择器的文本尺寸。

+

allow-scale

+

boolean

+

true

+

+

选择器的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+
+

letter-spacing

+

<length>

+

0

+

+

选择器的字符间距。见text组件的letter-spacing样式属性

+

text-decoration

+

string

+

-

+

+

选择器的文本修饰。见text组件的text-decoration样式属性

+

font-style

+

string

+

normal

+

+

选择器的字体样式。见text组件的font-style样式属性

+

font-weight

+

number | string

+

normal

+

+

选择器的字体粗细。见text组件的font-weight样式属性

+

font-family

+

string

+

sans-serif

+

+

选择器的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

line-height

+

<length>

+

0px

+

+

选择器的文本行高。

+

column-height5+

+

<length>

+

-

+

+

选择器的选择项列表高度。

+
说明:

仅手机和平板设备支持。

+
+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + +### 普通选择器 + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ newValue: newValue, newSelected: newSelected }

+

普通选择器选择值后点击弹窗中的确定按钮时触发该事件(newSelected为索引)。

+

cancel

+

-

+

用户点击弹窗中的取消按钮时触发该事件。

+
+ +### 日期选择器 + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ year: year, month: month, day: day }

+

日期选择器选择值后点击弹窗中的确认按钮时触发该事件。

+
说明:

month值范围为: 0(1月)~11(12月)。5+

+
+

cancel

+

-

+

用户点击弹窗中的取消按钮时触发该事件。

+
+ +### 日期时间选择器 + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ year: year, month: month, day: day, hour: hour, minute: minute}

+

日期时间选择器选择值后点击弹窗中的确认按钮时触发该事件。

+

cancel

+

-

+

用户点击弹窗中的取消按钮时触发该事件。

+
+ +### 时间选择器 + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ hour: hour, minute: minute, [second: second] }

+

时间选择器选择值后点击弹窗中的确认按钮时触发该事件,当使用时分秒时,还包含秒数据。

+

cancel

+

-

+

用户点击弹窗中的取消按钮时触发该事件。

+
+ +### 多列文本选择器 + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ newValue: [newValue1, newValue2, newValue3, …], newSelected:[newSelected1, newSelected2, newSelected3, …] }

+

多列文本选择器选择值后点击弹窗中的确认按钮时触发该事件,其中:

+
  • newValue:被选中项对应的值构成的数组。
  • newSelected:被选中项对应的索引构成的数组,两者的长度和range的长度一致。
+

columnchange

+

{ column: column, newValue: newValue, newSelected: newSelected }

+

多列文本选择器中某一列的值改变时触发该事件,其中:

+
  • column:第几列修改。
  • newValue:选中的值。
  • newSelected:选中值对应的索引。
+

cancel

+

-

+

用户点击弹窗中的取消按钮时触发该事件。

+
+ +## 方法 + +除支持[通用方法](/pages/010c0201010104)外,支持如下方法: + + + + + + + + + + + +

名称

+

参数

+

描述

+

show

+

-

+

显示 picker。

+
+ +## 示例 + +``` + +
+ + + + + + + + + + +
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + justify-content: center; + align-items: center; +} + picker{ + width:60%; + height:80px; + border-radius:20px; + text-color:white; + font-size:15px; + background-color:#4747e3; + margin-left:20%; +} + select{ + background-color: #efecec; + height: 50px; + width: 60%; + margin-left: 20%; + margin-top: 300px; + margin-bottom: 50px; + font-size: 22px; +} +``` + +``` +// xxx.js +import router from '@system.router'; +import prompt from '@system.prompt'; +export default { + data: { + selectList:["text","data","time","datetime","multitext"], + rangetext:['15', "20", "25"], + multitext:[["a", "b", "c"], ["e", "f", "g"], ["h", "i"], ["k", "l", "m"]], + textvalue:'default textvalue', + datevalue:'default datevalue', + timevalue:'default timevalue', + datetimevalue:'default datetimevalue', + multitextvalue:'default multitextvalue', + containsecond:true, + multitextselect:[1,2,0], + datetimeselect:'2012-5-6-11-25', + timeselect:'11:22:30', + dateselect:'2021-3-2', + textselect:'2' + }, + selectChange(e){ + for(let i = 0;i + +嵌入页面的滑动选择器。 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

type

+

string

+

text

+

+

设置滑动选择器的类型,该属性不支持动态修改,可选项有:

+
  • text:文本选择器。
  • time:时间选择器。
  • date:日期选择器。
  • datetime:日期时间选择器。
  • multi-text:多列文本选择器。
+
+ +文本选择器:type=text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

range

+

Array

+

-

+

+

设置文本选择器的取值范围。

+
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:["15", "20", "25"]。

+
+

selected

+

string

+

0

+

+

设置文本选择器的默认选择值,该值需要为range的索引。

+

indicatorprefix

+

string

+

-

+

+

文本选择器选定值增加的前缀字段。

+

indicatorsuffix

+

string

+

-

+

+

文本选择器选定值增加的后缀字段。

+
+ +时间选择器:type=time + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

containsecond

+

boolean

+

false

+

+

时间选择器是否包含秒。

+

selected

+

string

+

当前时间

+

+

设置时间选择器的默认取值,格式为 HH:mm;

+

当包含秒时,格式为HH:mm:ss。

+

hours

+

number

+

241-4

+

-5+

+

+

设置时间选择器采用的时间格式,可选值:

+
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    +
    +
+
+ +日期选择器:type=date + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

start

+

<time>

+

1970-1-1

+

+

设置日期选择器的起始时间,格式为 YYYY-MM-DD。

+

end

+

<time>

+

2100-12-31

+

+

设置日期选择器的结束时间,格式为 YYYY-MM-DD。

+

selected

+

string

+

当前日期

+

+

设置日期选择器的默认选择值,格式为 YYYY-MM-DD。

+

lunar5+

+

boolean

+

false

+

+

设置日期选择器弹窗界面是否为农历展示。

+

lunarswitch

+

boolean

+

false

+

+

设置日期选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。手机生效。

+
说明:

仅手机和平板设备支持。

+
+
+ +日期时间选择器:type=datetime,日期的选择范围为本年的日月。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

selected

+

string

+

当前日期时间

+

+

设置日期时间选择器的默认取值,格式有两种,为月日时分MM-DD-HH-mm或者年月日时分YYYY-MM-DD-HH-mm,不设置年时,默认使用当前年,该取值表示选择器弹窗时弹窗界面的默认选择值。

+

hours

+

number

+

241-4

+

-5+

+

+

设置日期时间选择器采用的时间格式,可选值:

+
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    +
    +
+

lunar5+

+

boolean

+

false

+

+

设置日期时间选择器弹窗界面是否为农历展示。

+

lunarswitch

+

boolean

+

false

+

+

设置日期时间选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。手机生效。

+
说明:

仅手机和平板设备支持。

+
+
+ +多列文本选择器:type=multi-text + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

columns

+

number

+

-

+

+

设置多列文本选择器的列数。

+

range

+

二维Array

+

-

+

+

设置多列文本选择器的选择值,该值为二维数组。长度表示多少列,数组的每项表示每列的数据,如 [["a","b"], ["c","d"]]。

+
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:[["a","b"], ["c","d"]]。

+
+

selected

+

Array

+

[0,0,0,…]

+

+

设置多列文本选择器的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗时弹窗界面的默认选择值。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#ffffff

+

+

候选项字体颜色。

+

font-size

+

<length>

+

16px

+

+

候选项字体尺寸,类型length,单位px。

+

selected-color

+

<color>

+

#ff0a69f7

+

+

选中项字体颜色。

+

selected-font-size

+

<length>

+

20px

+

+

选中项字体尺寸,类型length,单位px。

+

disappear-color5+

+

<color>

+

#ffffff

+

+

渐变消失项的字体颜色。消失项是在一列中有五个选项场景下最上和最下的两个选项。

+
说明:

仅手机和平板设备支持。

+
+

disappear-font-size5+

+

<length>

+

14px

+

+

渐变消失项的字体尺寸。消失项是在一列中有五个选项场景下最上和最下的两个选项。

+
说明:

仅手机和平板设备支持。

+
+

font-family

+

string

+

sans-serif

+

+

选项字体类型。字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+
+ +## 事件 + +仅支持如下事件: + +type=text: + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ newValue: newValue, newSelected: newSelected }

+

文本选择器选定值后触发该事件。

+
+ +type=time: + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ hour: hour, minute: minute, [second:second] }

+

时间选择器选定值后触发该事件。

+

包含秒时,返回时分秒。

+
+ +type=date: + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ year:year, month:month, day:day }

+

日期选择器选择值后触发该事件。

+
+ +type=datetime: + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ year:year, month:month, day:day, hour:hour, minute:minute }

+

日期时间选择器选择值后触发该事件。

+
+ +type=multi-text: + + + + + + + + + + + +

名称

+

参数

+

描述

+

columnchange

+

{ column:column, newValue:newValue, newSelected:newSelected }

+

多列文本选择器某一列的值改变时触发该事件,column:第几列修改,newValue:选中的值,newSelected:选中值对应的索引。

+
+ +## 方法 + +不支持。 + +## 示例 + +``` + +
+ + Selected:{{time}} + + +
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + justify-content: center; + align-items: center; + left: 0px; + top: 0px; + width: 454px; + height: 454px; +} +.title { + font-size: 30px; + text-align: center; +} +.time-picker { + width: 500px; + height: 400px; + margin-top: 20px; +} +``` + +``` +/* xxx.js */ +export default { + data: { + defaultTime: "", + time: "", + }, + onInit() { + this.defaultTime = this.now(); + }, + handleChange(data) { + this.time = this.concat(data.hour, data.minute); + }, + now() { + const date = new Date(); + const hours = date.getHours(); + const minutes = date.getMinutes(); + return this.concat(hours, minutes); + }, + + fill(value) { + return (value > 9 ? "" : "0") + value; + }, + + concat(hours, minutes) { + return `${this.fill(hours)}:${this.fill(minutes)}`; + }, +} +``` + +![](/images/application-dev/reference/arkui-js/figures/sssssss.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" index 193c6f55e8154e1f6dd7e5ae11d683d420ace642..db4d7f783260b04a006bfda621811db72a1403af 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/13.piece.md" @@ -1,6 +1,6 @@ --- title: piece -permalink: /pages/000b010001020c +permalink: /pages/010c020101030d navbar: true sidebar: true prev: true @@ -9,67 +9,63 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # piece 一种块状的入口,可包含图片和文本。常用于展示收件人,例如:邮件收件人或信息收件人。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 子组件 无 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - - - - - - @@ -77,29 +73,28 @@ date: 2021-12-30 18:31:38 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** >文本和图片默认在整个piece组件中居中。 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

content

+

content

string

+

string

-

+

-

+

操作块文本内容。

+

操作块文本内容。

closable

+

closable

boolean

+

boolean

false

+

false

+

设置当前操作块是否显示删除图标,当显示删除图标时,点击删除图标会触发close事件。

+

设置当前操作块是否显示删除图标,当显示删除图标时,点击删除图标会触发close事件。

icon

+

icon

string

+

string

-

+

-

+

操作块删除图标的url,支持本地。

+

操作块删除图标的url,支持本地。

名称

+ - - - - - @@ -107,7 +102,7 @@ date: 2021-12-30 18:31:38 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" index a8d8f8bc70d28d9d810b7b9b36b1e02b2201a6e6..b0482d514954577972aabd8b0fe091d7400725f7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/14.progress.md" @@ -1,6 +1,6 @@ --- title: progress -permalink: /pages/000b010001020d +permalink: /pages/010c020101030e navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # progress @@ -25,31 +25,30 @@ date: 2021-12-30 18:31:38 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

参数

+

参数

描述

+

描述

close

+

close

-

+

-

当piece组件点击删除图标触发,此时可以通过渲染属性if删除该组件。

+

当piece组件点击删除图标触发,此时可以通过渲染属性if删除该组件。

名称

+ - - - - - - - - - @@ -59,39 +58,38 @@ date: 2021-12-30 18:31:38 - 类型为horizontal、ring、scale-ring时,支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

string

+

string

horizontal

+

horizontal

+

设置进度条的类型,该属性不支持动态修改,可选值为:

-
  • horizontal:线性进度条;
  • circular:loading样式进度条;
  • ring:圆环形进度条;
  • scale-ring:带刻度圆环形进度条
  • arc:弧形进度条。
  • eclipse5+:圆形进度条,展现类似月圆月缺的进度展示效果。
+

设置进度条的类型,该属性不支持动态修改,可选值为:

+
  • horizontal:线性进度条;
  • circular:loading样式进度条;
  • ring:圆环形进度条;
  • scale-ring:带刻度圆环形进度条
  • arc:弧形进度条。
  • eclipse5+:圆形进度条,展现类似月圆月缺的进度展示效果。

名称

+ - - - - - - - - - - - - - - @@ -99,28 +97,27 @@ date: 2021-12-30 18:31:38 - 类型为ring、scale-ring时,支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

percent

+

percent

number

+

number

0

+

0

+

当前进度。取值范围为0-100。

+

当前进度。取值范围为0-100。

secondarypercent

+

secondarypercent

number

+

number

0

+

0

+

次级进度。取值范围为0-100。

+

次级进度。取值范围为0-100。

名称

+ - - - - - - - - - @@ -128,28 +125,27 @@ date: 2021-12-30 18:31:38 - 类型为arc、eclipse5+时,支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

clockwise

+

clockwise

boolean

+

boolean

true

+

true

+

圆环形进度条是否采用顺时针。

+

圆环形进度条是否采用顺时针。

名称

+ - - - - - - - - - @@ -158,66 +154,65 @@ date: 2021-12-30 18:31:38 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: type=horizontal - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

percent

+

percent

number

+

number

0

+

0

+

当前进度。取值范围为0-100。

+

当前进度。取值范围为0-100。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -225,28 +220,27 @@ type=horizontal type=circular - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

#ff007dff

+

#ff007dff

+

设置进度条的颜色。

+

设置进度条的颜色。

stroke-width

+

stroke-width

<length>

+

<length>

4px

-

+

4px

+

+

设置进度条的宽度。

+

设置进度条的宽度。

background-color

+

background-color

<color>

+

<color>

-

+

-

+

设置进度条的背景色。

+

设置进度条的背景色。

secondary-color

+

secondary-color

<color>

+

<color>

-

+

-

+

设置次级进度条的颜色。

+

设置次级进度条的颜色。

名称

+ - - - - - - - - - @@ -254,85 +248,84 @@ type=circular type=ring, scale-ring - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

-

+

-

+

loading进度条上的圆点颜色。

+

loading进度条上的圆点颜色。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -340,109 +333,108 @@ type=ring, scale-ring type=arc - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color> | <linear-gradient>

+

<color> | <linear-gradient>

-

+

-

+

环形进度条的颜色,ring类型支持线性渐变色设置。

-
说明:

线性渐变色仅支持两个颜色参数设置格式,如color = linear-gradient(#ff0000, #00ff00)。

+

环形进度条的颜色,ring类型支持线性渐变色设置。

+
说明:

线性渐变色仅支持两个颜色参数设置格式,如color = linear-gradient(#ff0000, #00ff00)。

background-color

+

background-color

<color>

+

<color>

-

+

-

+

环形进度条的背景色。

+

环形进度条的背景色。

secondary-color

+

secondary-color

<color>

+

<color>

-

+

-

+

环形次级进度条的颜色。

+

环形次级进度条的颜色。

stroke-width

+

stroke-width

<length>

+

<length>

10px

+

10px

+

环形进度条的宽度。

+

环形进度条的宽度。

scale-width

+

scale-width

<length>

+

<length>

-

+

-

+

带刻度的环形进度条的刻度粗细,类型为scale-ring生效。

+

带刻度的环形进度条的刻度粗细,类型为scale-ring生效。

scale-number

+

scale-number

number

+

number

120

+

120

+

带刻度的环形进度条的刻度数量,类型为scale-ring生效。

+

带刻度的环形进度条的刻度数量,类型为scale-ring生效。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -450,39 +442,38 @@ type=arc type=eclipse5+ - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

-

-

+

-

+

+

弧形进度条的颜色。

+

弧形进度条的颜色。

background-color

+

background-color

<color>

+

<color>

-

-

+

-

+

+

弧形进度条的背景色。

+

弧形进度条的背景色。

stroke-width

+

stroke-width

<length>

+

<length>

4px

+

4px

+

弧形进度条的宽度。

-
说明:

进度条宽度越大,进度条越靠近圆心,进度条始终在半径区域内。

+

弧形进度条的宽度。

+
说明:

进度条宽度越大,进度条越靠近圆心,进度条始终在半径区域内。

start-angle

+

start-angle

<deg>

+

<deg>

240

+

240

+

弧形进度条起始角度,以时钟0点为基线,取值范围为0到360(顺时针)。

+

弧形进度条起始角度,以时钟0点为基线,取值范围为0到360(顺时针)。

total-angle

+

total-angle

<deg>

+

<deg>

240

+

240

+

弧形进度条总长度,范围为-360到360,负数标识起点到终点为逆时针。

+

弧形进度条总长度,范围为-360到360,负数标识起点到终点为逆时针。

center-x

+

center-x

<length>

+

<length>

弧形进度条宽度的一半

+

弧形进度条宽度的一半

+

弧形进度条中心位置,(坐标原点为组件左上角顶点)。该样式需要和center-y和radius一起使用。

+

弧形进度条中心位置,(坐标原点为组件左上角顶点)。该样式需要和center-y和radius一起使用。

center-y

+

center-y

<length>

+

<length>

弧形进度条高度的一半

+

弧形进度条高度的一半

+

弧形进度条中心位置,(坐标原点为组件左上角顶点)。该样式需要和center-x和radius一起使用。

+

弧形进度条中心位置,(坐标原点为组件左上角顶点)。该样式需要和center-x和radius一起使用。

radius

+

radius

<length>

+

<length>

弧形进度条宽高最小值的一半

+

弧形进度条宽高最小值的一半

+

弧形进度条半径,该样式需要和center-x和center-y一起使用。

+

弧形进度条半径,该样式需要和center-x和center-y一起使用。

名称

+ - - - - - - - - - - - - - - @@ -490,11 +481,11 @@ type=eclipse5+ ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" similarity index 45% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" index e03022e6dc29d3ca8a093f2329d896b05c29a202..107d7a72f3c8d3c1251ff63e82a8c1514d2ca3e4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/15.qrcode.md" @@ -1,6 +1,6 @@ --- title: qrcode -permalink: /pages/000b010001020e +permalink: /pages/010c020101030f navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # qrcode 生成并显示二维码。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 权限列表 无 @@ -28,42 +25,41 @@ date: 2021-12-30 18:31:38 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

-

+

-

+

圆形进度条的颜色。

+

圆形进度条的颜色。

background-color

+

background-color

<color>

+

<color>

-

+

-

+

弧形进度条的背景色。

+

弧形进度条的背景色。

名称

+ - - - - - - - - - - - - - - @@ -71,41 +67,40 @@ date: 2021-12-30 18:31:38 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

value

+

value

string

+

string

-

+

-

+

用来生成二维码的内容。

+

用来生成二维码的内容。

type

+

type

string

+

string

rect

+

rect

+

二维码类型。可能选项有:

-
  • rect:矩形二维码。
  • circle:圆形二维码。
+

二维码类型。可能选项有:

+
  • rect:矩形二维码。
  • circle:圆形二维码。

名称

+ - - - - - - - - - - - - - - @@ -117,11 +112,11 @@ date: 2021-12-30 18:31:38 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" index 8f95959ff46a26f5ae55ae02b255e5ddd3aaa376..52701de63bb406caef3f07042473b972efe9ef12 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/16.rating.md" @@ -1,6 +1,6 @@ --- title: rating -permalink: /pages/000b010001020f +permalink: /pages/010c0201010310 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # rating @@ -25,65 +25,64 @@ date: 2021-12-30 18:31:38 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

color

<color>

+

<color>

#000000

+

#000000

+

二维码颜色。

+

二维码颜色。

background-color

+

background-color

<color>

+

<color>

#ffffff

+

#ffffff

+

二维码背景颜色。

+

二维码背景颜色。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -91,87 +90,86 @@ date: 2021-12-30 18:31:38 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

numstars

+

numstars

number

+

number

5

+

5

+

设置评分条的星级总数。

+

设置评分条的星级总数。

rating

+

rating

number

+

number

0

+

0

+

设置评分条当前评星数。

+

设置评分条当前评星数。

stepsize

+

stepsize

number

+

number

0.5

+

0.5

+

设置评分条的评星步长。

-
说明:

仅手机和平板设备支持

+

设置评分条的评星步长。

+
说明:

仅手机和平板设备支持

indicator

+

indicator

boolean

+

boolean

false

+

false

+

设置评分条是否作为一个指示器,此时用户不可操作。

+

设置评分条是否作为一个指示器,此时用户不可操作。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -182,22 +180,21 @@ date: 2021-12-30 18:31:38 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

star-background

+

star-background

string

+

string

-

+

-

+

设置单个星级未选中的背景图片,只支持本地路径图片,图片格式为png和jpg。

+

设置单个星级未选中的背景图片,只支持本地路径图片,图片格式为png和jpg。

star-foreground

+

star-foreground

string

+

string

-

+

-

+

设置单个星级选中的前景图片,只支持本地路径图片,图片格式为png和jpg。

+

设置单个星级选中的前景图片,只支持本地路径图片,图片格式为png和jpg。

star-secondary

+

star-secondary

string

+

string

-

+

-

+

设置单个星级部分选中的次级背景图片,该图片会覆盖背景图片,只支持本地路径图片,图片格式为png和jpg。

+

设置单个星级部分选中的次级背景图片,该图片会覆盖背景图片,只支持本地路径图片,图片格式为png和jpg。

width

+

width

<length>|<percentage>

+

<length>|<percentage>

120px

-

60px(不可操作)

+

120px

+

60px(不可操作)

+

默认值是在未设置自定义资源和评分星数时,使用5个星和默认资源下的宽度值。

+

默认值是在未设置自定义资源和评分星数时,使用5个星和默认资源下的宽度值。

height

+

height

<length>|<percentage>

+

<length>|<percentage>

24px

-

12px(不可操作)

+

24px

+

12px(不可操作)

+

默认值是在未设置自定义资源和评分星数时,使用5个星和默认资源下的高度值。

+

默认值是在未设置自定义资源和评分星数时,使用5个星和默认资源下的高度值。

rtl-flip

+

rtl-flip

boolean

+

boolean

true

+

true

+

在RTL文字方向下是否自动翻转图源。

+

在RTL文字方向下是否自动翻转图源。

名称

+ - - - - - @@ -205,7 +202,7 @@ date: 2021-12-30 18:31:38 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" similarity index 57% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" index 9d9691662464549f4a16d1afd0f0c2b79b08c3ee..2bf0afd4a57bf3a8f2f6f07c99d0e06ef119df4a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/17.richtext.md" @@ -1,6 +1,6 @@ --- title: richtext -permalink: /pages/000b0100010210 +permalink: /pages/010c0201010311 navbar: true sidebar: true prev: true @@ -9,14 +9,13 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # richtext 富文本组件,用于展示富文本信息。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 从 API Version 6 开始支持。 >- 富文本内容需要写在元素标签内。 ## 权限列表 @@ -25,37 +24,36 @@ date: 2021-12-30 18:31:38 ## 属性 -仅支持[通用属性](/pages/000b0100010000)中的id、style和class属性。 +仅支持[通用属性](/pages/010c0201010101)中的id、style和class属性。 ## 样式 -仅支持[通用样式](/pages/000b0100010001)中的display和visibility样式。 +仅支持[通用样式](/pages/010c0201010102)中的display和visibility样式。 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

参数

+

参数

描述

+

描述

change

+

change

{ rating: number }

+

{ rating: number }

评分条的评星发生改变时触发该回调。

+

评分条的评星发生改变时触发该回调。

名称

+ - - - - - - - - @@ -66,6 +64,7 @@ date: 2021-12-30 18:31:38 >- 不支持无障碍事件。 >- 包含richtext的页面返回时richtext显示区域不会跟随页面的转场动效。 >- richtext内容不建议超过一个屏幕高度,超出部分不会显示。 +>- 不支持设置宽度,默认撑开全屏。 ## 方法 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" new file mode 100644 index 0000000000000000000000000000000000000000..747f5e265a94daa3cd29ee3e8c9631548a9291a7 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" @@ -0,0 +1,305 @@ +--- +title: search +permalink: /pages/010c0201010312 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# search + +提供搜索框组件,用于提供用户搜索内容的输入区域。 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

参数

+

参数

描述

+

描述

start

+

start

-

+

-

开始加载时触发。

+

开始加载时触发。

complete

+

complete

-

+

-

加载完成时触发。

+

加载完成时触发。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

icon

+

string

+

-

+

+

搜索图标,默认使用系统搜索图标,图标格式为svg,jpg和png。

+

hint

+

string

+

-

+

+

搜索提示文字。

+

value

+

string

+

-

+

+

搜索框搜索文本值。

+

searchbutton5+

+

string

+

-

+

+

搜索框末尾搜索按钮文本值。

+

menuoptions5+

+

Array<MenuOption>

+

-

+

+

设置文本选择弹框点击更多按钮之后显示的菜单项。

+
+ +**表 1** MenuOption5+ + + + + + + + + + + + + + + + + +

名称

+

类型

+

描述

+

icon

+

string

+

菜单选项中的图标路径。

+

content

+

string

+

菜单选项中的文本内容。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e6000000

+

+

搜索框的文本颜色。

+

font-size

+

<length>

+

16px

+

+

搜索框的文本尺寸。

+

allow-scale

+

boolean

+

true

+

+

搜索框的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+
+

placeholder-color

+

<color>

+

#99000000

+

+

搜索框的提示文本颜色。

+

font-weight

+

number | string

+

normal

+

+

搜索框的字体粗细,见text组件font-weight的样式属性

+

font-family

+

string

+

sans-serif

+

+

搜索框的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

caret-color6+

+

<color>

+

-

+

+

设置输入光标的颜色。

+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ text:newText }

+

输入内容发生变化时触发。

+
说明:

改变value属性值不会触发该回调。

+
+

submit

+

{ text:submitText }

+

点击搜索图标、搜索按钮5+或者按下软键盘搜索按钮时触发。

+

translate5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

+

share5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

+

search5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

+

optionselect5+

+

{ index:optionIndex, value: selectedText }

+

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

+
+ +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +``` + +
+ + +
+``` + +``` +/* xxx.css */ +.container { + display: flex; + justify-content: center; + align-items: center; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001153427082.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" index 5392efb007a56168dc28b5158c6427e30cde3ac6..4b39c3c2d8fa22146616fac61c68db4917a3c5e4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/19.select.md" @@ -1,6 +1,6 @@ --- title: select -permalink: /pages/000b0100010212 +permalink: /pages/010c0201010313 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # select @@ -21,38 +21,37 @@ date: 2021-12-30 18:31:38 ## 子组件 -支持<[option](/pages/000b0100010209)\>。 +支持<[option](/pages/010c020101030a)\>。 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

+ - - - - - - - - - @@ -60,22 +59,21 @@ date: 2021-12-30 18:31:38 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

font-family

+

font-family

string

+

string

sans-serif

+

sans-serif

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

名称

+ - - - - - @@ -86,7 +84,7 @@ date: 2021-12-30 18:31:38 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" new file mode 100644 index 0000000000000000000000000000000000000000..0efce7abbc00f30c02e1c6df912f5b4939f1478c --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" @@ -0,0 +1,293 @@ +--- +title: slider +permalink: /pages/010c0201010314 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# slider + +滑动条组件,用来快速调节设置值,如音量、亮度等。 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

名称

参数

+

参数

描述

+

描述

change

+

change

{newValue: newValue}

+

{newValue: newValue}

下拉选择新值后触发该事件,newValue的值为子组件option的value属性值。

+

下拉选择新值后触发该事件,newValue的值为子组件option的value属性值。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

min

+

number

+

0

+

+

滑动选择器的最小值。

+

max

+

number

+

100

+

+

滑动选择器的最大值。

+

step

+

number

+

1

+

+

每次滑动的步长。

+

value

+

number

+

0

+

+

滑动选择器的初始值。

+

mode5+

+

string

+

outset

+

+

滑动条样式:

+
  • outset:滑块在滑杆上;
  • inset:滑块在滑杆内。
    说明:

    仅手机和平板设备支持。

    +
    +
+

showsteps5+

+

boolean

+

false

+

+

是否显示步长标识;

+
说明:

仅手机和平板设备支持。

+
+

showtips5+

+

boolean

+

false

+

+

滑动时是否有气泡提示百分比;

+
说明:

仅手机和平板设备支持。

+
+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#19000000

+

+

滑动条的背景颜色。

+

selected-color

+

<color>

+

#ff007dff

+

+

滑动条的已选择颜色。

+

block-color

+

<color>

+

#ffffff

+

+

滑动条的滑块颜色。

+
说明:

仅手机、平板和智慧屏设备支持。

+
+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

ChangeEvent

+

选择值发生变化时触发该事件。

+
+ +**表 1** ChangeEvent + + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

说明

+

progress(deprecated5+)

+

string

+

当前slider的进度值。

+

isEnd(deprecated5+)

+

string

+

当前slider是否拖拽结束,可选值为:

+
  • true:slider拖拽结束。
  • false:slider拖拽中。
+

value5+

+

number

+

当前slider的进度值。

+

mode5+

+

string

+

当前change事件的类型,可选值为:

+
  • start:slider的值开始改变。
  • move:slider的值跟随手指拖动中。
  • end:slider的值结束改变。
+
+ +## 示例 + +``` + +
+ slider start value is {{startValue}} + slider current value is {{currentValue}} + slider end value is {{endValue}} + +
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + justify-content: center; + align-items: center; + + +} +``` + +``` +// xxx.js +export default { + data: { + value: 0, + startValue: 0, + currentValue: 0, + endValue: 0, + }, + setvalue(e) { + if (e.mode == "start") { + this.value = e.value; + this.startValue = e.value; + } else if (e.mode == "move") { + this.value = e.value; + this.currentValue = e.value; + } else if (e.mode == "end") { + this.value = e.value; + this.endValue = e.value; + } + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/slider.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" new file mode 100644 index 0000000000000000000000000000000000000000..57aaf3a87c4ea38e177dad48e596aad36afea76e --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" @@ -0,0 +1,170 @@ +--- +title: span +permalink: /pages/010c0201010315 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# span + +作为<[text](/pages/010c0201010317)\>子组件提供文本修饰能力。 + +## 权限列表 + +无 + +## 子组件 + +支持子组件。 + +## 属性 + +支持[通用属性](/pages/010c0201010101)。 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>不支持focusable和disabled属性。 + +## 样式 + +仅支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

-

+

+

设置文本段落的文本颜色。

+

font-size

+

<length>

+

30px

+

+

设置文本段落的文本尺寸。

+

allow-scale

+

boolean

+

true

+

+

设置文本段落的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+
+

font-style

+

string

+

normal

+

+

设置文本段落的字体样式,见text组件font-style的样式属性

+

font-weight

+

number | string

+

normal

+

+

设置文本段落的字体粗细,见text组件font-weight的样式属性

+

text-decoration

+

string

+

none

+

+

设置文本段落的文本修饰,见text组件text-decoration样式属性

+

font-family

+

string

+

sans-serif

+

+

设置文本段落的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+
+ +## 事件 + +仅支持[通用事件](/pages/010c0201010103)中的click事件。 + +## 方法 + +不支持。 + +## 示例 + +``` + +
+ + span + +
+``` + +``` +/* xxx.css */ +.container { + display: flex; + justify-content: center; + align-items: center; +} +.title { + font-size: 30px; + text-align: center; + width: 100%; + height: 100px; +} +.spanTxt{ + color: chartreuse; + font-size: 100px; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588626.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" index 25f0690e7e98503011152fa8cfceb32f4c99aca1..77b7d62638e0bce5c64387c5aee88491e363e495 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/22.switch.md" @@ -1,6 +1,6 @@ --- title: switch -permalink: /pages/000b0100010215 +permalink: /pages/010c0201010316 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # switch @@ -25,63 +25,62 @@ date: 2021-12-30 18:31:38 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -89,109 +88,108 @@ date: 2021-12-30 18:31:38 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

checked

+

checked

boolean

+

boolean

false

+

false

+

是否选中。

+

是否选中。

showtext

+

showtext

boolean

+

boolean

false

+

false

+

是否显示文本。

+

是否显示文本。

texton

+

texton

string

+

string

"On"

+

"On"

+

选中时显示的文本。

+

选中时显示的文本。

textoff

+

textoff

string

+

string

"Off"

+

"Off"

+

未选中时显示的文本。

+

未选中时显示的文本。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -199,22 +197,21 @@ date: 2021-12-30 18:31:38 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

texton-color(Rich)

+

texton-color(Rich)

<color>

+

<color>

#000000

+

#000000

+

选中时显示的文本颜色。

+

选中时显示的文本颜色。

textoff-color(Rich)

+

textoff-color(Rich)

<color>

+

<color>

#000000

+

#000000

+

未选中时显示的文本颜色。

+

未选中时显示的文本颜色。

text-padding(Rich)

+

text-padding(Rich)

number

+

number

0px

+

0px

+

texton/textoff中最长文本两侧距离滑块边界的距离。

+

texton/textoff中最长文本两侧距离滑块边界的距离。

font-size(Rich)

+

font-size(Rich)

<length>

+

<length>

-

+

-

+

文本尺寸,仅设置texton和textoff生效。

+

文本尺寸,仅设置texton和textoff生效。

allow-scale(Rich)

+

allow-scale(Rich)

boolean

+

boolean

true

+

true

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

font-style(Rich)

+

font-style(Rich)

string

+

string

normal

+

normal

+

字体样式,仅设置texton和textoff生效。见text组件font-style的样式属性

+

字体样式,仅设置texton和textoff生效。见text组件font-style的样式属性

font-weight(Rich)

+

font-weight(Rich)

number | string

+

number | string

normal

+

normal

+

字体粗细,仅设置texton和textoff生效。见text组件的font-weight的样式属性

+

字体粗细,仅设置texton和textoff生效。见text组件的font-weight的样式属性

font-family(Rich)

+

font-family(Rich)

string

+

string

sans-serif

+

sans-serif

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。仅设置texton和textoff生效。

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。仅设置texton和textoff生效。

名称

+ - - - - - @@ -222,7 +219,7 @@ date: 2021-12-30 18:31:38 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" new file mode 100644 index 0000000000000000000000000000000000000000..e8f99890764071338508b4b98e82f33f5182dfef --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" @@ -0,0 +1,417 @@ +--- +title: text +permalink: /pages/010c0201010317 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# text + +文本,用于呈现一段信息。 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 文本的展示内容需要写在元素标签内。 + +## 权限列表 + +无 + +## 子组件 + +支持<[span](/pages/010c0201010315)\>。 + +## 属性 + +支持[通用属性](/pages/010c0201010101)。 + +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + +

名称

参数

+

参数

描述

+

描述

change

+

change

{ checked: checkedValue }

+

{ checked: checkedValue }

选中状态改变时触发该事件。

+

选中状态改变时触发该事件。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e5000000

+

+

设置文本的颜色。

+

font-size

+

<length>

+

30px

+

+

设置文本的尺寸。

+

allow-scale

+

boolean

+

true

+

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果需要支持动态生效,请参看config描述文件中config-changes标签。

+
+

letter-spacing

+

<length>

+

0px

+

+

设置文本的字符间距。

+

word-spacing7+

+

<length> | <percentage> | string

+

normal

+

+

设置文本之间的间距,string可选值为:

+

normal:默认的字间距。

+

font-style

+

string

+

normal

+

+

设置文本的字体样式,可选值为:

+
  • normal:标准的字体样式;
  • italic:斜体的字体样式。
+

font-weight

+

number | string

+

normal

+

+

设置文本的字体粗细,number类型取值[100, 900],默认为400,取值越大,字体越粗。

+
说明:

number取值必须为100的整数倍。

+
+

string类型取值支持如下四个值:lighter、normal、bold、bolder。

+

text-decoration

+

string

+

none

+

+

设置文本的文本修饰,可选值为:

+
  • underline:文字下划线修饰;
  • line-through:穿过文本的修饰线n
  • none:标准文本。
+

text-decoration-color7+

+

<color>

+

-

+

+

设置文本修饰线的颜色。

+

text-align

+

string

+

start

+

+

设置文本的文本对齐方式,可选值为:

+
  • left:文本左对齐;
  • center:文本居中对齐;
  • right:文本右对齐;
  • start:根据文字书写相同的方向对齐;
  • end:根据文字书写相反的方向对齐。
+
说明:

如文本宽度未指定大小,文本的宽度和父容器的宽度大小相等的情况下,对齐效果可能会不明显。

+
+

line-height

+

<length> | <percentage>7+ | string7+

+

0px1-6

+

normal7+

+

+

设置文本的文本行高,设置为0px时,不限制文本行高,自适应字体大小。string可选值为:

+

normal7+:默认的行高。

+

text-overflow

+

string

+

clip

+

+

在设置了最大行数的情况下生效,可选值为:

+
  • clip:将文本根据父容器大小进行裁剪显示;
  • ellipsis:根据父容器大小显示,显示不下的文本用省略号代替。需配合max-lines使用。
+

font-family

+

string

+

sans-serif

+

+

设置文本的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

max-lines

+

number | string7+

+

-

+

+

设置文本的最大行数,string类型可选值为:

+
  • auto7+:文本行数自适应容器高度。
+

min-font-size

+

<length>

+

-

+

+

文本最小字号,需要和文本最大字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

+

max-font-size

+

<length>

+

-

+

+

文本最大字号,需要和文本最小字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

+

font-size-step

+

<length>

+

1px

+

+

文本动态调整字号时的步长,需要设置最小,最大字号样式生效。

+

prefer-font-sizes

+

<array>

+

-

+

+

预设的字号集合,在动态尺寸调整时,优先使用预设字号集合中的字号匹配设置的最大行数,如果预设字号集合未设置,则使用最大最小和步长调整字号。针对仍然无法满足最大行数要求的情况,使用text-overflow设置项进行截断,设置预设尺寸集后,font-size、max-font-size、min-font-size和font-size-step不生效。

+

如:prefer-font-sizes: 12px,14px,16px

+

word-break6+

+

string

+

normal

+

+

设置文本折行模式,可选值为:

+
  • normal:默认换行规则,依据各自语言的规则,允许在字间发生换行。
  • break-all:对于非中文/日文/韩文的文本,可在任意字符间断行。
  • break-word:与break-all相同,不同的地方在于它要求一个没有断行破发点的词必须保持为一个整体单位。
+

text-indent7+

+

<length>

+

-

+

+

设置首行缩进量。

+

white-space7+

+

string

+

pre

+

+

设置处理元素中空白的模式,可选值为:

+
  • normal:所有空格、回车、制表符都合并成一个空格,文本自动换行;
  • nowrap:所有空格、回车、制表符都合并成一个空格,文本不换行;
  • pre:所有东西原样输出;
  • pre-wrap:所有东西原样输出,文本换行;
  • pre-line:所有空格、制表符合并成一个空格,回车不变,文本换行。
+

adapt-height7+

+

boolean

+

false

+

+

文本大小是否自适应容器高度。

+
说明:

设置字体大小自适应相关样式后生效。

+
+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 字体动态缩放:预设尺寸集合和最小最大字号调节基于是否满足最大行数要求,预设尺寸集合会按照从左到右顺序查看是否满足最大行数要求,最小最大字号调节则基于从大到小顺序查看是否满足最大行数要求。 +>- 文本换行:文本可以通过转义字符\\r\\n进行换行。 +>- 文本标签内支持以下转义字符:\\a,\\b,\\f,\\n,\\r,\\t,\\v,\\',\\",\\0。 +>- 当使用子组件span组成文本段落时,如果span属性样式异常,将导致text段落无法显示。 +>- letter-spacing、text-align、line-height、text-overflow和max-lines样式作用于text及其子组件(span)组成的文本内容。 +>- text组件说明:不支持text内同时存在文本内容和span子组件。(如果同时存在,只显示span内的内容\) + +## 事件 + +支持[通用事件](/pages/010c0201010103)。 + +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +``` + +
+
+ + Hello {{ title }} + +
+
+``` + +``` +/* xxx.css */ +.container { + display: flex; + justify-content: center; + align-items: center; +} +.content{ + width: 400px; + height: 400px; + border: 20px; + border-image-source: url("/common/images/landscape.jpg"); + border-image-slice: 20px; + border-image-width: 30px; + border-image-outset: 10px; + border-image-repeat: round; +} +.title { + font-size: 80px; + text-align: center; + width: 400px; + height: 400px; +} +``` + +``` +// xxx.js +export default { + data: { + title: 'World' + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/3.png) + +``` + +
+ + This is a passage + + + This is a passage + +
+``` + +``` +/* xxx.css */ +.container { + flex-direction: column; + align-items: center; + background-color: #F1F3F5; + justify-content: center; +} +.text1{ + word-spacing: 10px; + adapt-height: true; +} +.text2{ + width: 200px; + max-lines: 1; + text-overflow: ellipsis; + text-valign: middle; + line-height: 40px; + text-decoration: underline; + text-decoration-color: red; + text-indent: 20px; + white-space: pre; +} +``` + +![](/images/application-dev/reference/arkui-js/figures/2.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" new file mode 100644 index 0000000000000000000000000000000000000000..8d815baaf9aafccbb54ead778bfbfa0e062b7ccd --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" @@ -0,0 +1,386 @@ +--- +title: textarea +permalink: /pages/010c0201010318 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# textarea + +多行文本输入的文本框。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

placeholder

+

string

+

-

+

+

多行文本框的提示文本内容。

+

maxlength

+

number

+

-

+

+

多行文本框可输入的最多字符数量。

+

headericon

+

string

+

-

+

+

在文本输入前的图标展示,该图标不支持点击事件,图标格式为jpg,png和svg。

+

extend

+

boolean

+

false

+

+

文本框是否支持可扩展,设置可扩展属性后文本框高度可以跟随文字自适应。

+

value5+

+

string

+

-

+

+

多行文本框的内容。

+

showcounter5+

+

boolean

+

false

+

+

文本框是否需要开启计数下标功能,需要配合maxlength一起使用。

+

menuoptions5+

+

Array<MenuOption>

+

-

+

+

设置文本选择弹框点击更多按钮之后显示的菜单项。

+

autofocus6+

+

boolean

+

false

+

+

是否自动获焦。

+

selectedstart6+

+

number

+

-1

+

+

开始选择文本时初始选择位置。

+

selectedend6+

+

number

+

-1

+

+

开始选择文本时结尾选择位置。

+

softkeyboardenabled6+

+

boolean

+

true

+

+

编辑时是否弹出系统软键盘。

+
+ +**表 1** MenuOption5+ + + + + + + + + + + + + + + + + +

名称

+

类型

+

描述

+

icon

+

string

+

菜单选项中的图标路径。

+

content

+

string

+

菜单选项中的文本内容。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e6000000

+

+

多行文本框的文本颜色。

+

font-size

+

<length>

+

16px

+

+

多行文本框的文本尺寸。

+

allow-scale

+

boolean

+

true

+

+

多行文本框的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+
+

placeholder-color

+

<color>

+

#99000000

+

+

多行文本框的提示文本颜色,type为text|email|date|time|number|password时生效。

+

font-weight

+

number | string

+

normal

+

+

多行文本框的字体粗细,见text组件font-weight的样式属性

+

font-family

+

string

+

sans-serif

+

+

多行文本框的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

caret-color6+

+

<color>

+

-

+

+

设置输入光标的颜色。

+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

change

+

{ text: newText, lines: textLines, height: textHeight }

+

输入内容发生变化时触发该事件,通过参数获取输入内容、行数和行高。

+
说明:

改变value属性值不会触发该回调。5+

+
+

translate5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

+

share5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

+

search5+

+

{ value: selectedText }

+

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

+

optionselect5+

+

{ index:optionIndex, value: selectedText }

+

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

+

selectchange6+

+

{ start: number,end: number }

+

文本选择变化时触发事件。

+
+ +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +``` + + +``` + +``` +/* xxx.css */ +.textarea { + placeholder-color: gray; +} +``` + +``` +// xxx.js +import prompt from '@system.prompt'; +export default { +change(e){ + prompt.showToast({ + message: 'value: ' + e.text + ', lines: ' + e.lines + ', height: ' + e.height, + duration: 3000, + }); +} +} +``` + +![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125124.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" similarity index 75% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" index 035abf72d4cfa25b006074375f93eb947f13d559..4dfda6bddec5420f297928a68d49780944195ef5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/25.toolbar.md" @@ -1,6 +1,6 @@ --- title: toolbar -permalink: /pages/000b0100010218 +permalink: /pages/010c0201010319 navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # toolbar 工具栏。放在界面底部,用于展示针对当前界面的操作选项。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 权限列表 无 @@ -31,14 +28,14 @@ date: 2021-12-30 18:31:38 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持height样式,高度固定为56px。 +>不支持height样式,高度固定为56px。 ## 事件 @@ -50,5 +47,5 @@ date: 2021-12-30 18:31:38 ## 示例 -详见[toolbar-item示例](/pages/000b0100010219)。 +详见[toolbar-item示例](/pages/010c020101031a)。 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" new file mode 100644 index 0000000000000000000000000000000000000000..c27634b17f6a9287cd5fb4efadc5ebfd085e0686 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" @@ -0,0 +1,296 @@ +--- +title: toolbar-item +permalink: /pages/010c020101031a +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# toolbar-item + +工具栏子组件。作为工具栏组件的子组件,用于展示工具栏上的一个操作选项。 + +## 子组件 + +无 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

value

+

string

+

-

+

+

该操作项文本内容。

+

icon

+

string

+

-

+

+

该操作项图标资源路径,该图标展示在选项文本上,支持本地路径,格式为png,jpg和svg。

+
+ +## 样式 + +仅支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

color

+

<color>

+

#e6000000

+

+

文本颜色。

+

font-size

+

<length>

+

16px

+

+

文本大小。

+

allow-scale

+

boolean

+

true

+

+

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+

font-style

+

string

+

normal

+

+

文本字体样式,可选值为:

+
  1. normal: 标准的字体样式;
  2. italic: 斜体的字体样式。
+

font-weight

+

number|string

+

normal

+

+

文本字体粗细,number类型取值[100, 900]的整数(被100整除),默认为400,取值越大,字体越粗。string类型取值为:lighter、normal、bold、bolder。

+

text-decoration

+

string

+

none

+

+

文本修饰,可选值为:

+
  1. underline: 文本下划线修饰;
  2. line-through: 穿过文本的修饰线;
  3. none: 标准文本。
+

font-family

+

string

+

sans-serif

+

+

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

background

+

<linear-gradient>

+

-

+

+

仅支持设置渐变样式,与background-color、background-image不兼容。

+

background-color

+

<color>

+

-

+

+

设置背景颜色。

+

background-image

+

string

+

-

+

+

设置背景图片。与background-color、background不兼容;支持网络图片资源和本地图片资源地址。

+

background-size

+
  • string
  • <length> <length>
  • <percentage> <percentage>
+

auto

+

+

设置背景图片的大小。

+
  • string可选值:
    • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    +
  • length值参数方式:

    设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
  • 百分比参数方式:

    以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    +
+

background-repeat

+

string

+

repeat

+

+

针对重复背景图像样式进行设置,背景图像默认在水平和垂直方向上重复。

+
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
+

background-position

+
  • string string
  • <length> <length>
  • <percentage> <percentage>
+

0px 0px

+

+
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    +
+
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>。
+

opacity

+

number

+

1

+

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

+

display

+

string

+

+

flex

+

+

确定一个元素所产生的框的类型,可选值为:

+
  • flex:弹性布局。
  • none:不渲染此元素。
+

visibility

+

string

+

+

visible

+

+

是否显示元素所产生的框。不可见的框会占用布局(将'display'属性设置为'none'来完全去除框),可选值为:

+
  • visible:元素正常显示。
  • hidden:隐藏元素,但是其他元素的布局不改变,相当于此元素变成透明。
+
说明:

visibility和display样式都设置时,仅display生效。

+
+
+ +## 事件 + +支持[通用事件](/pages/010c0201010103)。 + +## 方法 + +不支持。 + +## 示例 + +``` + + + + + + + + + +``` + +![](/images/application-dev/reference/arkui-js/figures/000000.jpg) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" index 40c35662665df7088a265b4387468bf1739ac80a..37c84afc698172461bd8a95d6c8a4abfb8d2369b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/27.toggle.md" @@ -1,6 +1,6 @@ --- title: toggle -permalink: /pages/000b010001021a +permalink: /pages/010c020101031b navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # toggle 状态按钮用于从一组选项中进行选择,并可能在界面上实时显示选择后的结果。通常这一组选项都是由状态按钮构成。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从 API Version 5 开始支持。 - ## 权限列表 无 @@ -28,41 +25,40 @@ date: 2021-12-30 18:31:38 ## 属性 -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: - -

名称

+ - - - - - - - - - - - - - - @@ -70,87 +66,86 @@ date: 2021-12-30 18:31:38 ## 样式 -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

value

+

value

string

+

string

-

+

-

+

状态按钮的文本值。

+

状态按钮的文本值。

checked

+

checked

boolean

+

boolean

false

+

false

+

状态按钮是否被选中。

+

状态按钮是否被选中。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -158,22 +153,21 @@ date: 2021-12-30 18:31:38 ## 事件 -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

color

+

text-color

<color>

+

<color>

#E5000000

+

#E5000000

+

状态按钮的文本颜色。

+

状态按钮的文本颜色。

font-size

+

font-size

<length>

+

<length>

16px

+

16px

+

状态按钮的文本尺寸。

+

状态按钮的文本尺寸。

allow-scale

+

allow-scale

boolean

+

boolean

true

+

true

+

状态按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

+

状态按钮的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

+
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

font-style

+

font-style

string

+

string

normal

+

normal

+

状态按钮的字体样式。

+

状态按钮的字体样式。

font-weight

+

font-weight

number | string

+

number | string

normal

+

normal

+

状态按钮的字体粗细。见text组件font-weight的样式属性

+

状态按钮的字体粗细。见text组件font-weight的样式属性

font-family

+

font-family

<string>

+

<string>

sans-serif

+

sans-serif

+

状态按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

+

状态按钮的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

名称

+ - - - - - @@ -181,7 +175,7 @@ date: 2021-12-30 18:31:38 ## 方法 -支持[通用方法](/pages/000b0100010003)。 +支持[通用方法](/pages/010c0201010104)。 ## 示例 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" new file mode 100644 index 0000000000000000000000000000000000000000..d8a2dbdd1cfff08f9415382db8958b56b80be972 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" @@ -0,0 +1,249 @@ +--- +title: video +permalink: /pages/010c0201010401 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:52 +--- +# video + +视频播放组件。 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 需要在config.json配置 +> ``` +> "configChanges": ["orientation"] +> ``` + +## 权限列表 + +## 子组件 + +不支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下样式: + +

名称

参数

+

参数

描述

+

描述

change

+

change

{ checked:isChecked }

+

{ checked:isChecked }

组件选中状态发生变化时触发。

+

组件选中状态发生变化时触发。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

muted

+

boolean

+

false

+

+

视频是否静音播放。

+

src

+

string

+

-

+

+

播放视频内容的路径。

+

autoplay

+

boolean

+

false

+

+

视频是否自动播放。

+

controls

+

boolean

+

true

+

+

控制视频播放的控制栏是否显示,如果设置为false,则不显示控制栏。默认为true,由系统决定显示或隐藏控制栏。

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

object-fit

+

string

+

contain

+

+

视频源的缩放类型,如果poster设置了值,那么此配置还会影响视频海报的缩放类型,可选值参考表1

+
+ +**表 1** object-fit 类型说明 + + + + + + + + + + +

类型

+

描述

+

fill

+

不保持宽高比进行放大缩小,使得图片填充满显示边界。

+
+ +## 事件 + +除支持[通用事件](/pages/010c0201010103)外,还支持如下事件: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

prepared

+

{ duration: value }5+

+

视频准备完成时触发该事件,通过duration可以获取视频时长,单位为s。

+

start

+

-

+

播放时触发该事件。

+

pause

+

-

+

暂停时触发该事件。

+

finish

+

-

+

播放结束时触发该事件。

+

error

+

-

+

播放失败时触发该事件。

+

seeking

+

{ currenttime: value }

+

操作进度条过程时上报时间信息,单位为s。

+

seeked

+

{ currenttime: value }

+

操作进度条完成后,上报播放时间信息,单位为s。

+

timeupdate

+

{ currenttime: value }

+

播放进度变化时触发该事件,单位为s,更新时间间隔为250ms。

+
+ +## 方法 + +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

start

+

-

+

请求播放视频。

+

pause

+

-

+

请求暂停播放视频。

+

setCurrentTime

+

{ currenttime: value }

+

指定视频播放的进度位置,单位为s。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>在attached组件生命周期回调后,可以调用上述组件方法。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" index 6df3773d35bee1b507039898f7ea3f0f69871218..3a99eabc19d50f8309273a7532fb68672c2b0e6e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.canvas\347\273\204\344\273\266.md" @@ -1,6 +1,6 @@ --- title: canvas组件 -permalink: /pages/000b0100010400 +permalink: /pages/010c0201010501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # canvas组件 @@ -25,55 +25,54 @@ date: 2021-12-30 18:31:38 ## 属性 -支持[通用属性](/pages/000b0100010000)。 +支持[通用属性](/pages/010c0201010101)。 ## 样式 -支持[通用样式](/pages/000b0100010001)。 +支持[通用样式](/pages/010c0201010102)。 ## 事件 -支持[通用事件](/pages/000b0100010002)。 +支持[通用事件](/pages/010c0201010103)。 ## 方法 -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: -### getContext\(type: '2d', options?: ContextAttrOptions\) +### getContext -getContext \(type: '2d', options?: ContextAttrOptions\): CanvasRendering2dContext +getContext\(type: '2d', options?: ContextAttrOptions\): CanvasRendering2dContext 获取canvas绘图上下文。不支持在onInit和onReady中进行调用。 - 参数 - -

参数名

+ - - - - - - - - - - - @@ -82,19 +81,19 @@ getContext \(type: '2d', options?: ContextAttrOptions\): CanvasRendering2dCont **表 1** ContextAttrOptions -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

type

+

type

string

+

string

+

可选值为'2d',返回值为2D绘制对象,该对象提供具体的2D绘制操作。

+

设置为'2d',返回值为2D绘制对象,该对象可用于在画布组件上绘制矩形、文本、图片等。

options6+

+

options6+

ContextAttrOptions

+

ContextAttrOptions

+

具体表现为当前仅支持配置是否开启抗锯齿功能,默认为关闭。

+

当前仅支持配置是否开启抗锯齿功能,默认为关闭。

参数名

+ - - - - - @@ -102,16 +101,15 @@ getContext \(type: '2d', options?: ContextAttrOptions\): CanvasRendering2dCont - 返回值 - -

参数名

类型

+

类型

说明

+

说明

antialias

+

antialias

boolean

+

boolean

是否开启抗锯齿功能,默认为false。

+

是否开启抗锯齿功能,默认为false。

类型

+ - - - @@ -126,33 +124,32 @@ toDataURL\(type?: string, quality?: number\): string - 参数 - -

类型

说明

+

说明

CanvasRenderingContext2D

+

CanvasRenderingContext2D

用于在画布组件上绘制矩形、文本、图片等

+

用于在画布组件上绘制矩形、文本、图片等

参数名

+ - - - - - - - - - - - @@ -160,16 +157,15 @@ toDataURL\(type?: string, quality?: number\): string - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

type

+

type

string

+

string

+

可选参数,用于指定图像格式,默认格式为image/png。

+

可选参数,用于指定图像格式,默认格式为image/png。

quality

+

quality

number

+

number

+

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。

+

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。

类型

+ - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" index 44de5b7cdd5fd8f85c439a89178a2a44006274cd..11cc41cd34d5322075f063cc825044b222683d80 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: CanvasRenderingContext2D对象 -permalink: /pages/000b0100010401 +permalink: /pages/010c0201010502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # CanvasRenderingContext2D对象 @@ -58,178 +58,177 @@ date: 2021-12-30 18:31:38 ## 属性 - -

类型

说明

+

说明

string

+

string

图像的URL地址。

+

图像的URL地址。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -238,8 +237,22 @@ date: 2021-12-30 18:31:38 ### fillStyle ``` -ctx.fillStyle = '#0000ff'; -ctx.fillRect(20, 20, 150, 100); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = '#0000ff'; + ctx.fillRect(20, 20, 150, 100); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166962736.png) @@ -247,8 +260,22 @@ ctx.fillRect(20, 20, 150, 100); ### lineWidth ``` -ctx.lineWidth = 5; -ctx.strokeRect(25, 25, 85, 105); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.lineWidth = 5; + ctx.strokeRect(25, 25, 85, 105); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001166484430.png) @@ -256,9 +283,23 @@ ctx.strokeRect(25, 25, 85, 105); ### strokeStyle ``` -ctx.lineWidth = 10; -ctx.strokeStyle = '#0000ff'; -ctx.strokeRect(25, 25, 155, 105); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.lineWidth = 10; + ctx.strokeStyle = '#0000ff'; + ctx.strokeRect(25, 25, 155, 105); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001212124299.png) @@ -266,12 +307,26 @@ ctx.strokeRect(25, 25, 155, 105); ### lineCap ``` -ctx.lineWidth = 8; -ctx.beginPath(); -ctx.lineCap = 'round'; -ctx.moveTo(30, 50); -ctx.lineTo(220, 50); -ctx.stroke(); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.lineWidth = 8; + ctx.beginPath(); + ctx.lineCap = 'round'; + ctx.moveTo(30, 50); + ctx.lineTo(220, 50); + ctx.stroke(); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214837127.png) @@ -279,13 +334,27 @@ ctx.stroke(); ### lineJoin ``` -ctx.beginPath(); -ctx.lineWidth = 8; -ctx.lineJoin = 'miter'; -ctx.moveTo(30, 30); -ctx.lineTo(120, 60); -ctx.lineTo(30, 110); -ctx.stroke(); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.lineWidth = 8; + ctx.lineJoin = 'miter'; + ctx.moveTo(30, 30); + ctx.lineTo(120, 60); + ctx.lineTo(30, 110); + ctx.stroke(); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214717247.png) @@ -293,13 +362,27 @@ ctx.stroke(); ### miterLimit ``` -ctx.lineWidth = 8; -ctx.lineJoin = 'miter'; -ctx.miterLimit = 3; -ctx.moveTo(30, 30); -ctx.lineTo(60, 35); -ctx.lineTo(30, 37); -ctx.stroke(); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.lineWidth =14; + ctx.lineJoin = 'miter'; + ctx.miterLimit = 3; + ctx.moveTo(30, 30); + ctx.lineTo(120, 60); + ctx.lineTo(30, 70); + ctx.stroke(); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167001464.png) @@ -307,8 +390,22 @@ ctx.stroke(); ### font ``` -ctx.font = '30px sans-serif'; -ctx.fillText("Hello World", 20, 60); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.font = '30px sans-serif'; + ctx.fillText("Hello World", 20, 60); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167046832.png) @@ -316,24 +413,38 @@ ctx.fillText("Hello World", 20, 60); ### textAlign ``` -ctx.strokeStyle = '#0000ff'; -ctx.moveTo(140, 10); -ctx.lineTo(140, 160); -ctx.stroke(); + +
+ +
+``` -ctx.font = '18px sans-serif'; +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.strokeStyle = '#0000ff'; + ctx.moveTo(140, 10); + ctx.lineTo(140, 160); + ctx.stroke(); -// Show the different textAlign values -ctx.textAlign = 'start'; -ctx.fillText('textAlign=start', 140, 60); -ctx.textAlign = 'end'; -ctx.fillText('textAlign=end', 140, 80); -ctx.textAlign = 'left'; -ctx.fillText('textAlign=left', 140, 100); -ctx.textAlign = 'center'; -ctx.fillText('textAlign=center',140, 120); -ctx.textAlign = 'right'; -ctx.fillText('textAlign=right',140, 140); + ctx.font = '18px sans-serif'; + + // Show the different textAlign values + ctx.textAlign = 'start'; + ctx.fillText('textAlign=start', 140, 60); + ctx.textAlign = 'end'; + ctx.fillText('textAlign=end', 140, 80); + ctx.textAlign = 'left'; + ctx.fillText('textAlign=left', 140, 100); + ctx.textAlign = 'center'; + ctx.fillText('textAlign=center',140, 120); + ctx.textAlign = 'right'; + ctx.fillText('textAlign=right',140, 140); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167472798.png) @@ -341,23 +452,37 @@ ctx.fillText('textAlign=right',140, 140); ### textBaseline ``` -ctx.strokeStyle = '#0000ff'; -ctx.moveTo(0, 120); -ctx.lineTo(400, 120); -ctx.stroke(); + +
+ +
+``` -ctx.font = '20px sans-serif'; +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.strokeStyle = '#0000ff'; + ctx.moveTo(0, 120); + ctx.lineTo(400, 120); + ctx.stroke(); -ctx.textBaseline = 'top'; -ctx.fillText('Top', 10, 120); -ctx.textBaseline = 'bottom'; -ctx.fillText('Bottom', 55, 120); -ctx.textBaseline = 'middle'; -ctx.fillText('Middle', 125, 120); -ctx.textBaseline = 'alphabetic'; -ctx.fillText('Alphabetic', 195, 120); -ctx.textBaseline = 'hanging'; -ctx.fillText('Hanging', 295, 120); + ctx.font = '20px sans-serif'; + + ctx.textBaseline = 'top'; + ctx.fillText('Top', 10, 120); + ctx.textBaseline = 'bottom'; + ctx.fillText('Bottom', 55, 120); + ctx.textBaseline = 'middle'; + ctx.fillText('Middle', 125, 120); + ctx.textBaseline = 'alphabetic'; + ctx.fillText('Alphabetic', 195, 120); + ctx.textBaseline = 'hanging'; + ctx.fillText('Hanging', 295, 120); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169315920.png) @@ -365,11 +490,26 @@ ctx.fillText('Hanging', 295, 120); ### globalAlpha ``` -ctx.fillStyle = 'rgb(255,0,0)'; -ctx.fillRect(0, 0, 50, 50); -ctx.globalAlpha = 0.4; -ctx.fillStyle = 'rgb(0,0,255)'; -ctx.fillRect(50, 50, 50, 50); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(0, 0, 50, 50); + ctx.globalAlpha = 0.4; + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(50, 50, 50, 50); + + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167953648.png) @@ -377,10 +517,24 @@ ctx.fillRect(50, 50, 50, 50); ### lineDashOffset ``` -ctx.arc(100, 75, 50, 0, 6.28); -ctx.setLineDash([10,20]); -ctx.lineDashOffset = 10.0; -ctx.stroke(); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.arc(100, 75, 50, 0, 6.28); + ctx.setLineDash([10,20]); + ctx.lineDashOffset = 10.0; + ctx.stroke(); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167950468.png) @@ -389,66 +543,65 @@ ctx.stroke(); - 类型字段说明 - -

名称

类型

+

类型

默认值

+

默认值

描述

+

描述

fillStyle

+

fillStyle

<color> | CanvasGradient | CanvasPattern

+

<color> | CanvasGradient | CanvasPattern

-

+

-

指定绘制的填充色。

-
  • 类型为<color>时,表示设置填充区域的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用 createLinearGradient()方法创建。
  • 类型为CanvasPattern时,使用 createPattern()方法创建。
+

指定绘制的填充色。

+
  • 类型为<color>时,表示设置填充区域的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用 createLinearGradient()方法创建。
  • 类型为CanvasPattern时,使用 createPattern()方法创建。

lineWidth

+

lineWidth

number

+

number

-

+

-

设置绘制线条的宽度。

+

设置绘制线条的宽度。

strokeStyle

+

strokeStyle

<color> | CanvasGradient | CanvasPattern

+

<color> | CanvasGradient | CanvasPattern

-

+

-

设置描边的颜色。

-
  • 类型为<color>时,表示设置描边使用的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用 createLinearGradient()方法创建。
  • 类型为CanvasPattern时,使用 createPattern()方法创建。
+

设置描边的颜色。

+
  • 类型为<color>时,表示设置描边使用的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用 createLinearGradient()方法创建。
  • 类型为CanvasPattern时,使用 createPattern()方法创建。

lineCap

+

lineCap

string

+

string

butt

+

butt

指定线端点的样式,可选值为:

-
  • butt:线端点以方形结束。
  • round:线端点以圆形结束。
  • square:线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。
+

指定线端点的样式,可选值为:

+
  • butt:线端点以方形结束。
  • round:线端点以圆形结束。
  • square:线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。

lineJoin

+

lineJoin

string

+

string

miter

+

miter

指定线段间相交的交点样式,可选值为:

-
  • round:在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。
  • bevel:在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。
  • miter:在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。
+

指定线段间相交的交点样式,可选值为:

+
  • round:在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。
  • bevel:在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。
  • miter:在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。

miterLimit

+

miterLimit

number

+

number

10

+

10

设置斜接面限制值,该值指定了线条相交处内角和外角的距离。

+

设置斜接面限制值,该值指定了线条相交处内角和外角的距离。

font

+

font

string

+

string

"normal normal 14px sans-serif"

+

"normal normal 14px sans-serif"

设置文本绘制中的字体样式。

-

语法:ctx.font="font-style font-weight font-size font-family"5+

-
  • font-style(可选),用于指定字体样式,支持如下几种样式:normal, italic。
  • font-weight(可选),用于指定字体的粗细,支持如下几种类型:normal, bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900。
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列,支持如下几种类型:sans-serif, serif, monospace。
+

设置文本绘制中的字体样式。

+

语法:ctx.font="font-style font-weight font-size font-family"5+

+
  • font-style(可选),用于指定字体样式,支持如下几种样式:normal, italic。
  • font-weight(可选),用于指定字体的粗细,支持如下几种类型:normal, bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900。
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列,支持如下几种类型:sans-serif, serif, monospace。

textAlign

+

textAlign

string

+

string

left

+

left

设置文本绘制中的文本对齐方式,可选值为:

-
  • left:文本左对齐。
  • right:文本右对齐。
  • center:文本居中对齐。
  • start:文本对齐界线开始的地方。
  • end:文本对齐界线结束的地方。
-
说明:

ltr布局模式下start和left一致,rtl布局模式下start和right一致·。

+

设置文本绘制中的文本对齐方式,可选值为:

+
  • left:文本左对齐。
  • right:文本右对齐。
  • center:文本居中对齐。
  • start:文本对齐界线开始的地方。
  • end:文本对齐界线结束的地方。
+
说明:

ltr布局模式下start和left一致,rtl布局模式下start和right一致·。

textBaseline

+

textBaseline

string

+

string

alphabetic

+

alphabetic

设置文本绘制中的水平对齐方式,可选值为:

-
  • alphabetic:文本基线是标准的字母基线。
  • top:文本基线在文本块的顶部。
  • hanging:文本基线是悬挂基线。
  • middle:文本基线在文本块的中间。
  • ideographic:文字基线是表意字基线;如果字符本身超出了alphabetic 基线,那么ideograhpic基线位置在字符本身的底部。
  • bottom:文本基线在文本块的底部。 与 ideographic 基线的区别在于 ideographic 基线不需要考虑下行字母。
+

设置文本绘制中的水平对齐方式,可选值为:

+
  • alphabetic:文本基线是标准的字母基线。
  • top:文本基线在文本块的顶部。
  • hanging:文本基线是悬挂基线。
  • middle:文本基线在文本块的中间。
  • ideographic:文字基线是表意字基线;如果字符本身超出了alphabetic 基线,那么ideographic基线位置在字符本身的底部。
  • bottom:文本基线在文本块的底部。 与 ideographic 基线的区别在于 ideographic 基线不需要考虑下行字母。

globalAlpha

+

globalAlpha

number

+

number

-

+

-

设置透明度,0.0为完全透明,1.0为完全不透明。

+

设置透明度,0.0为完全透明,1.0为完全不透明。

lineDashOffset

+

lineDashOffset

number

+

number

0.0

+

0.0

设置画布的虚线偏移量,精度为float。

+

设置画布的虚线偏移量,精度为float。

globalCompositeOperation

+

globalCompositeOperation

string

+

string

source-over

+

source-over

设置合成操作的方式。类型字段可选值有source-over,source-atop,source-in,source-out,destination-over,destination-atop,destination-in,destination-out,lighter,copy,xor。具体请参考类型字段说明

+

设置合成操作的方式。类型字段可选值有source-over,source-atop,source-in,source-out,destination-over,destination-atop,destination-in,destination-out,lighter,copy,xor。具体请参考类型字段说明

shadowBlur

+

shadowBlur

number

+

number

0.0

+

0.0

设置绘制阴影时的模糊级别,值越大越模糊,精度为float。

+

设置绘制阴影时的模糊级别,值越大越模糊,精度为float。

shadowColor

+

shadowColor

<color>

+

<color>

-

+

-

设置绘制阴影时的阴影颜色。

+

设置绘制阴影时的阴影颜色。

shadowOffsetX

+

shadowOffsetX

number

+

number

-

+

-

设置绘制阴影时和原有对象的水平偏移值。

+

设置绘制阴影时和原有对象的水平偏移值。

shadowOffsetY

+

shadowOffsetY

number

+

number

-

+

-

设置绘制阴影时和原有对象的垂直偏移值。

+

设置绘制阴影时和原有对象的垂直偏移值。

imageSmoothingEnabled6+

+

imageSmoothingEnabled6+

boolean

+

boolean

true

+

true

用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。

+

用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。

+ - - - - - - - - - - - - - - - - - - - - - - - @@ -458,17 +611,31 @@ ctx.stroke(); - 示例 ``` - ctx.fillStyle = 'rgb(255,0,0)'; - ctx.fillRect(20, 20, 50, 50); - ctx.globalCompositeOperation = 'source-over'; - ctx.fillStyle = 'rgb(0,0,255)'; - ctx.fillRect(50, 50, 50, 50); - // Start drawing second example - ctx.fillStyle = 'rgb(255,0,0)'; - ctx.fillRect(120, 20, 50, 50); - ctx.globalCompositeOperation = 'destination-over'; - ctx.fillStyle = 'rgb(0,0,255)'; - ctx.fillRect(150, 50, 50, 50); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(20, 20, 50, 50); + ctx.globalCompositeOperation = 'source-over'; + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(50, 50, 50, 50); + // Start drawing second example + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(120, 20, 50, 50); + ctx.globalCompositeOperation = 'destination-over'; + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(150, 50, 50, 50); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213192781.png) @@ -479,10 +646,24 @@ ctx.stroke(); ### shadowBlur ``` -ctx.shadowBlur = 30; -ctx.shadowColor = 'rgb(0,0,0)'; -ctx.fillStyle = 'rgb(255,0,0)'; -ctx.fillRect(20, 20, 100, 80); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.shadowBlur = 30; + ctx.shadowColor = 'rgb(0,0,0)'; + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(20, 20, 100, 80); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111514.png) @@ -490,10 +671,24 @@ ctx.fillRect(20, 20, 100, 80); ### shadowColor ``` -ctx.shadowBlur = 30; -ctx.shadowColor = 'rgb(0,0,255)'; -ctx.fillStyle = 'rgb(255,0,0)'; -ctx.fillRect(30, 30, 100, 100); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.shadowBlur = 30; + ctx.shadowColor = 'rgb(0,0,255)'; + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(30, 30, 100, 100); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168111610.png) @@ -501,11 +696,25 @@ ctx.fillRect(30, 30, 100, 100); ### shadowOffsetX ``` -ctx.shadowBlur = 10; -ctx.shadowOffsetX = 20; -ctx.shadowColor = 'rgb(0,0,0)'; -ctx.fillStyle = 'rgb(255,0,0)'; -ctx.fillRect(20, 20, 100, 80); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.shadowBlur = 10; + ctx.shadowOffsetX = 20; + ctx.shadowColor = 'rgb(0,0,0)'; + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(20, 20, 100, 80); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001167631876.png) @@ -513,11 +722,25 @@ ctx.fillRect(20, 20, 100, 80); ### shadowOffsetY ``` -ctx.shadowBlur = 10; -ctx.shadowOffsetY = 20; -ctx.shadowColor = 'rgb(0,0,0)'; -ctx.fillStyle = 'rgb(255,0,0)'; -ctx.fillRect(30, 30, 100, 100); + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.shadowBlur = 10; + ctx.shadowOffsetY = 20; + ctx.shadowColor = 'rgb(0,0,0)'; + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(30, 30, 100, 100); + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001213193285.png) @@ -525,12 +748,26 @@ ctx.fillRect(30, 30, 100, 100); ### imageSmoothingEnabled6+ ``` -var img = new Image(); -img.src = 'common/image/example.jpg'; -img.onload = function() { - ctx.imageSmoothingEnabled = false; - ctx.drawImage(img, 0, 0, 400, 200); -}; + +
+ +
+``` + +``` +//xxx.js +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var img = new Image(); + img.src = 'common/image/example.jpg'; + img.onload = function() { + ctx.imageSmoothingEnabled = false; + ctx.drawImage(img, 0, 0, 400, 200); + }; + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/smoothOff.png) @@ -545,41 +782,40 @@ fillRect\(x: number, y: number, width:number, height: number\): void - 参数 - -

描述

+

描述

source-over

+

source-over

在现有绘制内容上显示新绘制内容,属于默认值。

+

在现有绘制内容上显示新绘制内容,属于默认值。

source-atop

+

source-atop

在现有绘制内容顶部显示新绘制内容。

+

在现有绘制内容顶部显示新绘制内容。

source-in

+

source-in

在现有绘制内容中显示新绘制内容。

+

在现有绘制内容中显示新绘制内容。

source-out

+

source-out

在现有绘制内容之外显示新绘制内容。

+

在现有绘制内容之外显示新绘制内容。

destination-over

+

destination-over

在新绘制内容上方显示现有绘制内容。

+

在新绘制内容上方显示现有绘制内容。

destination-atop

+

destination-atop

在新绘制内容顶部显示现有绘制内容。

+

在新绘制内容顶部显示现有绘制内容。

destination-in

+

destination-in

在新绘制内容中显示现有绘制内容。

+

在新绘制内容中显示现有绘制内容。

destination-out

+

destination-out

在新绘制内容外显示现有绘制内容。

+

在新绘制内容外显示现有绘制内容。

lighter

+

lighter

显示新绘制内容和现有绘制内容。

+

显示新绘制内容和现有绘制内容。

copy

+

copy

显示新绘制内容而忽略现有绘制内容。

+

显示新绘制内容而忽略现有绘制内容。

xor

+

xor

使用异或操作对新绘制内容与现有绘制内容进行融合。

+

使用异或操作对新绘制内容与现有绘制内容进行融合。

参数

+ - - - - - - - - - - - - - - @@ -588,7 +824,21 @@ fillRect\(x: number, y: number, width:number, height: number\): void - 示例 ``` - ctx.fillRect(20, 20, 200, 150); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillRect(20, 20, 200, 150); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214811029.png) @@ -602,41 +852,40 @@ clearRect\(x: number, y: number, width:number, height: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定矩形左上角点的x坐标。

+

指定矩形左上角点的x坐标。

y

+

y

number

+

number

指定矩形左上角点的y坐标。

+

指定矩形左上角点的y坐标。

width

+

width

number

+

number

指定矩形的宽度。

+

指定矩形的宽度。

height

+

height

number

+

number

指定矩形的高度。

+

指定矩形的高度。

参数

+ - - - - - - - - - - - - - - @@ -645,9 +894,23 @@ clearRect\(x: number, y: number, width:number, height: number\): void - 示例 ``` - ctx.fillStyle = 'rgb(0,0,255)'; - ctx.fillRect(0, 0, 400, 200); - ctx.clearRect(20, 20, 150, 100); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(0, 0, 400, 200); + ctx.clearRect(20, 20, 150, 100); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214619417.png) @@ -661,41 +924,40 @@ strokeRect\(x: number, y: number, width:number, height: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定矩形上的左上角x坐标。

+

指定矩形上的左上角x坐标。

y

+

y

number

+

number

指定矩形上的左上角y坐标。

+

指定矩形上的左上角y坐标。

width

+

width

number

+

number

指定矩形的宽度。

+

指定矩形的宽度。

height

+

height

number

+

number

指定矩形的高度。

+

指定矩形的高度。

参数

+ - - - - - - - - - - - - - - @@ -704,7 +966,21 @@ strokeRect\(x: number, y: number, width:number, height: number\): void - 示例 ``` - ctx.strokeRect(30, 30, 200, 150); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.strokeRect(30, 30, 200, 150); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214822091.png) @@ -718,34 +994,33 @@ fillText\(text: string, x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定矩形的左上角x坐标。

+

指定矩形的左上角x坐标。

y

+

y

number

+

number

指定矩形的左上角y坐标。

+

指定矩形的左上角y坐标。

width

+

width

number

+

number

指定矩形的宽度。

+

指定矩形的宽度。

height

+

height

number

+

number

指定矩形的高度。

+

指定矩形的高度。

参数

+ - - - - - - - - - - - @@ -754,8 +1029,22 @@ fillText\(text: string, x: number, y: number\): void - 示例 ``` - ctx.font = '35px sans-serif'; - ctx.fillText("Hello World!", 20, 60); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.font = '35px sans-serif'; + ctx.fillText("Hello World!", 10, 60); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214469787.png) @@ -769,34 +1058,33 @@ strokeText\(text: string, x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

text

+

text

string

+

string

需要绘制的文本内容。

+

需要绘制的文本内容。

x

+

x

number

+

number

需要绘制的文本的左下角x坐标。

+

需要绘制的文本的左下角x坐标。

y

+

y

number

+

number

需要绘制的文本的左下角y坐标。

+

需要绘制的文本的左下角y坐标。

参数

+ - - - - - - - - - - - @@ -805,8 +1093,22 @@ strokeText\(text: string, x: number, y: number\): void - 示例 ``` - ctx.font = '25px sans-serif'; - ctx.strokeText("Hello World!", 20, 60); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.font = '25px sans-serif'; + ctx.strokeText("Hello World!", 10, 60); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214460669.png) @@ -820,20 +1122,19 @@ measureText\(text: string\): TextMetrics - 参数 - -

参数

类型

+

类型

描述

+

描述

text

+

text

string

+

string

需要绘制的文本内容。

+

需要绘制的文本内容。

x

+

x

number

+

number

需要绘制的文本的左下角x坐标。

+

需要绘制的文本的左下角x坐标。

y

+

y

number

+

number

需要绘制的文本的左下角y坐标。

+

需要绘制的文本的左下角y坐标。

参数

+ - - - - - @@ -841,16 +1142,15 @@ measureText\(text: string\): TextMetrics - 返回值 - -

参数

类型

+

类型

描述

+

描述

text

+

text

string

+

string

需要进行测量的文本。

+

需要进行测量的文本。

类型

+ - - - @@ -859,10 +1159,24 @@ measureText\(text: string\): TextMetrics - 示例 ``` - ctx.font = '25px sans-serif'; - var txt = 'Hello World'; - ctx.fillText("width:" + ctx.measureText(txt).width, 20, 60); - ctx.fillText(txt, 20, 110); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.font = '20px sans-serif'; + var txt = 'Hello World'; + ctx.fillText("width:" + ctx.measureText(txt).width, 20, 60); + ctx.fillText(txt, 20, 110); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169142476.png) @@ -877,13 +1191,28 @@ stroke\(\): void - 示例 ``` - ctx.moveTo(25, 25); - ctx.lineTo(25, 105); - ctx.strokeStyle = 'rgb(0,0,255)'; - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.moveTo(25, 25); + ctx.lineTo(25, 250); + ctx.lineWidth = '6'; + ctx.strokeStyle = 'rgb(0,0,255)'; + ctx.stroke(); + } + } ``` - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169309930.png) + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001236697937.png) ### beginPath @@ -895,12 +1224,26 @@ beginPath\(\): void - 示例 ``` - ctx.beginPath(); - ctx.lineWidth = '6'; - ctx.strokeStyle = '#0000ff'; - ctx.moveTo(15, 80); - ctx.lineTo(280, 160); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.lineWidth = '6'; + ctx.strokeStyle = '#0000ff'; + ctx.moveTo(15, 80); + ctx.lineTo(280, 80); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214629745.png) @@ -914,27 +1257,26 @@ moveTo\(x: number, y: number\): void - 参数 - -

类型

说明

+

说明

TextMetrics

+

TextMetrics

包含指定字体的宽度,该宽度可以通过TextMetrics.width来获取。

+

包含指定字体的宽度,该宽度可以通过TextMetrics.width来获取。

参数

+ - - - - - - - - @@ -943,10 +1285,24 @@ moveTo\(x: number, y: number\): void - 示例 ``` - ctx.beginPath(); - ctx.moveTo(10, 10); - ctx.lineTo(280, 160); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.moveTo(10, 10); + ctx.lineTo(280, 160); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169309948.png) @@ -960,27 +1316,26 @@ lineTo\(x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定位置的x坐标。

+

指定位置的x坐标。

y

+

y

number

+

number

指定位置的y坐标。

+

指定位置的y坐标。

参数

+ - - - - - - - - @@ -989,10 +1344,24 @@ lineTo\(x: number, y: number\): void - 示例 ``` - ctx.beginPath(); - ctx.moveTo(10, 10); - ctx.lineTo(280, 160); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.moveTo(10, 10); + ctx.lineTo(280, 160); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169469914.png) @@ -1007,12 +1376,26 @@ closePath\(\): void - 示例 ``` - ctx.beginPath(); - ctx.moveTo(30, 30); - ctx.lineTo(110, 30); - ctx.lineTo(70, 90); - ctx.closePath(); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.moveTo(30, 30); + ctx.lineTo(110, 30); + ctx.lineTo(70, 90); + ctx.closePath(); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169151508.png) @@ -1026,27 +1409,26 @@ createPattern\(image: Image, repetition: string\): Object - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定位置的x坐标。

+

指定位置的x坐标。

y

+

y

number

+

number

指定位置的y坐标。

+

指定位置的y坐标。

参数

+ - - - - - - - - @@ -1054,16 +1436,15 @@ createPattern\(image: Image, repetition: string\): Object - 返回值 - -

参数

类型

+

类型

描述

+

描述

image

+

image

Image

+

Image

图源对象,具体参考Image对象

+

图源对象,具体参考Image对象

repetition

+

repetition

string

+

string

设置图像重复的方式,取值为:'repeat'、'repeat-x'、 'repeat-y'、'no-repeat'。

+

设置图像重复的方式,取值为:'repeat'、'repeat-x'、 'repeat-y'、'no-repeat'。

类型

+ - - - @@ -1072,9 +1453,25 @@ createPattern\(image: Image, repetition: string\): Object - 示例 ``` - var pat = ctx.createPattern(img, 'repeat'); - ctx.fillStyle = pat; - ctx.fillRect(0, 0, 20, 20); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var img = new Image(); + img.src = 'common/images/example.jpg'; + var pat = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pat; + ctx.fillRect(0, 0, 20, 20); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169301188.png) @@ -1088,55 +1485,54 @@ bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number - 参数 - -

类型

说明

+

说明

Object

+

Object

指定图像填充的Pattern对象。

+

指定图像填充的Pattern对象。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -1145,10 +1541,24 @@ bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number - 示例 ``` - ctx.beginPath(); - ctx.moveTo(10, 10); - ctx.bezierCurveTo(20, 100, 200, 100, 200, 20); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.moveTo(10, 10); + ctx.bezierCurveTo(20, 100, 200, 100, 200, 20); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214621177.png) @@ -1162,41 +1572,40 @@ quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

cp1x

+

cp1x

number

+

number

第一个贝塞尔参数的x坐标值。

+

第一个贝塞尔参数的x坐标值。

cp1y

+

cp1y

number

+

number

第一个贝塞尔参数的y坐标值。

+

第一个贝塞尔参数的y坐标值。

cp2x

+

cp2x

number

+

number

第二个贝塞尔参数的x坐标值。

+

第二个贝塞尔参数的x坐标值。

cp2y

+

cp2y

number

+

number

第二个贝塞尔参数的y坐标值。

+

第二个贝塞尔参数的y坐标值。

x

+

x

number

+

number

路径结束时的x坐标值。

+

路径结束时的x坐标值。

y

+

y

number

+

number

路径结束时的y坐标值。

+

路径结束时的y坐标值。

参数

+ - - - - - - - - - - - - - - @@ -1205,10 +1614,24 @@ quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void - 示例 ``` - ctx.beginPath(); - ctx.moveTo(20, 20); - ctx.quadraticCurveTo(100, 100, 200, 20); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.moveTo(20, 20); + ctx.quadraticCurveTo(100, 100, 200, 20); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169461910.png) @@ -1222,55 +1645,54 @@ arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, - 参数 - -

参数

类型

+

类型

描述

+

描述

cpx

+

cpx

number

+

number

贝塞尔参数的x坐标值。

+

贝塞尔参数的x坐标值。

cpy

+

cpy

number

+

number

贝塞尔参数的y坐标值。

+

贝塞尔参数的y坐标值。

x

+

x

number

+

number

路径结束时的x坐标值。

+

路径结束时的x坐标值。

y

+

y

number

+

number

路径结束时的y坐标值。

+

路径结束时的y坐标值。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -1279,9 +1701,23 @@ arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, - 示例 ``` - ctx.beginPath(); - ctx.arc(100, 75, 50, 0, 6.28); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.arc(100, 75, 50, 0, 6.28); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169470288.png) @@ -1295,48 +1731,47 @@ arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

弧线圆心的x坐标值。

+

弧线圆心的x坐标值。

y

+

y

number

+

number

弧线圆心的y坐标值。

+

弧线圆心的y坐标值。

radius

+

radius

number

+

number

弧线的圆半径。

+

弧线的圆半径。

startAngle

+

startAngle

number

+

number

弧线的起始弧度。

+

弧线的起始弧度。

endAngle

+

endAngle

number

+

number

弧线的终止弧度。

+

弧线的终止弧度。

anticlockwise

+

anticlockwise

boolean

+

boolean

是否逆时针绘制圆弧。

+

是否逆时针绘制圆弧。

参数

+ - - - - - - - - - - - - - - - - - @@ -1345,9 +1780,23 @@ arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void - 示例 ``` - ctx.moveTo(100, 20); - ctx.arcTo(150, 20, 150, 70, 50); // Create an arc - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.moveTo(100, 20); + ctx.arcTo(150, 20, 150, 70, 50); // Create an arc + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169143586.png) @@ -1361,69 +1810,68 @@ ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: numbe - 参数 - -

参数

类型

+

类型

描述

+

描述

x1

+

x1

number

+

number

圆弧经过的第一个点的x坐标值。

+

圆弧经过的第一个点的x坐标值。

y1

+

y1

number

+

number

圆弧经过的第一个点的y坐标值。

+

圆弧经过的第一个点的y坐标值。

x2

+

x2

number

+

number

圆弧经过的第二个点的x坐标值。

+

圆弧经过的第二个点的x坐标值。

y2

+

y2

number

+

number

圆弧经过的第二个点的y坐标值。

+

圆弧经过的第二个点的y坐标值。

radius

+

radius

number

+

number

圆弧的圆半径值。

+

圆弧的圆半径值。

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1432,9 +1880,23 @@ ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: numbe - 示例 ``` - ctx.beginPath(); - ctx.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.beginPath(); + ctx.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/ellipse.png) @@ -1448,41 +1910,40 @@ rect\(x: number, y: number, width: number, height: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

椭圆圆心的x轴坐标。

+

椭圆圆心的x轴坐标。

y

+

y

number

+

number

椭圆圆心的y轴坐标。

+

椭圆圆心的y轴坐标。

radiusX

+

radiusX

number

+

number

椭圆x轴的半径长度。

+

椭圆x轴的半径长度。

radiusY

+

radiusY

number

+

number

椭圆y轴的半径长度。

+

椭圆y轴的半径长度。

rotation

+

rotation

number

+

number

椭圆的旋转角度,单位为弧度。

+

椭圆的旋转角度,单位为弧度。

startAngle

+

startAngle

number

+

number

椭圆绘制的起始点角度,以弧度表示。

+

椭圆绘制的起始点角度,以弧度表示。

endAngle

+

endAngle

number

+

number

椭圆绘制的结束点角度,以弧度表示。

+

椭圆绘制的结束点角度,以弧度表示。

anticlockwise

+

anticlockwise

number

+

number

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

+

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

参数

+ - - - - - - - - - - - - - - @@ -1491,8 +1952,22 @@ rect\(x: number, y: number, width: number, height: number\): void - 示例 ``` - ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20) - ctx.stroke(); // Draw it + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20) + ctx.stroke(); // Draw it + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214630783.png) @@ -1507,8 +1982,22 @@ fill\(\): void - 示例 ``` - ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20) - ctx.fill(); // Draw it in default setting + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20) + ctx.fill(); // Draw it in default setting + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214703717.png) @@ -1523,12 +2012,26 @@ clip\(\): void - 示例 ``` - ctx.rect(0, 0, 200, 200); - ctx.stroke(); - ctx.clip(); - // Draw red rectangle after clip - ctx.fillStyle = "rgb(255,0,0)"; - ctx.fillRect(0, 0, 150, 150); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.rect(0, 0, 200, 200); + ctx.stroke(); + ctx.clip(); + // Draw red rectangle after clip + ctx.fillStyle = "rgb(255,0,0)"; + ctx.fillRect(0, 0, 150, 150); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169303414.png) @@ -1542,20 +2045,19 @@ rotate\(rotate: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定矩形的左上角x坐标值。

+

指定矩形的左上角x坐标值。

y

+

y

number

+

number

指定矩形的左上角y坐标值。

+

指定矩形的左上角y坐标值。

width

+

width

number

+

number

指定矩形的宽度。

+

指定矩形的宽度。

height

+

height

number

+

number

指定矩形的高度。

+

指定矩形的高度。

参数

+ - - - - - @@ -1564,8 +2066,22 @@ rotate\(rotate: number\): void - 示例 ``` - ctx.rotate(45 * Math.PI / 180); // Rotate the rectangle 45 degrees - ctx.fillRect(70, 20, 50, 50); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.rotate(45 * Math.PI / 180); // Rotate the rectangle 45 degrees + ctx.fillRect(70, 20, 50, 50); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169463368.png) @@ -1579,27 +2095,26 @@ scale\(x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

rotate

+

rotate

number

+

number

设置顺时针旋转的弧度值,可以通过Math.PI / 180将角度转换为弧度值。

+

设置顺时针旋转的弧度值,可以通过Math.PI / 180将角度转换为弧度值。

参数

+ - - - - - - - - @@ -1608,9 +2123,23 @@ scale\(x: number, y: number\): void - 示例 ``` - ctx.strokeRect(10, 10, 25, 25); - ctx.scale(2, 2);// Scale to 200% - ctx.strokeRect(10, 10, 25, 25); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.strokeRect(10, 10, 25, 25); + ctx.scale(2, 2);// Scale to 200% + ctx.strokeRect(10, 10, 25, 25); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463281.png) @@ -1629,55 +2158,54 @@ transform方法对应一个变换矩阵,想对一个图形进行变化的时 - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

设置水平方向的缩放值。

+

设置水平方向的缩放值。

y

+

y

number

+

number

设置垂直方向的缩放值。

+

设置垂直方向的缩放值。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -1686,14 +2214,28 @@ transform方法对应一个变换矩阵,想对一个图形进行变化的时 - 示例 ``` - ctx.fillStyle = 'rgb(0,0,0)'; - ctx.fillRect(0, 0, 100, 100) - ctx.transform(1, 0.5, -0.5, 1, 10, 10); - ctx.fillStyle = 'rgb(255,0,0)'; - ctx.fillRect(0, 0, 100, 100); - ctx.transform(1, 0.5, -0.5, 1, 10, 10); - ctx.fillStyle = 'rgb(0,0,255)'; - ctx.fillRect(0, 0, 100, 100); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = 'rgb(0,0,0)'; + ctx.fillRect(0, 0, 100, 100) + ctx.transform(1, 0.5, -0.5, 1, 10, 10); + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(0, 0, 100, 100); + ctx.transform(1, 0.5, -0.5, 1, 10, 10); + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(0, 0, 100, 100); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623227.png) @@ -1707,55 +2249,54 @@ setTransfrom方法使用的参数和transform\(\)方法相同,但setTransform\ - 参数 - -

参数

类型

+

类型

描述

+

描述

scaleX

+

scaleX

number

+

number

指定水平缩放值。

+

指定水平缩放值。

skewX

+

skewX

number

+

number

指定水平倾斜值。

+

指定水平倾斜值。

skewY

+

skewY

number

+

number

指定垂直倾斜值。

+

指定垂直倾斜值。

scaleY

+

scaleY

number

+

number

指定垂直缩放值。

+

指定垂直缩放值。

translateX

+

translateX

number

+

number

指定水平移动值。

+

指定水平移动值。

translateY

+

translateY

number

+

number

指定垂直移动值。

+

指定垂直移动值。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -1764,11 +2305,25 @@ setTransfrom方法使用的参数和transform\(\)方法相同,但setTransform\ - 示例 ``` - ctx.fillStyle = 'rgb(255,0,0)'; - ctx.fillRect(0, 0, 100, 100) - ctx.setTransform(1,0.5, -0.5, 1, 10, 10); - ctx.fillStyle = 'rgb(0,0,255)'; - ctx.fillRect(0, 0, 100, 100); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillStyle = 'rgb(255,0,0)'; + ctx.fillRect(0, 0, 100, 100) + ctx.setTransform(1,0.5, -0.5, 1, 10, 10); + ctx.fillStyle = 'rgb(0,0,255)'; + ctx.fillRect(0, 0, 100, 100); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984880.png) @@ -1782,27 +2337,26 @@ translate\(x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

scaleX

+

scaleX

number

+

number

指定水平缩放值。

+

指定水平缩放值。

skewX

+

skewX

number

+

number

指定水平倾斜值。

+

指定水平倾斜值。

skewY

+

skewY

number

+

number

指定垂直倾斜值。

+

指定垂直倾斜值。

scaleY

+

scaleY

number

+

number

指定垂直缩放值。

+

指定垂直缩放值。

translateX

+

translateX

number

+

number

指定水平移动值。

+

指定水平移动值。

translateY

+

translateY

number

+

number

指定垂直移动值。

+

指定垂直移动值。

参数

+ - - - - - - - - @@ -1811,9 +2365,23 @@ translate\(x: number, y: number\): void - 示例 ``` - ctx.fillRect(10, 10, 50, 50); - ctx.translate(70, 70); - ctx.fillRect(10, 10, 50, 50); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillRect(10, 10, 50, 50); + ctx.translate(70, 70); + ctx.fillRect(10, 10, 50, 50); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001169144864.png) @@ -1827,27 +2395,26 @@ createPath2D\(path: Path2D, cmds: string\): Path2D - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

设置水平平移量。

+

设置水平平移量。

y

+

y

number

+

number

设置竖直平移量。

+

设置竖直平移量。

参数

+ - - - - - - - - @@ -1855,21 +2422,35 @@ createPath2D\(path: Path2D, cmds: string\): Path2D - 返回值 - [Path2D对象](/pages/000b0100010405) + [Path2D对象](/pages/010c0201010506) - 示例 ``` - var path1 = ctx.createPath2D(); - path1.moveTo(100, 100); - path1.lineTo(200, 100); - path1.lineTo(100, 200); - path1.closePath(); - ctx.stroke(path1); - var path2 = ctx.createPath2D("M150 150 L50 250 L250 250 Z"); - ctx.stroke(path2); - var path3 = ctx.createPath2D(path2); - ctx.stroke(path3); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path1 = ctx.createPath2D(); + path1.moveTo(100, 100); + path1.lineTo(200, 100); + path1.lineTo(100, 200); + path1.closePath(); + ctx.stroke(path1); + var path2 = ctx.createPath2D("M150 150 L50 250 L250 250 Z"); + ctx.stroke(path2); + var path3 = ctx.createPath2D(path2); + ctx.stroke(path3); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214824709.png) @@ -1883,76 +2464,75 @@ drawImage\(image: Image, sx: number, sy: number, sWidth: number, sHeight: number - 参数 - -

参数

类型

+

类型

描述

+

描述

path

+

path

Path2D

+

Path2D

Path2D对象。

+

Path2D对象。

cmds

+

cmds

string

+

string

SVG的Path描述字符串。

+

SVG的Path描述字符串。

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1961,11 +2541,23 @@ drawImage\(image: Image, sx: number, sy: number, sWidth: number, sHeight: number - 示例 ``` - var test = this.$element('drawImage'); - var ctx = test.getContext('2d'); - var img = new Image(); - img.src = 'common/image/test.jpg'; - ctx.drawImage(img, 50, 80, 80, 80); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + var test = this.$element('drawImage'); + var ctx = test.getContext('2d'); + var img = new Image(); + img.src = 'common/image/test.jpg'; + ctx.drawImage(img, 50, 80, 80, 80); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214704759.png) @@ -1980,7 +2572,21 @@ restore\(\): void - 示例 ``` - ctx.restore(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.restore(); + } + } ``` @@ -1993,7 +2599,21 @@ save\(\): void - 示例 ``` - ctx.save(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.save(); + } + } ``` @@ -2001,45 +2621,44 @@ save\(\): void createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): Object -创建一个线性渐变色,返回CanvasGradient对象,请参考[CanvasGradient对象](/pages/000b0100010403)。 +创建一个线性渐变色,返回CanvasGradient对象,请参考[CanvasGradient对象](/pages/010c0201010504)。 - 参数 - -

参数

类型

+

类型

描述

+

描述

image

+

image

Image

+

Image

图片资源,请参考Image对象

+

图片资源,请参考Image对象

sx

+

sx

number

+

number

裁切源图像时距离源图像左上角的x坐标值。

+

裁切源图像时距离源图像左上角的x坐标值。

sy

+

sy

number

+

number

裁切源图像时距离源图像左上角的y坐标值。

+

裁切源图像时距离源图像左上角的y坐标值。

sWidth

+

sWidth

number

+

number

裁切源图像时需要裁切的宽度。

+

裁切源图像时需要裁切的宽度。

sHeight

+

sHeight

number

+

number

裁切源图像时需要裁切的高度。

+

裁切源图像时需要裁切的高度。

dx

+

dx

number

+

number

绘制区域左上角在x轴的位置。

+

绘制区域左上角在x轴的位置。

dy

+

dy

number

+

number

绘制区域左上角在y 轴的位置。

+

绘制区域左上角在y 轴的位置。

dWidth

+

dWidth

number

+

number

绘制区域的宽度。

+

绘制区域的宽度。

dHeight

+

dHeight

number

+

number

绘制区域的高度。

+

绘制区域的高度。

参数

+ - - - - - - - - - - - - - - @@ -2047,16 +2666,15 @@ createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): Object - 返回值 - -

参数

类型

+

类型

描述

+

描述

x0

+

x0

number

+

number

起点的x轴坐标。

+

起点的x轴坐标。

y0

+

y0

number

+

number

起点的y轴坐标。

+

起点的y轴坐标。

x1

+

x1

number

+

number

终点的x轴坐标。

+

终点的x轴坐标。

y1

+

y1

number

+

number

终点的y轴坐标。

+

终点的y轴坐标。

类型

+ - - - @@ -2066,8 +2684,10 @@ createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): Object ``` - - +
+ + +
``` ``` @@ -2100,55 +2720,54 @@ createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number - 参数 - -

类型

说明

+

说明

Object

+

Object

返回创建的CanvasGradient对象。

+

返回创建的CanvasGradient对象。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -2156,16 +2775,15 @@ createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number - 返回值 - -

参数

类型

+

类型

描述

+

描述

x0

+

x0

number

+

number

起始圆的x轴坐标。

+

起始圆的x轴坐标。

y0

+

y0

number

+

number

起始圆的y轴坐标。

+

起始圆的y轴坐标。

r0

+

r0

number

+

number

起始圆的半径。必须是非负且有限的。

+

起始圆的半径。必须是非负且有限的。

x1

+

x1

number

+

number

终点圆的x轴坐标。

+

终点圆的x轴坐标。

y1

+

y1

number

+

number

终点圆的y轴坐标。

+

终点圆的y轴坐标。

r1

+

r1

number

+

number

终点圆的半径。必须为非负且有限的。

+

终点圆的半径。必须为非负且有限的。

类型

+ - - - @@ -2175,8 +2793,10 @@ createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number ``` - - +
+ + +
``` ``` @@ -2205,38 +2825,37 @@ createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number createImageData\(width: number, height: number, imageData: Object\): Object -创建新的ImageData 对象,请参考[ImageData对象](/pages/000b0100010404)。 +创建新的ImageData 对象,请参考[ImageData对象](/pages/010c0201010505)。 - 参数 - -

类型

说明

+

说明

Object

+

Object

返回创建的CanvasGradient对象。

+

返回创建的CanvasGradient对象。

参数

+ - - - - - - - - - - - @@ -2244,16 +2863,15 @@ createImageData\(width: number, height: number, imageData: Object\): Object - 返回值 - -

参数

类型

+

类型

描述

+

描述

width

+

width

number

+

number

ImageData的宽度。

+

ImageData的宽度。

height

+

height

number

+

number

ImageData的高度。

+

ImageData的高度。

imagedata

+

imagedata

Object

+

Object

复制现有的ImageData对象。

+

复制现有的ImageData对象。

类型

+ - - - @@ -2262,8 +2880,22 @@ createImageData\(width: number, height: number, imageData: Object\): Object - 示例 ``` - imageData = ctx.createImageData(50, 100); // Create ImageData with 50px width and 100px height - newImageData = ctx.createImageData(imageData); // Create ImageData using the input imageData + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + imageData = ctx.createImageData(50, 100); // Create ImageData with 50px width and 100px height + newImageData = ctx.createImageData(imageData); // Create ImageData using the input imageData + } + } ``` @@ -2275,41 +2907,40 @@ getImageData\(sx: number, sy: number, sw: number, sh: number\): Object - 参数 - -

类型

说明

+

说明

Object

+

Object

返回创建的ImageData对象。

+

返回创建的ImageData对象。

参数

+ - - - - - - - - - - - - - - @@ -2317,16 +2948,15 @@ getImageData\(sx: number, sy: number, sw: number, sh: number\): Object - 返回值 - -

参数

类型

+

类型

描述

+

描述

sx

+

sx

number

+

number

需要输出的区域的左上角x坐标。

+

需要输出的区域的左上角x坐标。

sy

+

sy

number

+

number

需要输出的区域的左上角y坐标。

+

需要输出的区域的左上角y坐标。

sw

+

sw

number

+

number

需要输出的区域的宽度。

+

需要输出的区域的宽度。

sh

+

sh

number

+

number

需要输出的区域的高度。

+

需要输出的区域的高度。

类型

+ - - - @@ -2335,9 +2965,21 @@ getImageData\(sx: number, sy: number, sw: number, sh: number\): Object - 示例 ``` - var test = this.$element('getImageData'); - var ctx = test.getContext('2d'); - var imageData = ctx.getImageData(0, 0, 280, 300); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + var test = this.$element('getImageData') + var ctx = test.getContext('2d'); + var imageData = ctx.getImageData(0, 0, 280, 300); + } + } ``` @@ -2349,62 +2991,61 @@ putImageData\(imageData: Object, dx: number, dy: number, dirtyX: number, dirtyY: - 参数 - -

类型

说明

+

说明

Object

+

Object

返回包含指定区域像素的ImageData对象。

+

返回包含指定区域像素的ImageData对象。

参数

+ - - - - - - - - - - - - - - - - - - - - - - - @@ -2413,16 +3054,28 @@ putImageData\(imageData: Object, dx: number, dy: number, dirtyX: number, dirtyY: - 示例 ``` - var test = this.$element('putImageData'); - var ctx = test.getContext('2d'); - var imgData = ctx.createImageData(100, 100); - for (var i = 0; i < imgData.data.length; i += 4) { - imgData.data[i + 0] = 255; - imgData.data[i + 1] = 0; - imgData.data[i + 2] = 0; - imgData.data[i + 3] = 255; + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + var test = this.$element('getImageData') + var ctx = test.getContext('2d'); + var imgData = ctx.createImageData(100, 100); + for (var i = 0; i < imgData.data.length; i += 4) { + imgData.data[i + 0] = 255; + imgData.data[i + 1] = 0; + imgData.data[i + 2] = 0; + imgData.data[i + 3] = 255; + } + ctx.putImageData(imgData, 10, 10); + } } - ctx.putImageData(imgData, 10, 10); ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214463283.png) @@ -2436,20 +3089,19 @@ setLineDash\(segments: Array\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

imagedata

+

imagedata

Object

+

Object

包含像素值的ImageData对象。

+

包含像素值的ImageData对象。

dx

+

dx

number

+

number

填充区域在x轴方向的偏移量。

+

填充区域在x轴方向的偏移量。

dy

+

dy

number

+

number

填充区域在y轴方向的偏移量。

+

填充区域在y轴方向的偏移量。

dirtyX

+

dirtyX

number

+

number

源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。

+

源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。

dirtyY

+

dirtyY

number

+

number

源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。

+

源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。

dirtyWidth

+

dirtyWidth

number

+

number

源图像数据矩形裁切范围的宽度。

+

源图像数据矩形裁切范围的宽度。

dirtyHeight

+

dirtyHeight

number

+

number

源图像数据矩形裁切范围的高度。

+

源图像数据矩形裁切范围的高度。

参数

+ - - - - - @@ -2458,9 +3110,23 @@ setLineDash\(segments: Array\): void - 示例 ``` - ctx.arc(100, 75, 50, 0, 6.28); - ctx.setLineDash([10,20]); - ctx.stroke(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.arc(100, 75, 50, 0, 6.28); + ctx.setLineDash([10,20]); + ctx.stroke(); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001214623229.png) @@ -2474,16 +3140,15 @@ getLineDash\(\): Array - 返回值 - -

参数

类型

+

类型

描述

+

描述

segments

+

segments

Array

+

Array

作为数组用来描述线段如何交替和间距长度。

+

作为数组用来描述线段如何交替和间距长度。

类型

+ - - - @@ -2492,7 +3157,21 @@ getLineDash\(\): Array - 示例 ``` - var info = ctx.getLineDash(); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var info = ctx.getLineDash(); + } + } ``` @@ -2504,20 +3183,19 @@ transferFromImageBitmap\(bitmap: ImageBitmap\): void - 参数 - -

类型

说明

+

说明

Array

+

Array

返回数组,该数组用来描述线段如何交替和间距长度。。

+

返回数组,该数组用来描述线段如何交替和间距长度。

参数

+ - - - - - @@ -2526,13 +3204,27 @@ transferFromImageBitmap\(bitmap: ImageBitmap\): void - 示例 ``` - var canvas = this.$refs.canvasId.getContext('2d'); - var offscreen = new OffscreenCanvas(500,500); - var offscreenCanvasCtx = offscreen.getContext("2d"); - offscreenCanvasCtx.fillRect(0, 0, 200, 200); + +
+ +
+ ``` + + ``` + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var canvas = this.$refs.canvas.getContext('2d'); + var offscreen = new OffscreenCanvas(500,500); + var offscreenCanvasCtx = offscreen.getContext("2d"); + offscreenCanvasCtx.fillRect(0, 0, 200, 200); - var bitmap = offscreen.transferToImageBitmap(); - canvas.transferFromImageBitmap(bitmap); + var bitmap = offscreen.transferToImageBitmap(); + canvas.transferFromImageBitmap(bitmap); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001168984882.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" index 44f55fe406e45fb1fbefa69a37482f40283184f6..8899780f4997aa66ce6c885eb8da8de46c6213a9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.Image\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: Image对象 -permalink: /pages/000b0100010402 +permalink: /pages/010c0201010503 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # Image对象 @@ -17,72 +17,71 @@ date: 2021-12-30 18:31:38 ## 属性 - -

参数

类型

+

类型

描述

+

描述

bitmap

+

bitmap

ImageBitmap

+

ImageBitmap

待显示的ImageBitmap对象。

+

待显示的ImageBitmap对象。

属性

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -91,16 +90,29 @@ date: 2021-12-30 18:31:38 ## 示例 ``` -var ctx = this.$element('drawImage').getContext('2d'); -var img = new Image(); -img.src = 'common/images/example.jpg'; -img.onload = function() { - console.log('Image load success'); - ctx.drawImage(img, 0, 0, 360, 250); -}; -img.onerror = function() { - console.log('Image load fail'); -}; + +
+ +
+``` + +``` +//xxx.js +export default { + onShow(){ + const el =this.$refs.canvas + var ctx = this.$element('drawImage').getContext('2d'); + var img = new Image(); + img.src = 'common/images/example.jpg'; + img.onload = function() { + console.log('Image load success'); + ctx.drawImage(img, 0, 0, 360, 250); + }; + img.onerror = function() { + console.log('Image load fail'); + }; + } +} ``` ![](/images/application-dev/reference/arkui-js/figures/1-2.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" index b51c74268ef7656857d61c69ccbf100b65a0456c..4784b6e1f3a723ef8e785cf2516ebe4c3804e22f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.CanvasGradient\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: CanvasGradient对象 -permalink: /pages/000b0100010403 +permalink: /pages/010c0201010504 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # CanvasGradient对象 @@ -23,27 +23,26 @@ addColorStop\(offset: number, color: string\): void - 参数 - -

属性

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

src

+

src

string

+

string

-

+

-

+

图片资源的路径。。

+

图片资源的路径。

width

+

width

<length>

+

<length>

0px

+

0px

+

图片的宽度。

+

图片的宽度。

height

+

height

<length>

+

<length>

0px

+

0px

+

图片的高度。

+

图片的高度。

onload

+

onload

Function

+

Function

-

+

-

+

图片加载成功后触发该事件,无参数。

+

图片加载成功后触发该事件,无参数。

onerror

+

onerror

Function

+

Function

-

+

-

+

图片加载失败后触发该事件,无参数。

+

图片加载失败后触发该事件,无参数。

参数

+ - - - - - - - - @@ -52,9 +51,24 @@ addColorStop\(offset: number, color: string\): void - 示例 ``` - const gradient = ctx.createLinearGradient(0,0,100,0); - gradient.addColorStop(0,'#00ffff'); - gradient.addColorStop(1,'#ffff00'); + +
+ + +
+ ``` + + ``` + // xxx.js + export default { + handleClick() { + const el =this.$refs.canvas; + const ctx =el.getContext('2d'); + const gradient = ctx.createLinearGradient(0,0,100,0); + gradient.addColorStop(0,'#00ffff'); + gradient.addColorStop(1,'#ffff00'); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152610806.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" index 278cee5384a2263f54656ee55097eae842eb3ab8..91c94ec8b6ac0b0741041a6243d5a5d781ef29d1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.ImageData\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: ImageData对象 -permalink: /pages/000b0100010404 +permalink: /pages/010c0201010505 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # ImageData对象 @@ -17,36 +17,61 @@ ImageData对象可以存储canvas渲染的像素数据。 ## 属性 - -

参数

类型

+

类型

描述

+

描述

offset

+

offset

number

+

number

设置渐变点距离起点的位置占总体长度的比例,范围为0到1。

+

设置渐变点距离起点的位置占总体长度的比例,范围为0到1。

color

+

color

string

+

string

设置渐变的颜色。

+

设置渐变的颜色。

属性

+ - - - - - - - - - - -

属性

类型

+

类型

描述

+

描述

width

+

width

number

+

number

矩形区域实际像素宽度。

+

矩形区域实际像素宽度。

height

+

height

number

+

number

矩形区域实际像素高度。

+

矩形区域实际像素高度。

data

+

data

<Uint8ClampedArray>

+

<Uint8ClampedArray>

一维数组,保存了相应的颜色数据,数据值范围为0到255。

+

一维数组,保存了相应的颜色数据,数据值范围为0到255。

+## 示例 + +``` + +
+ +
+``` + +``` +//xxx.js +import prompt from '@system.prompt'; +export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + ctx.fillRect(0,0,200,200) + var imageData = ctx.createImageData(1,1) + prompt.showToast({ + message:imageData, + duration:5000 + }) + } +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" index 20ceec2f061b0fe229e1455883be675593924a6c..7659ea946c5e0a9f27cd3c069ce50ba1e0d35f9e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.Path2D\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: Path2D对象 -permalink: /pages/000b0100010405 +permalink: /pages/010c0201010506 navbar: true sidebar: true prev: true @@ -9,15 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # Path2D对象 路径对象,支持通过对象的接口进行路径的描述,并通过Canvas的stroke接口进行绘制。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从 API Version 6 开始支持。 - ## addPath addPath\(path: Object\): void @@ -26,20 +23,19 @@ addPath\(path: Object\): void - 参数 - -

参数

+ - - - - - @@ -47,74 +43,86 @@ addPath\(path: Object\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164873.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path1 = ctx.createPath2D("M250 150 L150 350 L350 350 Z"); - var path2 = ctx.createPath2D(); - path2.addPath(path1); - ctx.stroke(path2); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path1 = ctx.createPath2D("M250 150 L150 350 L350 350 Z"); + var path2 = ctx.createPath2D(); + path2.addPath(path1); + ctx.stroke(path2); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164873.png) + ## setTransform setTransform\(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number\): void -依据圆弧经过的点和圆弧半径创建圆弧路径。 +设置路径变换矩阵。 - 参数 - -

参数

类型

+

类型

描述

+

描述

path

+

path

Object

+

Object

需要添加到当前路径的路径对象

+

需要添加到当前路径的路径对象

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -122,15 +130,28 @@ setTransform\(scaleX: number, skewX: number, skewY: number, scaleY: number, tran - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125208.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D("M250 150 L150 350 L350 350 Z"); - path.setTransform(0.8, 0, 0, 0.4, 0, 0); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D("M250 150 L150 350 L350 350 Z"); + path.setTransform(0.8, 0, 0, 0.4, 0, 0); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125208.png) + ## closePath @@ -140,18 +161,31 @@ closePath\(\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125202.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.moveTo(200, 100); - path.lineTo(300, 100); - path.lineTo(200, 200); - path.closePath(); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.moveTo(200, 100); + path.lineTo(300, 100); + path.lineTo(200, 200); + path.closePath(); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125202.png) + ## moveTo @@ -161,27 +195,26 @@ moveTo\(x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

scaleX

+

scaleX

number

+

number

x轴的缩放比例

+

x轴的缩放比例

skewX

+

skewX

number

+

number

x轴的倾斜角度

+

x轴的倾斜角度

skewY

+

skewY

number

+

number

y轴的倾斜角度

+

y轴的倾斜角度

scaleY

+

scaleY

number

+

number

y轴的缩放比例

+

y轴的缩放比例

translateX

+

translateX

number

+

number

x轴的平移距离

+

x轴的平移距离

translateY

+

translateY

number

+

number

y轴的平移距离

+

y轴的平移距离

参数

+ - - - - - - - - @@ -189,18 +222,31 @@ moveTo\(x: number, y: number\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164869.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.moveTo(50, 100); - path.lineTo(250, 100); - path.lineTo(150, 200); - path.closePath(); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.moveTo(50, 100); + path.lineTo(250, 100); + path.lineTo(150, 200); + path.closePath(); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164869.png) + ## lineTo @@ -210,27 +256,26 @@ lineTo\(x: number, y: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

目标点X轴坐标

+

目标点X轴坐标

y

+

y

number

+

number

目标点Y轴坐标

+

目标点Y轴坐标

参数

+ - - - - - - - - @@ -238,19 +283,32 @@ lineTo\(x: number, y: number\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285024.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.moveTo(100, 100); - path.lineTo(100, 200); - path.lineTo(200, 200); - path.lineTo(200, 100); - path.closePath(); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.moveTo(100, 100); + path.lineTo(100, 200); + path.lineTo(200, 200); + path.lineTo(200, 100); + path.closePath(); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285024.png) + ## bezierCurveTo @@ -260,55 +318,54 @@ bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

目标点X轴坐标

+

目标点X轴坐标

y

+

y

number

+

number

目标点Y轴坐标

+

目标点Y轴坐标

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -316,60 +373,72 @@ bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324783.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.moveTo(10, 10); - path.bezierCurveTo(20, 100, 200, 100, 200, 20); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.moveTo(10, 10); + path.bezierCurveTo(20, 100, 200, 100, 200, 20); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324783.png) + ## quadraticCurveTo -quadraticCurveTo\(cpx: number, cpy: number, x: number ,y: number\): void +quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void 创建二次贝赛尔曲线的路径。 - 参数 - -

参数

类型

+

类型

描述

+

描述

cp1x

+

cp1x

number

+

number

第一个贝塞尔参数的x坐标值。

+

第一个贝塞尔参数的x坐标值。

cp1y

+

cp1y

number

+

number

第一个贝塞尔参数的y坐标值。

+

第一个贝塞尔参数的y坐标值。

cp2x

+

cp2x

number

+

number

第二个贝塞尔参数的x坐标值。

+

第二个贝塞尔参数的x坐标值。

cp2y

+

cp2y

number

+

number

第二个贝塞尔参数的y坐标值。

+

第二个贝塞尔参数的y坐标值。

x

+

x

number

+

number

路径结束时的x坐标值。

+

路径结束时的x坐标值。

y

+

y

number

+

number

路径结束时的y坐标值。

+

路径结束时的y坐标值。

参数

+ - - - - - - - - - - - - - - @@ -377,16 +446,29 @@ quadraticCurveTo\(cpx: number, cpy: number, x: number ,y: number\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164871.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.moveTo(10, 10); - path.quadraticCurveTo(100, 100, 200, 20); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.moveTo(10, 10); + path.quadraticCurveTo(100, 100, 200, 20); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164871.png) + ## arc @@ -396,55 +478,54 @@ arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, - 参数 - -

参数

类型

+

类型

描述

+

描述

cpx

+

cpx

number

+

number

贝塞尔参数的x坐标值。

+

贝塞尔参数的x坐标值。

cpy

+

cpy

number

+

number

贝塞尔参数的y坐标值。

+

贝塞尔参数的y坐标值。

x

+

x

number

+

number

路径结束时的x坐标值。

+

路径结束时的x坐标值。

y

+

y

number

+

number

路径结束时的y坐标值。

+

路径结束时的y坐标值。

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -452,15 +533,28 @@ arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164867.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.arc(100, 75, 50, 0, 6.28); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.arc(100, 75, 50, 0, 6.28); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173164867.png) + ## arcTo @@ -470,48 +564,47 @@ arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

弧线圆心的x坐标值。

+

弧线圆心的x坐标值。

y

+

y

number

+

number

弧线圆心的y坐标值。

+

弧线圆心的y坐标值。

radius

+

radius

number

+

number

弧线的圆半径。

+

弧线的圆半径。

startAngle

+

startAngle

number

+

number

弧线的起始弧度。

+

弧线的起始弧度。

endAngle

+

endAngle

number

+

number

弧线的终止弧度。

+

弧线的终止弧度。

anticlockwise

+

anticlockwise

boolean

+

boolean

是否逆时针绘制圆弧。

+

是否逆时针绘制圆弧。

参数

+ - - - - - - - - - - - - - - - - - @@ -519,15 +612,28 @@ arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125204.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.arcTo(150, 20, 150, 70, 50); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.arcTo(150, 20, 150, 70, 50); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125204.png) + ## ellipse @@ -537,69 +643,68 @@ ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: numbe - 参数 - -

参数

类型

+

类型

描述

+

描述

x1

+

x1

number

+

number

圆弧经过的第一个点的x坐标值。

+

圆弧经过的第一个点的x坐标值。

y1

+

y1

number

+

number

圆弧经过的第一个点的y坐标值。

+

圆弧经过的第一个点的y坐标值。

x2

+

x2

number

+

number

圆弧经过的第二个点的x坐标值。

+

圆弧经过的第二个点的x坐标值。

y2

+

y2

number

+

number

圆弧经过的第二个点的y坐标值。

+

圆弧经过的第二个点的y坐标值。

radius

+

radius

number

+

number

圆弧的圆半径值。

+

圆弧的圆半径值。

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -607,15 +712,28 @@ ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: numbe - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324787.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx =el.getContext('2d'); + var path = ctx.createPath2D(); + path.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324787.png) + ## rect @@ -625,41 +743,40 @@ rect\(x: number, y: number, width: number, height: number\): void - 参数 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

椭圆圆心的x轴坐标。

+

椭圆圆心的x轴坐标。

y

+

y

number

+

number

椭圆圆心的y轴坐标。

+

椭圆圆心的y轴坐标。

radiusX

+

radiusX

number

+

number

椭圆x轴的半径长度。

+

椭圆x轴的半径长度。

radiusY

+

radiusY

number

+

number

椭圆y轴的半径长度。

+

椭圆y轴的半径长度。

rotation

+

rotation

number

+

number

椭圆的旋转角度,单位为弧度。

+

椭圆的旋转角度,单位为弧度。

startAngle

+

startAngle

number

+

number

椭圆绘制的起始点角度,以弧度表示。

+

椭圆绘制的起始点角度,以弧度表示。

endAngle

+

endAngle

number

+

number

椭圆绘制的结束点角度,以弧度表示。

+

椭圆绘制的结束点角度,以弧度表示。

anticlockwise

+

anticlockwise

number

+

number

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

+

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

参数

+ - - - - - - - - - - - - - - @@ -667,13 +784,26 @@ rect\(x: number, y: number, width: number, height: number\): void - 示例 - ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125212.png) + ``` + +
+ +
+ ``` ``` - const ctx = canvas.getContext('2d'); - var path = ctx.createPath2D(); - path.rect(20, 20, 100, 100); - ctx.stroke(path); + //xxx.js + export default { + onShow() { + const el =this.$refs.canvas; + const ctx = el.getContext('2d'); + var path = ctx.createPath2D(); + path.rect(20, 20, 100, 100); + ctx.stroke(path); + } + } ``` + ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125212.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" index 3465a74b90645b765f3f98d1500a4deb0f1367b1..053e1ba291c52a75bc4140340589533dcdd3a502 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: ImageBitmap对象 -permalink: /pages/000b0100010406 +permalink: /pages/010c0201010507 navbar: true sidebar: true prev: true @@ -9,38 +9,37 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # ImageBitmap对象 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ImageBitmap对象由OffscreenCanvas对象的transferToImageBitmap\(\)方法生成,存储了offscreen canvas渲染的像素数据。 ## 属性 - -

参数

类型

+

类型

描述

+

描述

x

+

x

number

+

number

指定矩形的左上角x坐标值。

+

指定矩形的左上角x坐标值。

y

+

y

number

+

number

指定矩形的左上角y坐标值。

+

指定矩形的左上角y坐标值。

width

+

width

number

+

number

指定矩形的宽度。

+

指定矩形的宽度。

height

+

height

number

+

number

指定矩形的高度。

+

指定矩形的高度。

属性

+ - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" index 3e51835d310d57ccd8d10f579812bf4d812bd2c7..5f80ec9b8eb5b0eb97e9c61c8bb4c1728d8b7b19 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.OffscreenCanvas\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: OffscreenCanvas对象 -permalink: /pages/000b0100010407 +permalink: /pages/010c0201010508 navbar: true sidebar: true prev: true @@ -9,38 +9,37 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:52 --- # OffscreenCanvas对象 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 可以离屏渲染的canvas对象。 ## 属性 - -

属性

类型

+

类型

描述

+

描述

width

+

width

number

+

number

ImageBitmap的像素宽度。

+

ImageBitmap的像素宽度。

height

+

height

number

+

number

ImageBitmap的像素高度。

+

ImageBitmap的像素高度。

属性

+ - - - - - - - - @@ -56,33 +55,32 @@ getContext\(type: string, options?: CanvasRenderingContext2DSettings\): Offscree - 参数 - -

属性

类型

+

类型

描述

+

描述

width

+

width

number

+

number

offscreen canvas对象的宽度。

+

offscreen canvas对象的宽度。

height

+

height

number

+

number

offscreen canvas对象的高度。

+

offscreen canvas对象的高度。

参数名

+ - - - - - - - - - - - @@ -90,16 +88,15 @@ getContext\(type: string, options?: CanvasRenderingContext2DSettings\): Offscree - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

contextId

+

contextId

string

+

string

+

仅支持"2d"。

+

仅支持 '2d'。

options

+

options

CanvasRenderingContext2DSettings

+

CanvasRenderingContext2DSettings

+

用于在离屏画布上进行绘制矩形、文本、图片等

+

用于在离屏画布上进行绘制矩形、文本、图片等

类型

+ - - - @@ -114,33 +111,32 @@ toDataURL\(type?: string, quality?:number\): - 参数 - -

类型

说明

+

说明

OffscreenCanvasRenderingContext2D

+

OffscreenCanvasRenderingContext2D

用于在画布组件上绘制矩形、文本、图片等

+

2D绘制对象,用于在画布组件上绘制矩形、文本、图片等

参数名

+ - - - - - - - - - - - @@ -148,16 +144,15 @@ toDataURL\(type?: string, quality?:number\): - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

type

+

type

string

+

string

+

可选参数,用于指定图像格式,默认格式为image/png。

+

可选参数,用于指定图像格式,默认格式为image/png。

quality

+

quality

number

+

number

+

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。

+

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。

类型

+ - - - @@ -172,16 +167,15 @@ transferToImageBitmap\(\): ImageBitmap - 返回值 - -

类型

说明

+

说明

string

+

string

图像的URL地址。

+

图像的URL地址。

类型

+ - - - @@ -191,16 +185,28 @@ transferToImageBitmap\(\): ImageBitmap ## 示例 ``` -var canvas = this.$refs.canvasId.getContext('2d'); -var offscreen = new OffscreenCanvas(500,500); -var offscreenCanvasCtx = offscreen.getContext("2d"); - -// ... some drawing for the canvas using the offscreenCanvasCtx ... - -var dataURL = offscreen.toDataURL(); -console.log(dataURL); //data:image/png;base64,xxxxxx + +
+ +
+``` -var bitmap = offscreen.transferToImageBitmap(); -canvas.transferFromImageBitmap(bitmap); +``` +//xxx.js +export default { + onShow() { + var canvas = this.$refs.canvasId.getContext('2d'); + var offscreen = new OffscreenCanvas(500,500); + var offscreenCanvasCtx = offscreen.getContext("2d"); + + // ... some drawing for the canvas using the offscreenCanvasCtx ... + + var dataURL = offscreen.toDataURL(); + console.log(dataURL); //data:image/png;base64,xxxxxx + + var bitmap = offscreen.transferToImageBitmap(); + canvas.transferFromImageBitmap(bitmap); + } +} ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" index 656612a7cc2e838222bd1afd3b8db62989e74071..752cb9c38dd09d48fdafdebdcfd528f12617fb3b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/09.OffscreenCanvasRenderingContext2D\345\257\271\350\261\241.md" @@ -1,6 +1,6 @@ --- title: OffscreenCanvasRenderingContext2D对象 -permalink: /pages/000b0100010408 +permalink: /pages/010c0201010509 navbar: true sidebar: true prev: true @@ -9,12 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:38 +date: 2022-02-12 09:01:53 --- # OffscreenCanvasRenderingContext2D对象 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 使用OffscreenCanvasRenderingContext2D在offscreen canvas上进行绘制,绘制对象可以是矩形、文本、图片等 @@ -22,22 +22,21 @@ date: 2021-12-30 18:31:38 除支持与CanvasRenderingContext2D对象相同的属性外,还支持如下属性: - -

类型

说明

+

说明

ImageBitmap

+

ImageBitmap

存储离屏画布上渲染的像素数据。

+

存储离屏画布上渲染的像素数据。

属性

+ - - - - - @@ -45,47 +44,60 @@ date: 2021-12-30 18:31:38 - 示例 -``` -var ctx = this.$refs.canvasid.getContext('2d'); -var offscreen = new OffscreenCanvas(360, 500); -var offCanvas2 = offscreen.getContext("2d"); -var img = new Image(); -img.src = 'common/images/flower.jpg'; -offCanvas2.drawImage(img, 0, 0, 100, 100); -offCanvas2.filter = 'blur(5px)'; -offCanvas2.drawImage(img, 100, 0, 100, 100); - -offCanvas2.filter = 'grayscale(50%)'; -offCanvas2.drawImage(img, 200, 0, 100, 100); - -offCanvas2.filter = 'hue-rotate(90deg)'; -offCanvas2.drawImage(img, 0, 100, 100, 100); - -offCanvas2.filter = 'invert(100%)'; -offCanvas2.drawImage(img, 100, 100, 100, 100); - -offCanvas2.filter = 'drop-shadow(8px 8px 10px green)'; -offCanvas2.drawImage(img, 200, 100, 100, 100); - -offCanvas2.filter = 'brightness(0.4)'; -offCanvas2.drawImage(img, 0, 200, 100, 100); - -offCanvas2.filter = 'opacity(25%)'; -offCanvas2.drawImage(img, 100, 200, 100, 100); - -offCanvas2.filter = 'saturate(30%)'; -offCanvas2.drawImage(img, 200, 200, 100, 100); + ``` + +
+ +
+ ``` -offCanvas2.filter = 'sepia(60%)'; -offCanvas2.drawImage(img, 0, 300, 100, 100); + ``` + //xxx.js + export default { + onShow(){ + var ctx = this.$refs.canvasId.getContext('2d'); + var offscreen = new OffscreenCanvas(360, 500); + var offCanvas2 = offscreen.getContext("2d"); + var img = new Image(); + img.src = 'common/images/flower.jpg'; + offCanvas2.drawImage(img, 0, 0, 100, 100); + offCanvas2.filter = 'blur(5px)'; + offCanvas2.drawImage(img, 100, 0, 100, 100); + + offCanvas2.filter = 'grayscale(50%)'; + offCanvas2.drawImage(img, 200, 0, 100, 100); + + offCanvas2.filter = 'hue-rotate(90deg)'; + offCanvas2.drawImage(img, 0, 100, 100, 100); + + offCanvas2.filter = 'invert(100%)'; + offCanvas2.drawImage(img, 100, 100, 100, 100); + + offCanvas2.filter = 'drop-shadow(8px 8px 10px green)'; + offCanvas2.drawImage(img, 200, 100, 100, 100); + + offCanvas2.filter = 'brightness(0.4)'; + offCanvas2.drawImage(img, 0, 200, 100, 100); + + offCanvas2.filter = 'opacity(25%)'; + offCanvas2.drawImage(img, 100, 200, 100, 100); + + offCanvas2.filter = 'saturate(30%)'; + offCanvas2.drawImage(img, 200, 200, 100, 100); + + offCanvas2.filter = 'sepia(60%)'; + offCanvas2.drawImage(img, 0, 300, 100, 100); + + offCanvas2.filter = 'contrast(200%)'; + offCanvas2.drawImage(img, 100, 300, 100, 100); + var bitmap = offscreen.transferToImageBitmap(); + ctx.transferFromImageBitmap(bitmap); + } + } + ``` -offCanvas2.filter = 'contrast(200%)'; -offCanvas2.drawImage(img, 100, 300, 100, 100); -var bitmap = offscreen.transferToImageBitmap(); -ctx.transferFromImageBitmap(bitmap); -``` + ![](/images/application-dev/reference/arkui-js/figures/c3.png) -![](/images/application-dev/reference/arkui-js/figures/c3.png) ## 方法 @@ -99,42 +111,41 @@ isPointInPath\(path?: Path2D, x: number, y: number\): boolean - 参数 - -

属性

类型

+

类型

描述

+

描述

filter

+

filter

string

+

string

设置图像的滤镜。

-

支持的滤镜效果如下:

-
  • blur:给图像设置高斯模糊
  • brightness:给图片应用一种线性乘法,使其看起来更亮或更暗
  • contrast:调整图像的对比度
  • drop-shadow:给图像设置一个阴影效果
  • grayscale:将图像转换为灰度图像
  • hue-rotate:给图像应用色相旋转
  • invert:反转输入图像
  • opacity:转化图像的透明程度
  • saturate:转换图像饱和度
  • sepia:将图像转换为深褐色
+

设置图像的滤镜。

+

支持的滤镜效果如下:

+
  • blur:给图像设置高斯模糊
  • brightness:给图片应用一种线性乘法,使其看起来更亮或更暗
  • contrast:调整图像的对比度
  • drop-shadow:给图像设置一个阴影效果
  • grayscale:将图像转换为灰度图像
  • hue-rotate:给图像应用色相旋转
  • invert:反转输入图像
  • opacity:转化图像的透明程度
  • saturate:转换图像饱和度
  • sepia:将图像转换为深褐色

参数名

+ - - - - - - - - - - - - - - - @@ -142,16 +153,15 @@ isPointInPath\(path?: Path2D, x: number, y: number\): boolean - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

path

+

path

Path2D

+

Path2D

+

可选对象,指定用来判断的路径。若没有设置,则使用当前路径。

+

可选对象,指定用来判断的路径。若没有设置,则使用当前路径。

x

+

x

number

+

number

+

待判断点的x轴坐标。

+

待判断点的x轴坐标。

y

+

y

number

+

number

+

待判断点的y轴坐标。

+

待判断点的y轴坐标。

类型

+ - - - @@ -163,8 +173,8 @@ isPointInPath\(path?: Path2D, x: number, y: number\): boolean
In path:{{textValue}} +
- ``` ``` @@ -199,42 +209,41 @@ isPointInStroke\(path?: Path2D, x: number, y: number\): boolean - 参数 - -

类型

说明

+

说明

boolean

+

boolean

指定点是否在路径的区域内。

+

指定点是否在路径的区域内。

参数名

+ - - - - - - - - - - - - - - - @@ -242,16 +251,15 @@ isPointInStroke\(path?: Path2D, x: number, y: number\): boolean - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

描述

+

描述

path

+

path

Path2D

+

Path2D

+

可选对象,指定用来判断的路径。若没有设置,则使用当前路径。

+

可选对象,指定用来判断的路径。若没有设置,则使用当前路径。

x

+

x

number

+

number

+

待判断点的x轴坐标。

+

待判断点的x轴坐标。

y

+

y

number

+

number

+

待判断点的y轴坐标。

+

待判断点的y轴坐标。

类型

+ - - - @@ -263,8 +271,8 @@ isPointInStroke\(path?: Path2D, x: number, y: number\): boolean
In path:{{textValue}} +
- ``` ``` @@ -298,23 +306,39 @@ resetTransform\(\): void - 示例 ``` - var canvas = this.$refs.canvas.getContext('2d'); - var offscreen = new OffscreenCanvas(500,500); - var offscreenCanvasCtx = offscreen.getContext("2d"); + +
+ In path:{{textValue}} + +
+ ``` + + ``` + //xxx.js + export default { + data:{ + textValue:0 + }, + onShow(){ + var canvas = this.$refs.canvas.getContext('2d'); + var offscreen = new OffscreenCanvas(500,500); + var offscreenCanvasCtx = offscreen.getContext("2d"); - offscreenCanvasCtx.transform(1, 0, 1.7, 1, 0, 0); - offscreenCanvasCtx.fillStyle = 'gray'; - offscreenCanvasCtx.fillRect(40, 40, 50, 20); - offscreenCanvasCtx.fillRect(40, 90, 50, 20); + offscreenCanvasCtx.transform(1, 0, 1.7, 1, 0, 0); + offscreenCanvasCtx.fillStyle = 'gray'; + offscreenCanvasCtx.fillRect(40, 40, 50, 20); + offscreenCanvasCtx.fillRect(40, 90, 50, 20); - // Non-skewed rectangles - offscreenCanvasCtx.resetTransform(); - offscreenCanvasCtx.fillStyle = 'red'; - offscreenCanvasCtx.fillRect(40, 40, 50, 20); - offscreenCanvasCtx.fillRect(40, 90, 50, 20); + // Non-skewed rectangles + offscreenCanvasCtx.resetTransform(); + offscreenCanvasCtx.fillStyle = 'red'; + offscreenCanvasCtx.fillRect(40, 40, 50, 20); + offscreenCanvasCtx.fillRect(40, 90, 50, 20); - var bitmap = offscreen.transferToImageBitmap(); - canvas.transferFromImageBitmap(bitmap); + var bitmap = offscreen.transferToImageBitmap(); + canvas.transferFromImageBitmap(bitmap); + } + } ``` ![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001179035242.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" similarity index 93% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" index 9344f9abf6c13187148c89b9f0524d0930b60967..7a184416e3d2f369a2ef4202e0845ab3a24097d6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/01.\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -1,6 +1,6 @@ --- title: 基本概念 -permalink: /pages/000b0100010500 +permalink: /pages/010c0201010601 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # 基本概念 @@ -24,9 +24,6 @@ date: 2021-12-30 18:31:39 3. 给应用提供一种灵活的间距调整方法,满足特殊场景布局调整的可能性。 ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - ## 栅格系统的概念 栅格系统有Margins、Gutters、Columns三个属性。 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" new file mode 100644 index 0000000000000000000000000000000000000000..cde0a5d0c343b07d1f5a9d650166faaa40ae0558 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" @@ -0,0 +1,288 @@ +--- +title: grid-container +permalink: /pages/010c0201010602 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# grid-container + +栅格布局容器根节点,使用grid-row与grid-col进行栅格布局。 + +## 权限列表 + +无 + +## 子组件 + +仅支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + +

类型

说明

+

说明

boolean

+

boolean

指定点是否在路径的区域内。

+

指定点是否在路径的区域内。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

columns

+

string | number

+

auto

+

+

设置当前布局总列数,使用string类型时仅支持auto,配置为auto时按照当前的sizetype决定总列数:

+
  • xs:2列
  • sm:4列
  • md:8列
  • lg:12列
+

sizetype

+

string

+

auto

+

+

设置当前栅格使用的响应尺寸类型,支持xs, sm, md, lg类型,使用auto时按照当前容器大小自动选择xs, sm, md, lg类型。

+

gutter

+

<length>

+

24px

+

+

设置Gutter宽度

+

gridtemplate6+

+

string

+

default

+

+

当设置了columns和sizetype属性为auto时,可以设置栅格容器的布局模板,通过布局模块设置不同响应尺寸下的Columns、Gutters和Margins,详见可选值说明

+
+ +**表 1** gridtemplate可选值说明6+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  

模板值

+

可响应的栅格断点系统

+

Columns

+

Margins(px)

+

Gutters(px)

+

默认栅格

+

default

+

xs

+

2

+

12

+

12

+

sm

+

4

+

24

+

24

+

md

+

8

+

32

+

24

+

lg

+

12

+

48

+

24

+

宫格布局栅格

+

grid

+

sm(0<设备水平分辨率<600px)

+

4

+

24

+

12

+

md

+

8

+

32

+

12

+

lg

+

12

+

48

+

12

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 本章中px单位是在js标签中配置了autoDesignWidth为true。6+ + +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

justify-content

+

string

+

flex-start

+

+

flex容器当前行的主轴对齐格式。可选项有:

+
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
+

align-items

+

string

+

stretch

+

+

flex容器当前行的交叉轴对齐格式,可选值为:

+
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
+

align-content

+

string

+

flex-start

+

+

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

+
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
+
+ +## 事件 + +支持[通用事件](/pages/010c0201010103)。 + +## 方法 + +除支持[通用方法](/pages/010c0201010104)外,还支持如下方法: + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

描述

+

getColumns

+

-

+

返回栅格容器列数

+

getColumnWidth

+

-

+

返回栅格容器column宽度

+

getGutterWidth

+

-

+

返回栅格容器gutter宽度

+

getSizeType

+

-

+

返回当前容器响应尺寸类型(xs|sm|md|lg)

+
+ +## 示例 + +详见[grid-col示例](/pages/010c0201010604#section2021865273710)。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" new file mode 100644 index 0000000000000000000000000000000000000000..df27c28e070b014b1ec721fd1f29db26262e8564 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" @@ -0,0 +1,111 @@ +--- +title: grid-row +permalink: /pages/010c0201010603 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# grid-row + +grid-row是栅格布局容器grid-container的子容器组件,使用flex横向布局,排列每个grid-col容器,justify-content与align-items默认为flex-start,支持折行显示。 + +## 权限列表 + +无 + +## 子组件 + +仅支持。 + +## 属性 + +支持[通用属性](/pages/010c0201010101)。 + +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

flex-wrap

+

string

+

nowrap

+

+

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

+
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。
+

justify-content

+

string

+

flex-start

+

+

flex容器当前行的主轴对齐格式。可选项有:

+
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
+

align-items

+

string

+

flex-start

+

+

flex容器当前行的交叉轴对齐格式,可选值为:

+
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
+

align-content

+

string

+

flex-start

+

+

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

+
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>不支持宽度相关样式。 + +## 事件 + +支持[通用事件](/pages/010c0201010103)。 + +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +详见[grid-col示例](/pages/010c0201010604#section2021865273710)。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" new file mode 100644 index 0000000000000000000000000000000000000000..ca65dea0a6732212d581ebb999d684b702eb3d4d --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" @@ -0,0 +1,317 @@ +--- +title: grid-col +permalink: /pages/010c0201010604 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# grid-col + +grid-col是栅格布局容器grid-row的子容器组件。 + +## 权限列表 + +无 + +## 子组件 + +支持。 + +## 属性 + +除支持[通用属性](/pages/010c0201010101)外,还支持如下属性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

xs

+

number|object

+

-

+

+

在分辨率为xs模式下,设置该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

+

sm

+

number|object

+

-

+

+

在分辨率为sm模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

+

md

+

number|object

+

-

+

+

在分辨率为md模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

+

lg

+

number|object

+

-

+

+

在分辨率为lg模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

+

span

+

number

+

1

+

+

在未设置明确断点时,默认占用列数

+

offset

+

number

+

0

+

+

未设置具体分辨率模式下偏移时,当前元素延容器布局方向,默认偏移的列数

+
+ +## 样式 + +除支持[通用样式](/pages/010c0201010102)外,还支持如下样式: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

flex-direction

+

string

+

row

+

+

flex容器主轴方向。可选项有:

+
  • column:垂直方向从上到下
  • row:水平方向从左到右
+

flex-wrap

+

string

+

nowrap

+

+

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

+
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。
+

justify-content

+

string

+

flex-start

+

+

flex容器当前行的主轴对齐格式。可选项有:

+
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
+

align-items

+

string

+

stretch

+

+

flex容器当前行的交叉轴对齐格式,可选值为:

+
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
+

align-content

+

string

+

flex-start

+

+

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

+
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
+

display

+

string

+

flex

+

+

确定该元素视图框的类型,该值暂不支持动态修改。可选值为:

+
  • flex:弹性布局
  • grid:网格布局
  • none:不渲染此元素
+

grid-template-[columns|rows]

+

string

+

1行1列

+

+

用于设置当前网格布局行和列的数量,不设置时默认1行1列,仅当display为grid时生效。

+

示例:如设置grid-template-columns为:

+

(1) 50px 100px 60px:分三列,第一列50px,第二列100px,第三列60px;

+

(2) 1fr 1fr 2fr:分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份;

+

(3) 30% 20% 50%:分三列,将父组件允许的宽为基准,第一列占30%,第二列占20%,第三列占50%;

+

(4) repeat(2,100px):分两列,第一列100px,第二列100px;

+

(5) auto 1fr 1fr:分三列,第一列自适应内部子组件所需宽度,剩余空间分为两等份,第二列占一份,第三列占一份。

+

grid-[columns|rows]-gap

+

<length>

+

0

+

+

用于设置行与行的间距或者列与列的间距,也可以支持通过grid-gap设置相同的行列间距,仅当display为grid时生效。

+

grid-row-[start|end]

+

number

+

-

+

+

用于设置当前元素在网格布局中的起止行号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

+

grid-column-[start|end]

+

number

+

-

+

+

用于设置当前元素在网格布局中的起止列号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>不支持宽度相关样式。 + +## 事件 + +支持[通用事件](/pages/010c0201010103)。 + +## 方法 + +支持[通用方法](/pages/010c0201010104)。 + +## 示例 + +``` + +
+ + + +
+ Element text +
+
+ +
+ Element text +
+
+
+
+
+``` + +``` +/* index.css */ +.container { + flex-direction: column; + padding-top: 80px; +} +``` + +``` +// index.js +import prompt from '@system.prompt'; +export default { + getCol(e) { + this.$element('mygrid').getColumns(function (result) { + prompt.showToast({ + message: e.target.id + ' result = ' + result, + duration: 3000, + }); + }) + }, + getColWidth(e) { + this.$element('mygrid').getColumnWidth(function (result) { + prompt.showToast({ + message: e.target.id + ' result = ' + result, + duration: 3000, + }); + }) + } +} +``` + +![](/images/application-dev/reference/arkui-js/figures/grid.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..f8887f8c0245ac4c1cbb9d1deaf9d3b02fc92b1f --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" @@ -0,0 +1,188 @@ +--- +title: 通用属性 +permalink: /pages/010c0201010701 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 通用属性 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

必填

+

描述

+

fill

+

<color>

+

black

+

+

使用简写属性设置元素的填充色。支持属性动画。

+

fill-opacity

+

number

+

1

+

+

填充色的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

+

fill-rule

+

nonzero | evenodd

+

nonzero

+

+

nonzero:非零规则; evenodd:奇偶规则

+

opacity

+

number

+

1

+

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

+

stroke

+

<color>

+

-

+

+

设置形状轮廓的颜色。支持属性动画。

+

stroke-dasharray

+

<string>

+

-

+

+

指定短划线和缺口的长度。格式为[length length length length],短划线和缺口的长度中间空格隔开成对出现。

+

stroke-dashoffset

+

<length>

+

0

+

+

设置关联虚线数组渲染时的偏移量。支持属性动画

+

stroke-linejoin

+

[bevel | miter | round]

+

miter

+

+

进行描边时在路径的拐角处使用的形状。

+

bevel:使用斜角连接路径段;

+

miter:使用尖角连接路径段;

+

round:使用圆角连接路径段。

+

stroke-linecap

+

[butt | round | square]

+

butt

+

+

路径描边时在它们的结尾处使用的形状。

+

butt:不在路径两端扩展;

+

round:在路径的末端延伸半个圆,直径等于线度。

+

square:在路径的末端延伸半个圆,宽度等于线宽的一半,高度等于线宽。

+

stroke-miterlimit

+

number

+

4

+

+

设置将锐角绘制成斜角的极限值。支持属性动画

+

stroke-opacity

+

number

+

1

+

+

轮廓线条的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画

+

stroke-width

+

<length>

+

1px

+

+

设置轮廓线条的宽度。支持属性动画

+

transform

+

<string>

+

-

+

+

设置组件以及子组件的坐标变换参数。

+

支持以下格式:

+

translate(<x> [<y>]) :沿x[y]轴方向平移

+

scale(<x> [<y>]) :沿x[y]轴缩放

+

rotate(<a> [<x> <y>]) :以(x,y)点进行旋转a度角

+

skewX(<a>) :沿x轴倾斜a度角的变换

+

skewY(<a>) :沿y轴倾斜a度角的变换

+
+ diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" index cd9259eac5e34b37f391704f2594c54b13ceb91d..837f140f2853239e11f51efcf8e92a332367aec7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/02.svg.md" @@ -1,6 +1,6 @@ --- title: svg -permalink: /pages/000b0100010601 +permalink: /pages/010c0201010702 navbar: true sidebar: true prev: true @@ -9,15 +9,15 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # svg 基础容器,主要作为svg的根节点使用,也可以在svg中嵌套使用。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 ->约束条件:svg父组件或者svg组件需要定义宽高值,否则不进行绘制。 +>- 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 +>- svg父组件或者svg组件需要定义宽高值,否则不进行绘制。 ## 权限列表 @@ -29,84 +29,83 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性,设置的通用属性会传递给子组件。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性,设置的通用属性会传递给子组件。 - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" index 9b37ed73b5a97f8358d56bd93a372d11fcf8708b..d4192df3dc9f49232409a811f48a2f70c1494b34 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/03.rect.md" @@ -1,6 +1,6 @@ --- title: rect -permalink: /pages/000b0100010602 +permalink: /pages/010c0201010703 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # rect 用于绘制矩形、圆角矩形。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,96 +28,95 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

width

+

width

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置组件的宽度

+

设置组件的宽度

height

+

height

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置组件的高度

+

设置组件的高度

x

+

x

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置当前svg的x轴坐标,根svg节点无效

+

设置当前svg的x轴坐标,根svg节点无效

y

+

y

<length>|<percentage>

+

<length>|<percentage>

  

+

设置当前svg的y轴坐标,根svg节点无效

+

设置当前svg的y轴坐标,根svg节点无效

viewBox

+

viewBox

string

+

string

-

+

-

+

设置当前svg的视口。支持的格式为<number number number number>,4个参数分别表示min-x, min-y, width and height,viewBox的宽高和svg的宽高不一致,会以中心对齐进行缩放。

+

设置当前svg的视口。支持的格式为<number number number number>,4个参数分别表示min-x, min-y, width and height,viewBox的宽高和svg的宽高不一致,会以中心对齐进行缩放。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" index 4caa869fcb0f0884fb91ac1c52a1a792d3034260..24cd01c5935c68ee5c646eec70d469baf7712c61 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/04.circle.md" @@ -1,6 +1,6 @@ --- title: circle -permalink: /pages/000b0100010603 +permalink: /pages/010c0201010704 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # circle 圆形形状。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,63 +28,62 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

width

+

width

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形的宽度。支持属性动画

+

设置矩形的宽度。支持属性动画

height

+

height

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形的高度。支持属性动画

+

设置矩形的高度。支持属性动画

x

+

x

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形左上角x轴坐标。支持属性动画

+

设置矩形左上角x轴坐标。支持属性动画

y

+

y

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形左上角y轴坐标。支持属性动画

+

设置矩形左上角y轴坐标。支持属性动画

rx

+

rx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形圆角x方向半径。支持属性动画

+

设置矩形圆角x方向半径。支持属性动画

ry

+

ry

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置矩形圆角y方向半径。支持属性动画

+

设置矩形圆角y方向半径。支持属性动画

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" index 53cbcceba2b76396efc6478f20e62cd2bebaeb9b..61dce32d740ac3db6f48d28419f763a975e29708 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/05.ellipse.md" @@ -1,6 +1,6 @@ --- title: ellipse -permalink: /pages/000b0100010604 +permalink: /pages/010c0201010705 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # ellipse 椭圆形状。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,74 +28,73 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

cx

+

cx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置圆心的x轴坐标。支持属性动画

+

设置圆心的x轴坐标。支持属性动画

cy

+

cy

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置圆心的y轴坐标。支持属性动画

+

设置圆心的y轴坐标。支持属性动画

r

+

r

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置圆的半径。支持属性动画

+

设置圆的半径。支持属性动画

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" index 1d2b2272c3f768f7a9e7670d6262237962b19b11..fe404c1572332a4e830c314dbfa606abe4410be4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/06.path.md" @@ -1,6 +1,6 @@ --- title: path -permalink: /pages/000b0100010605 +permalink: /pages/010c0201010706 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # path 绘制路径。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,43 +28,42 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性,设置的通用属性会传递给子组件。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性,设置的通用属性会传递给子组件。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

cx

+

cx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置椭圆的x轴坐标。支持属性动画

+

设置椭圆的x轴坐标。支持属性动画

cy

+

cy

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置椭圆的y轴坐标。支持属性动画

+

设置椭圆的y轴坐标。支持属性动画

rx

+

rx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置椭圆x轴的半径。支持属性动画

+

设置椭圆x轴的半径。支持属性动画

ry

+

ry

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置椭圆y轴的半径。支持属性动画

+

设置椭圆y轴的半径。支持属性动画

名称

+ - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" similarity index 39% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" index 83d8def46cd2ad1fd9828d8df367a0124ae3a265..96009c83e05d1c3d7192f4367e184c5e7bdfb0e9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/07.line.md" @@ -1,6 +1,6 @@ --- title: line -permalink: /pages/000b0100010606 +permalink: /pages/010c0201010707 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # line 绘制线条。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -30,72 +30,71 @@ date: 2021-12-30 18:31:39 支持所列的Svg组件通用属性和以下表格的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

d

+

d

string

+

string

-

+

-

+

设置路径的形状。包含一组字符指令,大写字母为绝对路径,小写字符为相对路径。

-

字母指令表示的意义如下:

-
  • M/m = moveto
  • L/l = lineto
  • H/h = horizontal lineto
  • V/v = vertical lineto
  • C/c = curveto
  • S/s = smooth curveto
  • Q/q = quadratic Belzier curve
  • T/t = smooth quadratic Belzier curveto
  • A/a = elliptical Arc
  • Z/z = closepath
+

设置路径的形状。包含一组字符指令,大写字母为绝对路径,小写字符为相对路径。

+

字母指令表示的意义如下:

+
  • M/m = moveto
  • L/l = lineto
  • H/h = horizontal lineto
  • V/v = vertical lineto
  • C/c = curveto
  • S/s = smooth curveto
  • Q/q = quadratic Belzier curve
  • T/t = smooth quadratic Belzier curveto
  • A/a = elliptical Arc
  • Z/z = closepath

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" index 82a3909f50503b2219ddc497f7fafe678587306f..aa70f0865d142ca29fb602dcc687f1e2a8e2f6d2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/08.polyline.md" @@ -1,6 +1,6 @@ --- title: polyline -permalink: /pages/000b0100010607 +permalink: /pages/010c0201010708 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # polyline 绘制折线。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -30,41 +30,40 @@ date: 2021-12-30 18:31:39 支持所列的Svg组件通用属性和以下表格的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

x1

+

x1

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置线条起点的x轴坐标。支持属性动画

+

设置线条起点的x轴坐标。支持属性动画

y1

+

y1

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置线条起点的y轴坐标。支持属性动画

+

设置线条起点的y轴坐标。支持属性动画

x2

+

x2

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置线条终点的x轴坐标。支持属性动画

+

设置线条终点的x轴坐标。支持属性动画

y2

+

y2

<length>|<percentage>

+

<length>|<percentage>

-

+

-

+

设置线条终点的y轴坐标。支持属性动画

+

设置线条终点的y轴坐标。支持属性动画

名称

+ - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" index a542dab1daaf6163d8d03368bb8eaa1079292dc2..d307efb37cd6bdfc717912b94691b809e369320c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/09.polygon.md" @@ -1,6 +1,6 @@ --- title: polygon -permalink: /pages/000b0100010608 +permalink: /pages/010c0201010709 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # polygon 绘制多边形。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,43 +28,42 @@ date: 2021-12-30 18:31:39 ## 属性 -支持所列的Svg组件通用属性和以下表格的属性。 +支持Svg组件[通用属性](/pages/010c0201010701)和以下属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

points

+

points

string

+

string

-

+

-

+

设置折线的多个坐标点

-

格式为[x1,y1 x2,y2 x3,y3]。

-

支持属性动画,如果属性动画里设置的动效变化值的坐标个数与原始points的格式不一样,则无效

+

设置折线的多个坐标点

+

格式为[x1,y1 x2,y2 x3,y3]。

+

支持属性动画,如果属性动画里设置的动效变化值的坐标个数与原始points的格式不一样,则无效

名称

+ - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" similarity index 43% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" index 5e7eace748b43434cac60f7341f1c18cff29e922..35a8a4c46f8fac66c5f5a7972861de84eb00fa6c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/10.text.md" @@ -1,6 +1,6 @@ --- title: text -permalink: /pages/000b0100010609 +permalink: /pages/010c020101070a navbar: true sidebar: true prev: true @@ -9,17 +9,17 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # text 文本,用于呈现一段信息。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 从API Version 7 开始支持。 +>- 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 >- 文本的展示内容需要写在元素标签内,可嵌套tspan子元素标签分段,可嵌套textPath子元素标签按指定路径绘制。 >- 只支持被父元素标签svg嵌套。 ->- 只支持默认字体sans-serif +>- 只支持默认字体sans-serif。 ## 权限列表 @@ -33,160 +33,159 @@ date: 2021-12-30 18:31:39 支持以下表格中的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

points

+

points

string

+

string

-

+

-

+

设置多边形的多个坐标点

-

格式为[x1,y1 x2,y2 x3,y3]。

-

支持属性动画,如果属性动画里设置的动效变化值的坐标个数与原始points的格式不一样,则无效

+

设置多边形的多个坐标点

+

格式为[x1,y1 x2,y2 x3,y3]。

+

支持属性动画,如果属性动画里设置的动效变化值的坐标个数与原始points的格式不一样,则无效

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" similarity index 44% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" index 493d11d18c37cb95039802e28a27277184a092f7..fe3a3ee8add250d160c7db945f4c6652540e5998 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/11.tspan.md" @@ -1,6 +1,6 @@ --- title: tspan -permalink: /pages/000b010001060a +permalink: /pages/010c020101070b navbar: true sidebar: true prev: true @@ -9,12 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # tspan >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 从API Version 7 开始支持。 +>- 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 >- 文本的展示内容需要写在元素标签内,可嵌套子元素标签tspan分段。 >- 文本分段,只支持被父元素标签svg嵌套。 @@ -28,160 +28,159 @@ date: 2021-12-30 18:31:39 支持以下表格中的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

x

+

x

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置组件左上角x轴坐标

+

设置组件左上角x轴坐标

y

+

y

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置组件左上角y轴坐标

+

设置组件左上角y轴坐标

dx

+

dx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置文本x轴偏移

+

设置文本x轴偏移

dy

+

dy

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置文本y轴偏移

+

设置文本y轴偏移

rotate

+

rotate

number

+

number

0

+

0

+

字体以左下角为圆心旋转角度,正数顺时针,负数逆时针

+

字体以左下角为圆心旋转角度,正数顺时针,负数逆时针

font-size

+

font-size

<length>

+

<length>

30px

+

30px

+

设置文本的尺寸。

+

设置文本的尺寸。

fill

+

fill

<color>

+

<color>

black

+

black

+

字体填充颜色

+

字体填充颜色

fill-opacity

+

fill-opacity

number

+

number

1.0

+

1.0

+

字体填充透明度

+

字体填充透明度

opacity

+

opacity

number

+

number

1

+

1

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

stroke

+

stroke

<color>

+

<color>

black

+

black

+

绘制字体边框并指定颜色

+

绘制字体边框并指定颜色

stroke-width

+

stroke-width

number

+

number

1px

+

1px

+

字体边框宽度

+

字体边框宽度

stroke-opacity

+

stroke-opacity

number

+

number

1.0

+

1.0

+

字体边框透明度

+

字体边框透明度

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" similarity index 58% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" index b0118a455e3fa6fa23d03e4515664a3fd4f76cb0..a48c7aec26bff226f562c9ed6aca13e1d6de53e3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/12.textPath.md" @@ -1,6 +1,6 @@ --- title: textPath -permalink: /pages/000b010001060b +permalink: /pages/010c020101070c navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # textPath 沿路径绘制文本。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 从API Version 7 开始支持。 +>- 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 >- 按指定的路径绘制文本,可嵌套子标签tspan分段。 >- 只支持被父元素标签text嵌套。 @@ -32,129 +32,139 @@ tspan。 支持以下表格中的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

x

+

x

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置组件左上角x轴坐标

+

设置组件左上角x轴坐标

y

+

y

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置组件左上角y轴坐标。作为textpath子组件时失效。

+

设置组件左上角y轴坐标。作为textpath子组件时失效。

dx

+

dx

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置文本x轴偏移

+

设置文本x轴偏移

dy

+

dy

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置文本y轴偏移。作为textpath子组件时失效。

+

设置文本y轴偏移。作为textpath子组件时失效。

rotate

+

rotate

number

+

number

0

+

0

+

字体以左下角为圆心旋转角度,正数顺时针,负数逆时针

+

字体以左下角为圆心旋转角度,正数顺时针,负数逆时针

font-size

+

font-size

<length>

+

<length>

30px

+

30px

+

设置文本的尺寸。

+

设置文本的尺寸。

fill

+

fill

<color>

+

<color>

black

+

black

+

字体填充颜色

+

字体填充颜色

opacity

+

opacity

number

+

number

1

+

1

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

fill-opacity

+

fill-opacity

number

+

number

1.0

+

1.0

+

字体填充透明度

+

字体填充透明度

stroke

+

stroke

<color>

+

<color>

black

+

black

+

绘制字体边框并指定颜色

+

绘制字体边框并指定颜色

stroke-width

+

stroke-width

number

+

number

1px

+

1px

+

字体边框宽度

+

字体边框宽度

stroke-opacity

+

stroke-opacity

number

+

number

1.0

+

1.0

+

字体边框透明度

+

字体边框透明度

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -162,7 +172,7 @@ tspan。 ## 示例 -textspan属性示例,textpath文本内容沿着属性path中的路径绘制文本,起点偏移20%的path长度。(绘制的元素曲线仅做参照)。 +textspan属性示例,textpath文本内容沿着属性path中的路径绘制文本,起点偏移20%的path长度。(绘制的元素曲线仅做参照) ``` /* xxx.css */ diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" index 8e51a2d67e03c8a2940fe9d0d6b4dec4c2aa295d..5977cb84b545e8be452b4512abf25ac8b277564a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/13.animate.md" @@ -1,6 +1,6 @@ --- title: animate -permalink: /pages/000b010001060c +permalink: /pages/010c020101070d navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # animate 设置svg组件的属性动画。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -28,179 +28,178 @@ date: 2021-12-30 18:31:39 ## 属性 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

path

+

path

string

+

string

0

+

0

+

设置路径的形状。

-

字母指令表示的意义如下:

-
  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Belzier curve
  • T = smooth quadratic Belzier curveto
  • A = elliptical Arc
  • Z = closepath
+

设置路径的形状。

+

字母指令表示的意义如下:

+
  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Belzier curve
  • T = smooth quadratic Belzier curveto
  • A = elliptical Arc
  • Z = closepath

startOffset

+

startOffset

<length>|<percentage>

+

<length>|<percentage>

0

+

0

+

设置文本沿path绘制的起始偏移。

+

设置文本沿path绘制的起始偏移。

font-size

+

font-size

<length>

+

<length>

30px

+

30px

+

设置文本的尺寸。

+

设置文本的尺寸。

fill

+

fill

<color>

+

<color>

black

+

black

+

字体填充颜色

+

字体填充颜色

opacity

+

by

number

+

number

1

+

-

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

+

相对被指定动画的属性偏移值,from默认为原属性值。

fill-opacity

+

opacity

number

+

number

1.0

+

1

+

字体填充透明度

+

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

stroke

+

fill-opacity

<color>

+

number

black

+

1.0

+

绘制字体边框并指定颜色

+

字体填充透明度

stroke-width

+

stroke

number

+

<color>

1px

+

black

+

字体边框宽度

+

绘制字体边框并指定颜色

stroke-opacity

+

stroke-width

number

+

number

1.0

+

1px

+

字体边框透明度

+

字体边框宽度

+

stroke-opacity

+

number

+

1.0

+

+

字体边框透明度

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" similarity index 48% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" index 1f240762d7b86b04defbb114a028dc2a06c543cf..115384a8501b8473d94c06639ad0077857c9883d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/14.animateMotion.md" @@ -1,6 +1,6 @@ --- title: animateMotion -permalink: /pages/000b010001060d +permalink: /pages/010c020101070e navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # animateMotion 路径动效。 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -30,50 +30,49 @@ date: 2021-12-30 18:31:39 支持animate属性\(values不生效\)和以下表格中的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

id

+

id

string

+

string

-

+

-

+

组件的唯一标识。

+

组件的唯一标识。

attributeName

+

attributeName

string

+

string

-

+

-

+

设置需要进行动效的属性名。

+

设置需要进行动效的属性名。

begin

+

begin

<time>

+

<time>

0

+

0

+

设置动效的延迟时间。

-

支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

+

设置动效的延迟时间。

+

支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

dur

+

dur

<time>

+

<time>

0

+

0

+

设置动效持续时间,如果dur没设置,按照end-begin的结果作为持续时间,小于等于0时,动效不触发。

-

支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

+

设置动效持续时间,如果dur没设置,按照end-begin的结果作为持续时间,小于等于0时,动效不触发。

+

支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

end

+

end

<time>

+

<time>

0

+

0

+

设置动效多久时间后结束。支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

+

设置动效多久时间后结束。支持输入ms(毫秒)、s(秒)、m(分),默认为s(秒),其他格式不支持

repeatCount

+

repeatCount

<number | indefinite>

+

<number | indefinite>

1

+

1

+

设置动画播放的次数,默认无限次播放(indefinite),可通过设置为数值1仅播放一次。

+

设置动画播放的次数,默认无限次播放(indefinite),可通过设置为数值1仅播放一次。

fill

+

fill

<freeze | remove>

+

<freeze | remove>

remove

+

remove

+

设置动画结束时的状态。

+

设置动画结束时的状态。

calcMode

+

calcMode

<discrete | linear | paced | spline>

+

<discrete | linear | paced | spline>

linear

+

linear

+

设置动画的插值模式。

-

discrete:阶跃,from值直接跳转到to的值;

-

linear:线性;

-

paced:线性,设置此项后keyTimes和keyPoints值无效

-

spline:自定义贝塞尔曲线,spline点定义在keyTimes属性中,每个时间间隔控制点由keySplines定义

+

设置动画的插值模式。

+

discrete:阶跃,from值直接跳转到to的值;

+

linear:线性;

+

paced:线性,设置此项后keyTimes和keyPoints值无效

+

spline:自定义贝塞尔曲线,spline点定义在keyTimes属性中,每个时间间隔控制点由keySplines定义

keyTimes

+

keyTimes

string

+

string

-

+

-

+

设置关键帧动画的开始时间,值为0~1之间的数值用分号隔开,比如0;0.3;0.8;1。keyTimes、keySplines、values组合设置关键帧动画。keyTimes和values的个数保持一致。keySplines个数为keyTimes个数减一

+

设置关键帧动画的开始时间,值为0~1之间的数值用分号隔开,比如0;0.3;0.8;1。keyTimes、keySplines、values组合设置关键帧动画。keyTimes和values的个数保持一致。keySplines个数为keyTimes个数减一

keySplines

+

keySplines

string

+

string

-

+

-

+

与keyTimes相关联的一组贝塞尔控制点。定义每个关键帧的贝塞尔曲线,曲线之间用分号隔开。曲线内的两个控制掉格式为x1 y1 x2 y2。比如0.5 0 0.5 1; 0.5 0 0.5 1;0.5 0 0.5 1

+

与keyTimes相关联的一组贝塞尔控制点。定义每个关键帧的贝塞尔曲线,曲线之间用分号隔开。曲线内的两个控制掉格式为x1 y1 x2 y2。比如0.5 0 0.5 1; 0.5 0 0.5 1;0.5 0 0.5 1

by

+

by

number

+

number

-

+

-

+

在动画中对某一指定属性,添加相对偏移值,from默认为原属性值。

+

在动画中对某一指定属性,添加相对偏移值,from默认为原属性值。

from

+

from

string

+

string

-

+

-

+

设置需要进行动画的属性的开始值。

-

如果已经设置了values属性,则from失效。

+

设置需要进行动画的属性的开始值。

+

如果已经设置了values属性,则from失效。

to

+

to

string

+

string

-

+

-

+

设置需要进行动画的属性的结束值。

-

如果已经设置了values属性,则to都失效。

+

设置需要进行动画的属性的结束值。

+

如果已经设置了values属性,则to都失效。

values

+

values

string

+

string

-

+

-

+

设置一组动画的变化值。格式为value1;value2;value3。

+

设置一组动画的变化值。格式为value1;value2;value3。

名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" similarity index 84% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" index 770e5f76fb55de76057f8d9fbe86ab2627f91c57..0d42f4075e49032326a487e7a08529e4bb9d237b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/15.animateTransform.md" @@ -1,6 +1,6 @@ --- title: animateTransform -permalink: /pages/000b010001060e +permalink: /pages/010c020101070f navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # animateTransform @@ -18,7 +18,7 @@ transform动效,支持的组件范围: , , , , , , , >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 权限列表 @@ -32,28 +32,27 @@ transform动效,支持的组件范围: 支持animate属性和以下表格中的属性。 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

keyPoints

+

keyPoints

string

+

string

-

+

-

+

一组关键帧的点位置,每帧的值为对象沿路径的距离比例。功能与animate属性中的values相同。

+

一组关键帧的点位置,每帧的值为对象沿路径的距离比例。功能与animate属性中的values相同。

path

+

path

string

+

string

-

+

-

+

定义运动的路径,使用与path组件d属性相同的语法。

+

定义运动的路径,使用与path组件d属性相同的语法。

rotate

+

rotate

[auto | auto-reverse | <number>]

+

[auto | auto-reverse | <number>]

auto

+

auto

-

+

-

设置动画对象的旋转方向

+

设置动画对象的旋转方向

名称

+ - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" index 886702887bcb9289f74e86d5849c10c7e16ec016..ad38a9b877f76ad72ad60cd67bca2d886a85ce4a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/01.\345\237\272\346\234\254\347\224\250\346\263\225.md" @@ -1,6 +1,6 @@ --- title: 基本用法 -permalink: /pages/000b01000200 +permalink: /pages/010c02010201 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # 基本用法 @@ -40,37 +40,36 @@ date: 2021-12-30 18:31:39 >子组件中使用驼峰命名法命名的事件,在父组件中绑定时需要使用短横线分隔命名形式,例如:@children-event表示绑定子组件的childrenEvent事件,如 @children-event="bindParentVmMethod"。 -## 对象 +**表 1** 对象 - -

名称

类型

+

类型

默认值

+

默认值

必填

+

必填

描述

+

描述

type

+

type

[translate | scale | rotate | skewX | skewY]

+

[translate | scale | rotate | skewX | skewY]

-

+

-

+

设置transform动画的类型

+

设置transform动画的类型

属性

+ - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" index c7b1d483ba1cef1a6c30d3f0a0167c78b4a7243d..0140d6fcd9ed49e4517444cce17436d419c425fe 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/02.\350\207\252\345\256\232\344\271\211\344\272\213\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 自定义事件 -permalink: /pages/000b01000201 +permalink: /pages/010c02010202 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # 自定义事件 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" index 56391bbaf29fcc738e232fe9e68415f484518a60..8f6bbe47ecdfa56bcca6bff190a1da6d4a01da73 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/03.Props.md" @@ -1,6 +1,6 @@ --- title: Props -permalink: /pages/000b01000202 +permalink: /pages/010c02010203 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # Props diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" similarity index 94% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" index 049bd214cb7df51b7a9f18532206ea8926b7aca3..45c7d823252a9d4cf02c022e38426e9a98c77ae8 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/04.\344\272\213\344\273\266\345\217\202\346\225\260.md" @@ -1,6 +1,6 @@ --- title: 事件参数 -permalink: /pages/000b01000203 +permalink: /pages/010c02010204 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # 事件参数 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" index a284886c4815e3d79adfbc159017325db8eeff08..ca5471fe096d86be6581b8d6aa4f22be0950dd5d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/05.slot\346\217\222\346\247\275.md" @@ -1,6 +1,6 @@ --- title: slot插槽 -permalink: /pages/000b01000204 +permalink: /pages/010c02010205 navbar: true sidebar: true prev: true @@ -9,12 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- # slot插槽 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 7 开始支持。 +>从API Version 7 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 默认插槽 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..88284a2e035ef167108a6bf89015e6d3e9387769 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" @@ -0,0 +1,129 @@ +--- +title: 生命周期定义 +permalink: /pages/010c02010206 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 生命周期定义 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 5 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +我们为自定义组件提供了一系列生命周期回调方法,便于开发者管理自定义组件的内部逻辑。生命周期主要包括:onInit,onAttached,onDetached,onLayoutReady,onDestroy,onPageShow和onPageHide。下面我们依次介绍一下各个生命周期回调的时机。 + +

属性

类型

+

类型

描述

+

描述

data

+

data

Object/Function

+

Object/Function

页面的数据模型,类型是对象或者函数,如果类型是函数,返回值必须是对象。属性名不能以$或_开头,不要使用保留字for, if, show, tid。

-

data与private和public不能重合使用。

+

页面的数据模型,类型是对象或者函数,如果类型是函数,返回值必须是对象。属性名不能以$或_开头,不要使用保留字for, if, show, tid。

+

data与private和public不能重合使用。(Rich)

props

+

props

Array/Object

+

Array/Object

props用于组件之间的通信,可以通过<tag xxxx='value'>方式传递给组件;props名称必须用小写,不能以$或_开头,不要使用保留字for, if, show, tid。目前props的数据类型不支持Function。

+

props用于组件之间的通信,可以通过<tag xxxx='value'>方式传递给组件;props名称必须用小写,不能以$或_开头,不要使用保留字for, if, show, tid。目前props的数据类型不支持Function。

computed

+

computed

Object

+

Object

用于在读取或设置进行预先处理,计算属性的结果会被缓存。计算属性名不能以$或_开头,不要使用保留字。

+

计算属性,用于在读取或设置时,进行预先处理,其结果会被缓存。计算属性名不能以$或_开头,不要使用保留字。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

描述

+

触发时机

+

onInit

+

Function

+

初始化自定义组件

+

自定义组件初始化生命周期回调,当自定义组件创建时,触发该回调,主要用于自定义组件中必须使用的数据初始化,该回调只会触发一次调用。

+

onAttached

+

Function

+

自定义组件装载

+

自定义组件被创建后,加入到Page组件树时,触发该回调,该回调触发时,表示组件将被进行显示,该生命周期可用于初始化显示相关数据,通常用于加载图片资源、开始执行动画等场景。

+

onLayoutReady

+

Function

+

自定义组件布局完成

+

自定义组件插入Page组件树后,将会对自定义组件进行布局计算,调整其内容元素尺寸与位置,当布局计算结束后触发该回调。

+

onDetached

+

Function

+

自定义组件摘除

+

自定义组件摘除时,触发该回调,常用于停止动画或异步逻辑停止执行的场景。

+

onDestroy

+

Function

+

自定义组件销毁

+

自定义组件销毁时,触发该回调,常用于资源释放。

+

onPageShow

+

Function

+

自定义组件Page显示

+

自定义组件所在Page显示后,触发该回调。

+

onPageHide

+

Function

+

自定义组件Page隐藏

+

自定义组件所在Page隐藏后,触发该回调。

+
+ +## 示例 + +``` + +
+ {{value}} +
+``` + +``` +//comp.js +export default { + data: { + value: "组件创建" + }, + onInit() { + console.log("组件创建") + }, + onAttached() { + this.value = "组件挂载" + }, + onDetached() { + this.value = "" + }, + onPageShow() { + console.log("Page显示") + }, + onPageHide() { + console.log("Page隐藏") + } +} +``` + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" index de884719dba3a1aa83743e306e7bb8999583aff4..9f1ddccfc0fe130000ecfa7ba693d091b7e69c7a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\351\231\204\345\275\225/01.\347\261\273\345\236\213\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 类型说明 -permalink: /pages/000b01000300 +permalink: /pages/010c02010301 navbar: true sidebar: true prev: true @@ -9,13 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- -# 类型说明 +# 类型说明 -## 长度类型 +## 长度类型 -

名称

类型定义

@@ -42,9 +41,8 @@ date: 2021-12-30 18:31:39
-## 颜色类型 +## 颜色类型 -

名称

类型定义

@@ -69,7 +67,6 @@ date: 2021-12-30 18:31:39 **表 1** 当前支持的颜色枚举 - - -

枚举名称

对应颜色

@@ -131,7 +128,7 @@ date: 2021-12-30 18:31:39

#000000

+

blanchedalmond

@@ -1006,7 +1003,7 @@ date: 2021-12-30 18:31:39

#708090

+

snow

@@ -1109,4 +1106,3 @@ date: 2021-12-30 18:31:39
- diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..d1e974f049adc06b78b928e2e8b63dec328585af --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" @@ -0,0 +1,211 @@ +--- +title: 点击事件 +permalink: /pages/010c020201010101 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 点击事件 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 事件 + + + + + + + + + + + +

名称

+

支持冒泡

+

功能描述

+

onClick(callback: (event?: ClickEvent) => void)

+

+

点击动作触发该方法调用,event参数见ClickEvent介绍。

+
+ +- ClickEvent对象说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

属性名称

+

类型

+

描述

+

screenX

+

number

+

点击点相对于设备屏幕左边沿的X坐标。

+

screenY

+

number

+

点击点相对于设备屏幕上边沿的Y坐标。

+

x

+

number

+

点击点相对于被点击元素左边沿的X坐标。

+

y

+

number

+

点击点相对于被点击元素上边沿的Y坐标。

+

target8+

+

EventTarget

+

被点击元素对象。

+

timestamp

+

number

+

事件时间戳。

+
+ +- EventTarget对象说明8+ + + + + + + + + + + + +

名称

+

参数类型

+

描述

+

area

+

Area

+

目标元素的区域信息。

+
+ +- Area对象说明8+ + + + + + + + + + + + + + + + + + + + + + + + +

属性名称

+

类型

+

描述

+

width

+

Length

+

目标元素的宽度。

+

height

+

Length

+

目标元素的高度。

+

pos

+

Position

+

目标元素左上角相对父元素左上角的位置。

+

globalPos

+

Position

+

目标元素左上角相对页面左上角的位置。

+
+ +- Position对象说明8+ + + + + + + + + + + + + + + + +

属性名称

+

参数类型

+

描述

+

x

+

Length

+

x轴坐标。

+

y

+

Length

+

y轴坐标。

+
+ + +## 示例 + +``` +@Entry +@Component +struct ClickExample { + @State text: string = '' + + build() { + Column() { + Button('Click').backgroundColor(0x2788D9).width(100).height(40) + .onClick((event: ClickEvent) => { + console.info(this.text = 'Click Point:' + '\n screenX:' + event.screenX + '\n screenY:' + event.screenY + + '\n x :' + event.x + '\n y:' + event.y + '\ntarget:' + '\n component globalPos:(' + + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\n width:' + + event.target.area.width + '\n height:' + event.target.area.height) + }) + Text(this.text).padding(15) + }.height(350).width('100%').padding(10) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355087.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" index 5f4667b6569fb160cf30038bc8ae6e4a005a1589..7b7a12a38d2290c4d2f79f1b73bebbc2fb7ff621 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/02.\350\247\246\346\221\270\344\272\213\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 触摸事件 -permalink: /pages/000b010102000001 +permalink: /pages/010c020201010102 navbar: true sidebar: true prev: true @@ -9,24 +9,32 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- -# 触摸事件 +# 触摸事件 - -

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 事件 + + - - - - - @@ -36,41 +44,47 @@ date: 2021-12-30 18:31:39 - 属性 - -

名称

是否冒泡

+

是否冒泡

功能描述

+

功能描述

onTouch(callback: (event?: TouchEvent) => void)

+

onTouch(callback: (event?: TouchEvent) => void)

+

触摸动作触发该方法调用,event参数见TouchEvent介绍。

+

触摸动作触发该方法调用,event参数见TouchEvent介绍。

属性名称

+ - - - + + + + - - - - - - - - - - - @@ -79,16 +93,15 @@ date: 2021-12-30 18:31:39 - 接口 - -

属性名称

属性类型

+

类型

描述

+

描述

type

+

type

+

TouchType

+

触摸事件的类型。

+

touches

TouchType

+

Array<TouchObject>

触摸事件的类型。

+

全部手指信息。

touches

+

changedTouches

Array<TouchObject>

+

Array<TouchObject>

全部手指信息。

+

当前发生变化的手指信息。

changedTouches

+

timestamp

Array<TouchObject>

+

number

当前发生变化的手指信息。

+

事件时间戳。

timestamp

+

target8+

number

+

EventTarget

事件时间戳。

+

被触摸元素对象。

接口名称

+ - - - @@ -97,55 +110,54 @@ date: 2021-12-30 18:31:39 - TouchObject对象说明 - -

接口名称

功能描述

+

功能描述

stopPropagation():void

+

stopPropagation():void

阻塞事件冒泡。

+

阻塞事件冒泡。

属性名称

+ - - - - - - - - - - - - - - - - - - - - @@ -154,31 +166,30 @@ date: 2021-12-30 18:31:39 - TouchType枚举说明 - -

属性名称

属性类型

+

类型

描述

+

描述

type

+

type

TouchType

+

TouchType

触摸事件的类型。

+

触摸事件的类型。

id

+

id

number

+

number

手指唯一标识符。

+

手指唯一标识符。

screenX

+

screenX

number

+

number

触摸点相对于设备屏幕左边沿的X坐标。

+

触摸点相对于设备屏幕左边沿的X坐标。

screenY

+

screenY

number

+

number

触摸点相对于设备屏幕上边沿的Y坐标。

+

触摸点相对于设备屏幕上边沿的Y坐标。

x

+

x

number

+

number

触摸点相对于被触摸元素左边沿的X坐标。

+

触摸点相对于被触摸元素左边沿的X坐标。

y

+

y

number

+

number

触摸点相对于被触摸元素上边沿的Y坐标。

+

触摸点相对于被触摸元素上边沿的Y坐标。

名称

+ - - - - - - - - - @@ -196,7 +207,7 @@ struct TouchExample { build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceBetween }) { - Button('Touch').backgroundColor(0x2788D9) + Button('Touch').backgroundColor(0x2788D9).height(40).width(80) .onTouch((event: TouchEvent) => { if (event.type === TouchType.Down) { this.eventType = 'Down' @@ -207,7 +218,10 @@ struct TouchExample { if (event.type === TouchType.Move) { this.eventType = 'Move' } - console.info(this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: ' + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y) + console.info(this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: ' + + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\ncomponent globalPos:(' + + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height) }) Text(this.text) }.height(200).width(350).padding({ left: 35, right: 35, top: 35 }) @@ -215,5 +229,5 @@ struct TouchExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/Touch.gif) +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915178.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" similarity index 48% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" index 3631abd14ccb8eda1c7679829965c31040cfaad4..b46f518b98546d2d2134e2459c26fde6b5839aa6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/03.\346\214\202\350\275\275\345\215\270\350\275\275\344\272\213\344\273\266.md" @@ -1,6 +1,6 @@ --- title: 挂载卸载事件 -permalink: /pages/000b010102000002 +permalink: /pages/010c020201010103 navbar: true sidebar: true prev: true @@ -9,31 +9,39 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:53 --- -# 挂载卸载事件 +# 挂载卸载事件 - -

名称

描述

+

描述

Down

+

Down

手指按下时触发。

+

手指按下时触发。

Up

+

Up

手指抬起时触发。

+

手指抬起时触发。

Move

+

Move

手指按压态在屏幕上移动时触发。

+

手指按压态在屏幕上移动时触发。

Cancel

+

Cancel

触摸事件取消时触发。

+

触摸事件取消时触发。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 事件 + + - - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..75ef0c4057663e610cf61cb75cd00e3790d98853 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" @@ -0,0 +1,258 @@ +--- +title: 按键事件 +permalink: /pages/010c020201010104 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 按键事件 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 事件 + +

名称

支持冒泡

+

支持冒泡

功能描述

+

功能描述

onAppear(callback: () => void)

+

onAppear(callback: () => void)

+

组件挂载显示时触发此回调。

+

组件挂载显示时触发此回调。

onDisappear(callback: () => void)

+

onDisappear(callback: () => void)

+

组件卸载消失时触发此回调。

+

组件卸载消失时触发此回调。

+ + + + + + + + + +

名称

+

支持冒泡

+

功能描述

+

onKeyEvent(event: (event?: KeyEvent) => void)

+

+

按键动作触发该方法调用,event参数见KeyEvent介绍。

+
+ +## KeyEvent对象说明 + +- 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

属性名称

+

类型

+

描述

+

type

+

KeyType

+

按键的类型。

+

keyCode

+

number

+

按键的键码。

+

keyText

+

string

+

按键的键值。

+

keySource

+

KeySource

+

触发当前按键的输入设备类型。

+

deviceId

+

number

+

触发当前按键的输入设备ID。

+

metaKey

+

number

+

按键发生时元键的状态,1表示按压态,0表示未按压态。

+

timestamp

+

number

+

按键发生时的时间戳。

+
+ + +- 接口 + + + + + + + + + +

接口名称

+

功能描述

+

stopPropagation(): void

+

阻塞事件冒泡传递。

+
+ +- KeyType枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Down

+

按键按下。

+

Up

+

按键松开。

+
+ + +- KeySource枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Unknown

+

输入设备类型未知。

+

Keyboard

+

输入设备类型为键盘。

+
+ +- 常用KeyCode说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

数值

+

行为

+

物理按键

+

19

+

+

向上方向键。

+

20

+

+

向下方向键。

+

21

+

+

向左方向键。

+

22

+

+

向右方向键。

+

23

+

确定

+

遥控器的确认键。

+

66

+

确定

+

键盘的回车键。

+

160

+

确定

+

键盘的小键盘回车键。

+
+ + +## 示例 + +``` +@Entry +@Component +struct KeyEventExample { + @State text: string = '' + @State eventType: string = '' + + build() { + Column() { + Button('KeyEvent').backgroundColor(0x2788D9) + .onKeyEvent((event: KeyEvent) => { + if (event.type === KeyType.Down) { + this.eventType = 'Down' + } + if (event.type === KeyType.Up) { + this.eventType = 'Up' + } + console.info(this.text = 'KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText) + }) + Text(this.text).padding(15) + }.height(300).width('100%').padding(35) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/KeyEvent.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/05.\347\273\204\344\273\266\345\214\272\345\237\237\345\217\230\345\214\226\344\272\213\344\273\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/05.\347\273\204\344\273\266\345\214\272\345\237\237\345\217\230\345\214\226\344\272\213\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..8201a4bf932c54f38ca2feef2999ce7b4477b5b2 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/05.\347\273\204\344\273\266\345\214\272\345\237\237\345\217\230\345\214\226\344\272\213\344\273\266.md" @@ -0,0 +1,71 @@ +--- +title: 组件区域变化事件 +permalink: /pages/010c020201010105 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 组件区域变化事件 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 事件 + + + + + + + + + + + +

名称

+

支持冒泡

+

功能描述

+

onAreaChange(event: (oldValue: Area, newValue: Area) => void)

+

+

组件区域变化时触发该回调,Area类型说明见Area对象介绍。

+
+ +## 示例 + +``` +@Entry +@Component +struct AreaExample { + @State value: string = 'Text' + @State size: string = '' + + build() { + Column() { + Text(this.value) + .backgroundColor(Color.Green).margin(30).fontSize(20) + .onClick(() => { + this.value = this.value + 'Text' + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`) + this.size = JSON.stringify(newValue) + }) + Text('new area is: \n' + this.size).margin({ right: 30, left: 30 }) + } + .width('100%').height('100%').margin({ top: 30 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF4.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..10751169f5cdf77adffe8ffe881ae411380554b8 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" @@ -0,0 +1,166 @@ +--- +title: 尺寸设置 +permalink: /pages/010c020201010201 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 尺寸设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数说明

+

默认值

+

描述

+

width

+

Length

+

-

+

设置组件自身的宽度,缺省时使用元素自身内容需要的宽度。

+

height

+

Length

+

-

+

设置组件自身的高度,缺省时使用元素自身内容需要的高度。

+

size

+

{

+

width?: Length,

+

height?: Length

+

}

+

-

+

设置高宽尺寸。

+

padding

+

{

+

top?: Length,

+

right?: Length,

+

bottom?: Length,

+

left?: Length

+

} | Length

+

0

+

设置内边距属性。

+

参数为Length类型时,四个方向内边距同时生效。

+

margin

+

{

+

top?: Length,

+

right?: Length,

+

bottom?: Length,

+

left?: Length

+

}

+

| Length

+

0

+

设置外边距属性。

+

参数为Length类型时,四个方向外边距同时生效。

+

constraintSize

+

{

+

minWidth?: Length,

+

maxWidth?: Length,

+

minHeight?: Length,

+

maxHeight?: Lenght

+

}

+

{

+

minWidth: 0,

+

maxWidth: Infinity,

+

minHeight: 0,

+

maxHeight: Infinity

+

}

+

设置约束尺寸,组件布局时,进行尺寸范围限制。

+

layoutWeight

+

number

+

0

+

容器尺寸确定时,元素与兄弟节点主轴布局尺寸按照权重进行分配,忽略本身尺寸设置。

+
说明:

仅在Row/Column/Flex布局中生效。

+
+
+ +## 示例 + +``` +@Entry +@Component +struct SizeExample { + build() { + Column({ space: 10 }) { + Text('margin and padding:').fontSize(12).fontColor(0xCCCCCC).width('90%') + // 宽度80 ,高度80 ,内外边距20 + Row() { + Row() { + Row().size({ width: '100%', height: '100%' }).backgroundColor(0xAFEEEE) + }.width(80).height(80).padding(20).margin(20).backgroundColor(0xFDF5E6) + }.backgroundColor(0xFFA500) + + Text('layoutWeight').fontSize(12).fontColor(0xCCCCCC).width('90%') + // 容器尺寸确定时,元素与兄弟节点主轴布局尺寸按照权重进行分配,忽略本身尺寸设置。 + Row() { + // 权重1 + Text('layoutWeight(1)') + .size({ width: '30%', height: 110 }).backgroundColor(0xFFEFD5).textAlign(TextAlign.Center) + .layoutWeight(1) + // 权重0 + Text('layoutWeight(2)') + .size({ width: '30%', height: 110 }).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center) + .layoutWeight(2) + // 权重默认0 + Text('no layoutWeight') + .size({ width: '30%', height: 110 }).backgroundColor(0xD2B48C).textAlign(TextAlign.Center) + }.size({ width: '90%', height: 140 }).backgroundColor(0xAFEEEE) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/size.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" similarity index 44% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" index 3230e43cbd07451c7ce121025e2c735efa3c8ad9..038bb6e627b2ed7fa4232e49533eaa74a342c954 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/02.\344\275\215\347\275\256\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 位置设置 -permalink: /pages/000b010102000101 +permalink: /pages/010c020201010202 navbar: true sidebar: true prev: true @@ -9,79 +9,87 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 位置设置 +# 位置设置 - -

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - - - - - - - - - @@ -89,26 +97,25 @@ date: 2021-12-30 18:31:40 - Direction枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

align

+

align

Alignment

+

Alignment

Center

+

Center

设置元素内容的对齐方式,只有当设置的width和height大小超过元素本身内容大小时生效。

+

设置元素内容的对齐方式,只有当设置的width和height大小超过元素本身内容大小时生效。

direction

+

direction

Direction

+

Direction

Auto

+

Auto

设置元素水平方向的布局,可选值参照Direction枚举说明。

+

设置元素水平方向的布局,可选值参照Direction枚举说明。

position

+

position

{

-

x: Length,

-

y: Length

-

}

+

{

+

x: Length,

+

y: Length

+

}

-

+

-

使用绝对定位,设置元素锚点相对于父容器顶部起点偏移位置。在布局容器中,设置该属性不影响父容器布局,仅在绘制时进行位置调整。

+

使用绝对定位,设置元素锚点相对于父容器顶部起点偏移位置。在布局容器中,设置该属性不影响父容器布局,仅在绘制时进行位置调整。

markAnchor

+

markAnchor

{

-

x: Length,

-

y: Length

-

}

+

{

+

x: Length,

+

y: Length

+

}

{

-

x: 0,

-

y: 0

-

}

+

{

+

x: 0,

+

y: 0

+

}

设置元素在位置定位时的锚点,以元素顶部起点作为基准点进行偏移。

+

设置元素在位置定位时的锚点,以元素顶部起点作为基准点进行偏移。

offset

+

offset

{

-

x: Length,

-

y: Length

-

}

+

{

+

x: Length,

+

y: Length

+

}

{

-

x: 0,

-

y: 0

-

}

+

{

+

x: 0,

+

y: 0

+

}

相对布局完成位置坐标偏移量,设置该属性,不影响父容器布局,仅在绘制时进行位置调整。

+

相对布局完成位置坐标偏移量,设置该属性,不影响父容器布局,仅在绘制时进行位置调整。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" similarity index 61% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" index 72d2b2ac6e1f62a9326f73359bf4f93ea3249143..946a4e9a22da5e084ca7d3ce3c8ff3a68311603a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/03.\345\270\203\345\261\200\347\272\246\346\235\237.md" @@ -1,6 +1,6 @@ --- title: 布局约束 -permalink: /pages/000b010102000102 +permalink: /pages/010c020201010203 navbar: true sidebar: true prev: true @@ -9,38 +9,46 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 布局约束 +# 布局约束 - -

名称

描述

+

描述

Ltr

+

Ltr

元素从左到右布局。

+

元素从左到右布局。

Rtl

+

Rtl

元素从右到左布局。

+

元素从右到左布局。

Auto

+

Auto

使用系统默认布局方向。

+

使用系统默认布局方向。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - @@ -97,10 +105,10 @@ struct AspectRatioExample { } ``` -**图 1** 竖屏显示 +**图 1** 竖屏显示 ![](/images/application-dev/reference/arkui-ts/figures/竖屏显示.gif "竖屏显示") -**图 2** 横屏显示 +**图 2** 横屏显示 ![](/images/application-dev/reference/arkui-ts/figures/横屏显示.gif "横屏显示") ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" similarity index 59% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" index a13cade5daf55c18e76fc013cd78e211bede03a6..df57193ecb0cb0b295faf2f5a8f0589098319eec 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/04.Flex\345\270\203\345\261\200.md" @@ -1,6 +1,6 @@ --- title: Flex布局 -permalink: /pages/000b010102000103 +permalink: /pages/010c020201010204 navbar: true sidebar: true prev: true @@ -9,58 +9,64 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# Flex布局 +# Flex布局 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 >- 仅当父组件是Flex组件时生效。 - -

名称

参数说明

+

参数说明

默认值

+

默认值

描述

+

描述

aspectRatio

+

aspectRatio

number

+

number

-

+

-

指定当前组件的宽高比。

+

指定当前组件的宽高比。

displayPriority

+

displayPriority

number

+

number

-

+

-

设置当前组件在布局容器中显示的优先级,当父容器空间不足时,低优先级的组件会被隐藏。

-
说明:
  • 仅在Row/Column/Flex(单行)容器组件中生效。
+

设置当前组件在布局容器中显示的优先级,当父容器空间不足时,低优先级的组件会被隐藏。

+
说明:

仅在Row/Column/Flex(单行)容器组件中生效。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" index 87fce741380ccc19b2dab0805073afa1e82a7817..c6fbb46d1a5e5d94b91dbe2d25887adf843d6db7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/05.\350\276\271\346\241\206\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 边框设置 -permalink: /pages/000b010102000104 +permalink: /pages/010c020201010205 navbar: true sidebar: true prev: true @@ -9,71 +9,79 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 边框设置 +# 边框设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 设置组件边框样式。 - -

名称

参数说明

+

参数说明

默认值

+

默认值

描述

+

描述

flexBasis

+

flexBasis

'auto' | Length

+

'auto' | Length

'auto'

+

'auto'

此属性所在的组件在Flex容器中主轴方向上基准尺寸。

+

此属性所在的组件在Flex容器中主轴方向上基准尺寸。

flexGrow

+

flexGrow

number

+

number

0

+

0

Flex容器的剩余空间分配给给此属性所在的组件的比例。

+

Flex容器的剩余空间分配给给此属性所在的组件的比例。

flexShrink

+

flexShrink

number

+

number

1

+

1

Flex容器压缩尺寸分配给此属性所在的组件的比例。

+

Flex容器压缩尺寸分配给此属性所在的组件的比例。

alignSelf

+

alignSelf

ItemAlign

+

ItemAlign

Auto

+

Auto

覆盖Flex布局容器中alignItems默认配置。

+

覆盖Flex布局容器中alignItems默认配置。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - - - - - - - - - @@ -81,26 +89,25 @@ date: 2021-12-30 18:31:40 - BorderStyle枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

border

+

border

{

-

width?: Length,

-

color?: Color,

-

radius?: Length,

-

style?: BorderStyle

-

}

+

{

+

width?: Length,

+

color?: Color,

+

radius?: Length,

+

style?: BorderStyle

+

}

-

+

-

统一边框样式设置接口。

+

统一边框样式设置接口。

borderStyle

+

borderStyle

BorderStyle

+

BorderStyle

Solid

+

Solid

设置元素的边框样式。

+

设置元素的边框样式。

borderWidth

+

borderWidth

Length

+

Length

0

+

0

设置元素的边框宽度。

+

设置元素的边框宽度。

borderColor

+

borderColor

Color

+

Color

-

+

-

设置元素的边框颜色。

+

设置元素的边框颜色。

borderRadius

+

borderRadius

Length

+

Length

0

+

0

设置元素的边框圆角半径。

+

设置元素的边框圆角半径。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" index 35415dd9a9296b4569b89e78ab7badee9824efe6..d0ae8e0aeab7100a049180147c33b564eb2280a5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/06.\350\203\214\346\231\257\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 背景设置 -permalink: /pages/000b010102000105 +permalink: /pages/010c020201010206 navbar: true sidebar: true prev: true @@ -9,68 +9,76 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 背景设置 +# 背景设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 设置组件的背景色。 - -

名称

描述

+

描述

Dotted

+

Dotted

显示为一系列圆点,圆点半径为borderWidth的一半。

+

显示为一系列圆点,圆点半径为borderWidth的一半。

Dashed

+

Dashed

显示为一系列短的方形虚线。

+

显示为一系列短的方形虚线。

Solid

+

Solid

显示为一条实线。

+

显示为一条实线。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - - - - - @@ -78,26 +86,25 @@ date: 2021-12-30 18:31:40 - ImageSize枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

backgroundColor

+

backgroundColor

Color

+

Color

-

+

-

设置组件的背景色。

+

设置组件的背景色。

backgroundImage

+

backgroundImage

src: string,

-

repeat?: ImageRepeat

+

src: string,

+

repeat?: ImageRepeat

-

+

-

src参数:图片地址,支持网络图片资源和本地图片资源地址(不支持svg类型的图片)。

-

repeat参数:设置背景图片的重复样式,默认不重复。

+

src参数:图片地址,支持网络图片资源和本地图片资源地址(不支持svg类型的图片)。

+

repeat参数:设置背景图片的重复样式,默认不重复。

backgroundImageSize

+

backgroundImageSize

{

-

width?: Length,

-

height?: Length

-

} | ImageSize

+

{

+

width?: Length,

+

height?: Length

+

} | ImageSize

Auto

+

Auto

设置背景图像的高度和宽度。当输入为{width: Length, height: Length}对象时,如果只设置一个属性,则第二个属性保持图片原始宽高比进行调整。默认保持原图的比例不变。

+

设置背景图像的高度和宽度。当输入为{width: Length, height: Length}对象时,如果只设置一个属性,则第二个属性保持图片原始宽高比进行调整。默认保持原图的比例不变。

backgroundImagePosition

+

backgroundImagePosition

{

-

x?: Length,

-

y?: Length

-

} | Alignment

+

{

+

x?: Length,

+

y?: Length

+

} | Alignment

{

-

x: 0,

-

y: 0

-

}

+

{

+

x: 0,

+

y: 0

+

}

设置背景图在组件中显示位置。

+

设置背景图在组件中显示位置。

类型

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" similarity index 51% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" index 9c00dc3415b434b68e17f4b1a0ef4182e548a6e8..27275e1eeb7b6e751d33298b6def8d246d5b0691 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/07.\351\200\217\346\230\216\345\272\246\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 透明度设置 -permalink: /pages/000b010102000106 +permalink: /pages/010c020201010207 navbar: true sidebar: true prev: true @@ -9,30 +9,38 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 透明度设置 +# 透明度设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 设置组件的透明度。 - -

类型

描述

+

描述

Cover

+

Cover

默认值,保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

+

默认值,保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

Contain

+

Contain

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

+

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

Auto

+

Auto

保持原图的比例不变。

+

保持原图的比例不变。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" similarity index 42% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" index a43821e45f7240d28fd595822a19f05232ceff93..3528b742f58ed01b86b003b6394213acabd22e64 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/08.\346\230\276\351\232\220\346\216\247\345\210\266.md" @@ -1,6 +1,6 @@ --- title: 显隐控制 -permalink: /pages/000b010102000107 +permalink: /pages/010c020201010208 navbar: true sidebar: true prev: true @@ -9,28 +9,36 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 显隐控制 +# 显隐控制 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

opacity

+

opacity

number

+

number

1

+

1

元素的不透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

+

元素的不透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - @@ -38,26 +46,25 @@ date: 2021-12-30 18:31:40 - Visibility枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

visibility

+

visibility

Visibility

+

Visibility

Visible

+

Visible

控制当前组件显示或隐藏。

+

控制当前组件显示或隐藏。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" index 473d47a6e731e7885e378b68f3ed84c28e626e16..a9512dd937df086cc8f080df769382eca6038971 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/09.\347\246\201\347\224\250\346\216\247\345\210\266.md" @@ -1,6 +1,6 @@ --- title: 禁用控制 -permalink: /pages/000b010102000108 +permalink: /pages/010c020201010209 navbar: true sidebar: true prev: true @@ -9,28 +9,36 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 禁用控制 +# 禁用控制 - -

名称

描述

+

描述

Hidden

+

Hidden

隐藏,但参与布局进行占位。

+

隐藏,但参与布局进行占位。

Visible

+

Visible

显示。

+

显示。

None

+

None

隐藏,但不参与布局,不进行占位。

+

隐藏,但不参与布局,不进行占位。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" index d9ca5fe3f7b526ac71ca35c71e50c42713499fb3..f1256248e0f68645b043a8e56796f29b47f66410 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/10.\346\265\256\345\261\202.md" @@ -1,6 +1,6 @@ --- title: 浮层 -permalink: /pages/000b010102000109 +permalink: /pages/010c02020101020a navbar: true sidebar: true prev: true @@ -9,35 +9,43 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 浮层 +# 浮层 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

enabled

+

enabled

boolean

+

boolean

true

+

true

值为true表示组件可用,可响应点击等操作;值为false时,不响应点击等操作。

+

值为true表示组件可用,可响应点击等操作;值为false时,不响应点击等操作。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - @@ -57,7 +65,7 @@ struct OverlayExample { Column() { Image($r('app.media.img')) .width(240).height(240) - .overlay("Don't walk and play with your phone.", { align: Alignment.Bottom, offset: { x: 0, y: -15 } }) + .overlay("Winter is a beautiful season, especially when it snows", { align: Alignment.Bottom, offset: { x: 0, y: -15 } }) }.border({ color: Color.Black, width: 2 }) }.width('100%') }.padding({ top: 20 }) @@ -65,5 +73,5 @@ struct OverlayExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/overlay.gif) +![](/images/application-dev/reference/arkui-ts/figures/overlay.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" similarity index 51% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" index e8cf3abaee1f6dfd2b0daadd67a439317e48513c..fb1cb25d2f2c74dd809f2e6aa7f1539824ce2561 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/11.Z\345\272\217\346\216\247\345\210\266.md" @@ -1,6 +1,6 @@ --- title: Z序控制 -permalink: /pages/000b01010200010a +permalink: /pages/010c02020101020b navbar: true sidebar: true prev: true @@ -9,28 +9,36 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# Z序控制 +# Z序控制 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

overlay

+

overlay

title: string,

-

options: {

-

align?: Alignment,

-

offset?: {x: number, y: number}

-

}

+

title: string,

+

options: {

+

align?: Alignment,

+

offset?: {x: number, y: number}

+

}

{

-

align: Alignment.Center,

-

offset: {0, 0}

-

}

+

{

+

align: Alignment.Center,

+

offset: {0, 0}

+

}

在当前组件上,增加遮罩文本,布局与当前组件相同。

+

在当前组件上,增加遮罩文本,布局与当前组件相同。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..3bee52c2aab691c2933b00cc79ccd80df439a042 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" @@ -0,0 +1,150 @@ +--- +title: 图形变换 +permalink: /pages/010c02020101020c +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:53 +--- +# 图形变换 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + +

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

zIndex

+

zIndex

number

+

number

0

+

0

同一容器中兄弟组件显示层级关系,z值越大,显示层级越高。

+

同一容器中兄弟组件显示层级关系,z值越大,显示层级越高。

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

rotate

+

{

+

x?: number,

+

y?: number,

+

z?: number,

+

angle?: Angle,

+

centerX?: Length,

+

centerY?: Length

+

}

+

{

+

x: 0,

+

y: 0,

+

z: 0,

+

angle: 0,

+

centerX: '50%',

+

centerY: '50%'

+

}

+

(x, y, z)指定一个矢量,表示旋转轴,正角度为顺时针转动,负角度为逆时针转动,默认值为0,同时可以通过centerX和centerY设置旋转的中心点。

+

translate

+

{

+

x?: Length,

+

y?: Length,

+

z? : Length

+

}

+

{

+

x: 0,

+

y: 0,

+

z: 0

+

}

+

可以分别设置X轴、Y轴、Z轴的平移距离,距离的正负控制平移的方向,默认值为0。

+

scale

+

{

+

x?: number,

+

y?: number,

+

z?: number,

+

centerX?: Length,

+

centerY?: Length

+

}

+

{

+

x: 1,

+

y: 1,

+

z: 1,

+

centerX:'50%',

+

centerY:'50%'

+

}

+

可以分别设置X轴、Y轴、Z轴的缩放比例,默认值为1,同时可以通过centerX和centerY设置缩放的中心点。

+

transform

+

matrix: Matrix4

+

-

+

设置当前组件的变换矩阵。

+
+ +## 示例 + +``` +import Matrix4 from '@ohos.matrix4' + +@Entry +@Component +struct TransformExample { + build() { + Column() { + Text('rotate').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) + Row() + .rotate({ + x: 1, + y: 1, + z: 1, + centerX: '50%', + centerY: '50%', + angle: 300 + }) // 组件以(1,1,1)为旋转轴,中心点顺时针旋转 300度 + .width(100).height(100).backgroundColor(0xAFEEEE) + + Text('translate').width('90%').fontColor(0xCCCCCC).padding(10).fontSize(30) + Row() + .translate({ x: 100, y: 5 }) // x轴平移100,y轴平移5 + .width(100).height(100).backgroundColor(0xAFEEEE).margin({bottom:10}) + + Text('scale').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) + Row() + .scale({ x: 2, y: 0.5 }) // 高度缩小一倍,宽度放大一倍,z轴在2D下无效果 + .width(100).height(100).backgroundColor(0xAFEEEE) + + Text('Matrix4').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) + Row() + .width(100).height(100).backgroundColor(0xAFEEEE) + .transform(Matrix4.identity().translate({ x: 100, y: 100, z: 30 })) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/1111.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" index 7f5c5dd55c03a9c80770a1fd01eb3b276ed57b8c..800248dd0e258f9e493e5ec7abaa3c69bd0d9dc7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/13.\345\233\276\345\203\217\346\225\210\346\236\234.md" @@ -1,6 +1,6 @@ --- title: 图像效果 -permalink: /pages/000b01010200010c +permalink: /pages/010c02020101020d navbar: true sidebar: true prev: true @@ -9,114 +9,131 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 图像效果 +# 图像效果 - -

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -129,7 +146,7 @@ date: 2021-12-30 18:31:40 @Component struct ImageEffectsExample { build() { - Column({space:10}) { + Column({space: 10}) { // 对字体进行模糊 Text('font blur').fontSize(15).fontColor(0xCCCCCC).width('90%') Text('text').blur(3).width('90%').height(40) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" similarity index 50% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" index 765f69c52036c5e5007140f410faaf7cf979ed9b..f516cd26a12a3f05f3b64250306961d1304caf7a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/14.\345\275\242\347\212\266\350\243\201\345\211\252.md" @@ -1,6 +1,6 @@ --- title: 形状裁剪 -permalink: /pages/000b01010200010d +permalink: /pages/010c02020101020e navbar: true sidebar: true prev: true @@ -9,37 +9,45 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 形状裁剪 +# 形状裁剪 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

blur

+

blur

+

number

+

-

+

为当前组件添加内容模糊效果,入参为模糊半径,模糊半径越大越模糊,为0时不模糊。

+

backdropBlur

number

+

number

-

+

-

为当前组件添加内容模糊效果,入参为模糊半径,模糊半径越大越模糊,为0时不模糊。

+

为当前组件添加背景模糊效果,入参为模糊半径,模糊半径越大越模糊,为0时不模糊。

backdropBlur

+

shadow

number

+

{

+

radius: number,

+

color?: Color,

+

offsetX?: number,

+

offsetY?: number

+

}

-

+

-

为当前组件添加背景模糊效果,入参为模糊半径,模糊半径越大越模糊,为0时不模糊。

+

为当前组件添加阴影效果,入参为模糊半径(必填)、阴影的颜色(可选,默认为灰色)、X轴的偏移量(可选,默认为0),Y轴的偏移量(可选,默认为0),偏移量单位为px。

shadow

+

grayscale

{

-

radius: number,

-

color?: Color,

-

offsetX?: number,

-

offsetY?: number

-

}

+

number

-

+

0.0

为当前组件添加阴影效果,入参为模糊半径(必填)、阴影的颜色(可选,默认为灰色)、X轴的偏移量(可选,默认为0),Y轴的偏移量(可选,默认为0),偏移量单位为px。

+

为当前组件添加灰度效果。值定义为灰度转换的比例,入参1.0则完全转为灰度图像,入参则0.0图像无变化,入参在0.0和1.0之间时,效果呈线性变化。(百分比)

grayscale

+

brightness

number

+

number

0.0

+

1.0

为当前组件添加灰度效果。值定义为灰度转换的比例,入参1.0则完全转为灰度图像,入参则0.0图像无变化,入参在0.0和1.0之间时,效果呈线性变化。(百分比)

+

为当前组件添加高光效果,入参为高光比例,值为1时没有效果,小于1时亮度变暗,0为全黑;大于1时亮度增加,数值越大亮度越大。

brightness

+

saturate

number

+

number

1.0

+

1.0

为当前组件添加高光效果,入参为高光比例,值为1时没有效果,小于1时亮度变暗,0为全黑;大于1时亮度增加,数值越大亮度越大。

+

为当前组件添加饱和度效果,饱和度为颜色中的含色成分和消色成分(灰)的比例,入参为1时,显示原图像,大于1时含色成分越大,饱和度越大;小于1时消色成分越大,饱和度越小。(百分比)

saturate

+

contrast

number

+

number

1.0

+

1.0

为当前组件添加饱和度效果,饱和度为颜色中的含色成分和消色成分(灰)的比例,入参为1时,显示原图像,大于1时含色成分越大,饱和度越大;小于1时消色成分越大,饱和度越小。(百分比)

+

为当前组件添加对比度效果,入参为对比度的值,值为1时,显示原图;大于1时,值越大对比度越高,图像越清晰醒目;小于1时,值越小对比度越低;当对比度为0时,图像变为全灰。(百分比)

contrast

+

invert

number

+

number

1.0

+

0

为当前组件添加对比度效果,入参为对比度的值,值为1时,显示原图;大于1时,值越大对比度越高,图像越清晰醒目;小于1时,值越小对比度越低;当对比度为0时,图像变为全灰。(百分比)

+

反转输入的图像。入参为图像反转的比例。值为1时完全反转。值为0则图像无变化。(百分比)

invert

+

colorBlend 8+

number

+

Color

0

+

-

反转输入的图像。入参为图像反转的比例。值为1时完全反转。值为0则图像无变化。(百分比)

+

为当前组件添加颜色叠加效果,入参为叠加的颜色。

sepia

+

sepia

number

+

number

0

+

0

将图像转换为深褐色。入参为图像反转的比例。值为1则完全是深褐色的,值为0图像无变化。 (百分比)

+

将图像转换为深褐色。入参为图像反转的比例。值为1则完全是深褐色的,值为0图像无变化。 (百分比)

hueRotate

+

hueRotate

Angle

+

Angle

0deg

+

0deg

为当前组件添加色相旋转效果,入参为旋转的角度值。当入参为0deg时图像无变化(默认值是0deg),入参没有最大值,超过360deg的值相当于又绕一圈。

+

为当前组件添加色相旋转效果,入参为旋转的角度值。当入参为0deg时图像无变化(默认值是0deg),入参没有最大值,超过360deg的值相当于又绕一圈。

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" index 42425472158a74ea08db1dffc23140d8a35f742e..0a2b7a05d9ee88b06155ae93ccc5bbb5e456485d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/15.\346\226\207\346\234\254\346\240\267\345\274\217\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 文本样式设置 -permalink: /pages/000b01010200010e +permalink: /pages/010c02020101020f navbar: true sidebar: true prev: true @@ -9,67 +9,75 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 文本样式设置 +# 文本样式设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 针对包含文本元素的组件,设置文本样式。 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

clip

+

clip

Shape | boolean

+

Shape | boolean

false

+

false

参数为Shape类型时,按指定的形状对当前组件进行裁剪;参数为boolean类型时,设置是否按照边缘轮廓进行裁剪。

+

参数为Shape类型时,按指定的形状对当前组件进行裁剪;参数为boolean类型时,设置是否按照边缘轮廓进行裁剪。

mask

+

mask

Shape

+

Shape

-

+

-

在当前组件上加上指定形状的遮罩。

+

在当前组件上加上指定形状的遮罩。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - - - - - - - - - @@ -77,21 +85,20 @@ date: 2021-12-30 18:31:40 - FontStyle枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

fontColor

+

fontColor

Color

+

Color

-

+

-

设置文本颜色。

+

设置文本颜色。

fontSize

+

fontSize

Length

+

Length

-

+

-

设置文本尺寸,Length为number类型时,使用fp单位。

+

设置文本尺寸,Length为number类型时,使用fp单位。

fontStyle

+

fontStyle

FontStyle

+

FontStyle

Normal

+

Normal

设置文本的字体样式。

+

设置文本的字体样式。

fontWeight

+

fontWeight

number | FontWeight

+

number | FontWeight

Normal

+

Normal

设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。

-

提供常用枚举值,参考:FontWeight

+

设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。

+

提供常用枚举值,参考:FontWeight

fontFamily

+

fontFamily

string

+

string

-

+

-

设置文本的字体列表。使用多个字体,使用','进行分割,优先级按顺序生效。例如:'Arial, sans-serif'。

+

设置文本的字体列表。使用多个字体,使用','进行分割,优先级按顺序生效。例如:'Arial, sans-serif'。

名称

+ - - - - - @@ -100,41 +107,40 @@ date: 2021-12-30 18:31:40 - FontWeight枚举说明 - -

名称

描述

+

描述

Normal

+

Normal

标准的字体样式。

+

标准的字体样式。

Italic

+

Italic

斜体的字体样式。

+

斜体的字体样式。

名称

+ - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" index 0f4ddbf8ae369dc507d66ba2c20bce1104c0dcc7..9d18a5eabe221c274290c429bc8920822f04aba3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/16.\346\240\205\346\240\274\350\256\276\347\275\256.md" @@ -1,6 +1,6 @@ --- title: 栅格设置 -permalink: /pages/000b01010200010f +permalink: /pages/010c020201010210 navbar: true sidebar: true prev: true @@ -9,62 +9,68 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:53 --- -# 栅格设置 +# 栅格设置 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->栅格布局的列宽、列间距由距离最近的GridContainer父组件决定。使用栅格属性的组件树上至少需要有1个GridContainer容器组件。 +>- 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 +>- 栅格布局的列宽、列间距由距离最近的GridContainer父组件决定。使用栅格属性的组件树上至少需要有1个GridContainer容器组件。 - -

名称

描述

+

描述

Lighter

+

Lighter

字体较细。

+

字体较细。

Normal

+

Normal

字体粗细正常。

+

字体粗细正常。

Regular

+

Regular

字体粗细正常。

+

字体粗细正常。

Medium

+

Medium

字体粗细适中。

+

字体粗细适中。

Bold

+

Bold

字体较粗。

+

字体较粗。

Bolder

+

Bolder

字体非常粗。

+

字体非常粗。

名称

+## 权限列表 + +无 + +## 属性 + + - - - - - - - - - - - - - - - @@ -116,12 +122,12 @@ struct GridContainerExample1 { } ``` -**图 1** 设备宽度为SM +**图 1** 设备宽度为SM ![](/images/application-dev/reference/arkui-ts/figures/设备宽度为SM.png "设备宽度为SM") -**图 2** 设备宽度为MD +**图 2** 设备宽度为MD ![](/images/application-dev/reference/arkui-ts/figures/设备宽度为MD.png "设备宽度为MD") -**图 3** 设备宽度为LG +**图 3** 设备宽度为LG ![](/images/application-dev/reference/arkui-ts/figures/设备宽度为LG.png "设备宽度为LG") diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..3922f93d004c4033abd5a768701348b70a5c6ebf --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" @@ -0,0 +1,197 @@ +--- +title: 颜色渐变 +permalink: /pages/010c020201010211 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# 颜色渐变 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + +

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

useSizeType

+

useSizeType

{

-

xs?: number | { span: number, offset: number },

-

sm?: number | { span: number, offset: number },

-

md?: number | { span: number, offset: number },

-

lg?: number | { span: number, offset: number }

-

}

+

{

+

xs?: number | { span: number, offset: number },

+

sm?: number | { span: number, offset: number },

+

md?: number | { span: number, offset: number },

+

lg?: number | { span: number, offset: number }

+

}

-

+

-

设置在特定设备宽度类型下的占用列数和偏移列数,span: 占用列数; offset: 偏移列数。

-

当值为number类型时,仅设置列数, 当格式如{"span": 1, "offset": 0}时,指同时设置占用列数与偏移列数。

-
  • xs: 指设备宽度类型为SizeType.XS时的占用列数和偏移列数。
  • sm: 指设备宽度类型为SizeType.SM时的占用列数和偏移列数。
-
  • md: 指设备宽度类型为SizeType.MD时的占用列数和偏移列数。
  • lg: 指设备宽度类型为SizeType.LG时的占用列数和偏移列数。
+

设置在特定设备宽度类型下的占用列数和偏移列数,span: 占用列数; offset: 偏移列数。

+

当值为number类型时,仅设置列数, 当格式如{"span": 1, "offset": 0}时,指同时设置占用列数与偏移列数。

+
  • xs: 指设备宽度类型为SizeType.XS时的占用列数和偏移列数。
  • sm: 指设备宽度类型为SizeType.SM时的占用列数和偏移列数。
+
  • md: 指设备宽度类型为SizeType.MD时的占用列数和偏移列数。
  • lg: 指设备宽度类型为SizeType.LG时的占用列数和偏移列数。

gridSpan

+

gridSpan

number

+

number

1

+

1

默认占用列数,指useSizeType属性没有设置对应尺寸的列数(span)时,占用的栅格列数。

-
说明:

设置了栅格span属性,组件的宽度由栅格布局决定。

+

默认占用列数,指useSizeType属性没有设置对应尺寸的列数(span)时,占用的栅格列数。

+
说明:

设置了栅格span属性,组件的宽度由栅格布局决定。

gridOffset

+

gridOffset

number

+

number

0

+

0

默认偏移列数,指useSizeType属性没有设置对应尺寸的偏移(offset)时, 当前组件沿着父组件Start方向,偏移的列数,也就是当前组件位于第n列。

-
说明:

1. 配置该属性后,当前组件在父组件水平方向的布局不再跟随父组件原有的布局方式,而是沿着父组件的Start方向偏移一定位移。

-

2. 偏移位移 = (列宽 + 间距)* 列数。

-

3. 设置了偏移(gridOffset)的组件之后的兄弟组件会根据该组件进行相对布局,类似相对布局。

+

默认偏移列数,指useSizeType属性没有设置对应尺寸的偏移(offset)时, 当前组件沿着父组件Start方向,偏移的列数,也就是当前组件位于第n列。

+
说明:

1. 配置该属性后,当前组件在父组件水平方向的布局不再跟随父组件原有的布局方式,而是沿着父组件的Start方向偏移一定位移。

+

2. 偏移位移 = (列宽 + 间距)* 列数。

+

3. 设置了偏移(gridOffset)的组件之后的兄弟组件会根据该组件进行相对布局,类似相对布局。

+ + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

linearGradient

+

{

+

angle?: Angle,

+

direction?:GradientDirection,

+

colors: Array<ColorStop>

+

repeating?: boolean

+

}

+

-

+

线性渐变。

+

angle: 线性渐变的角度。

+

direction: 线性渐变的方向。

+

colors: 为渐变的颜色描述。

+

repeating: 为渐变的颜色重复着色。

+

sweepGradient

+

{

+

center: Point,

+

start?: angle,

+

end?: angle,

+

colors: Array<ColorStop>

+

repeating?: boolean

+

}

+

-

+

角度渐变。

+

center:为角度渐变的中心点。

+

start:角度渐变的起点。

+

end:角度渐变的终点。

+

colors: 为渐变的颜色描述。

+

repeating: 为渐变的颜色重复着色。

+

radialGradient

+

{

+

center: Point,

+

radius: Length,

+

colors: Array<ColorStop>

+

repeating: boolean

+

}

+

-

+

径向渐变。

+

center:径向渐变的中心点。

+

radius:径向渐变的半径。

+

colors: 为渐变的颜色描述。

+

repeating: 为渐变的颜色重复着色。

+
+ +- GradientDirection枚举说明 + + GradientDirection用于描述渐变方向。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Left

+

从右向左。

+

Top

+

从下向上。

+

Right

+

从左向右。

+

Bottom

+

从上向下。

+

LeftTop

+

左上。

+

LeftBottom

+

左下。

+

RightTop

+

右上。

+

RightBottom

+

右下。

+

None

+

无。

+
+ + +## 示例 + +``` +@Entry +@Component +struct ColorGradientExample { + build() { + Column({ space: 5 }) { + Text('linearGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) + Row() + .width('90%') + .height(50) + .linearGradient({ + angle: 90, + direction: GradientDirection.Left, + colors: [[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] + }) + Text('sweepGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) + Row() + .width(100) + .height(100) + .sweepGradient({ + center: [50, 50], + start: 0, + end: 359, + colors: [[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] + }) + Text('radialGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) + Row() + .width(100) + .height(100) + .radialGradient({ + center: [50, 50], + radius: 60, + colors:[[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] + }) + } + .width('100%') + .padding({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/colorGradient.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..2c894d38054592d0f1b78141d329a12324f2eff0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" @@ -0,0 +1,357 @@ +--- +title: Popup控制 +permalink: /pages/010c020201010212 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# Popup控制 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

bindPopup

+

show: boolean,

+

popup: PopupOption | CustomPopupOption

+

-

+

给组件绑定Popup,点击弹出弹窗。

+

show: 创建页面弹窗提示是否默认显示,默认值为false。

+

popup: 配置当前弹窗提示的参数。

+
+ +- PopupOption类型接口说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

必填

+

默认值

+

描述

+

message

+

string

+

+

-

+

弹窗信息内容。

+

placementOnTop

+

boolean

+

+

false

+

是否在组件上方显示,默认值为false。

+

primaryButton

+

{

+

value: string,

+

action: () => void

+

}

+

+

-

+

第一个按钮。

+

value: 弹窗里主按钮的文本。

+

action: 点击主按钮的回调函数。

+

secondaryButton

+

{

+

value: string,

+

action: () => void

+

}

+

+

-

+

第二个按钮。

+

value: 弹窗里辅助按钮的文本。

+

action: 点击辅助按钮的回调函数。

+

onStateChange

+

(isVisible: boolean) => void

+

+

-

+

弹窗状态变化事件回调,参数isVisible为弹窗当前的显示状态。

+
+ +- CustomPopupOption类型接口说明8+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

必填

+

默认值

+

描述

+

builder

+

() => any

+

+

-

+

提示气泡内容的构造器。

+

placement

+

Placement

+

+

Placement.Bottom

+

气泡组件优先显示的位置,当前位置显示不下时,会自动调整位置。

+

maskColor

+

Color

+

+

-

+

提示气泡遮障层的颜色。

+

popupColor

+

Color

+

+

-

+

提示气泡的颜色。

+

enableArrow

+

boolean

+

+

true

+

是否显示箭头,只有上、下方向的气泡会显示箭头。

+

autoCancel

+

boolean

+

+

true

+

页面有操作时,是否自动关闭气泡

+

onStateChange

+

(isVisible: boolean) => void

+

+

-

+

弹窗状态变化事件回调,参数为弹窗当前的显示状态。

+
+ +- Placement枚举说明8+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Left

+

气泡提示位于组件左侧。

+

Right

+

气泡提示位于组件右侧。

+

Top

+

气泡提示位于组件上侧。

+

Bottom

+

气泡提示位于组件下侧。

+

TopLeft

+

气泡提示位于组件左上角。

+

TopRight

+

气泡提示位于组件右上角。

+

BottomLeft

+

气泡提示位于组件左下角。

+

BottomRight

+

气泡提示位于组件右下角。

+
+ + +## 示例 + +``` +@Entry +@Component +struct PopupExample { + @State noHandlePopup: boolean = false + @State handlePopup: boolean = false + @State customPopup: boolean = false + + @Builder popupBuilder() { + Row({ space: 2 }) { + Image('/resource/ic_public_thumbsup.svg').width(24).height(24).margin({ left: -5 }) + Text('Custom Popup').fontSize(12) + }.width(100).height(50).backgroundColor(Color.White) + } + + build() { + Flex({ direction: FlexDirection.Column }) { + Button('no handle popup') + .onClick(() => { + this.noHandlePopup = !this.noHandlePopup + }) + .bindPopup(this.noHandlePopup, { + message: 'content1 content1', + placementOnTop: false, + onStateChange: (e) => { + console.info(e.isVisible.toString()) + if (!e.isVisible) { + this.noHandlePopup = false + } + } + }) + .position({ x: 100, y: 50 }) + + Button('with handle popup') + .onClick(() => { + this.handlePopup = !this.handlePopup + }) + .bindPopup(this.handlePopup, { + message: 'content2 content2', + placementOnTop: true, + primaryButton: { + value: 'ok', + action: () => { + this.handlePopup = !this.handlePopup + console.info('secondaryButton click') + } + }, + onStateChange: (e) => { + console.info(e.isVisible.toString()) + } + }) + .position({ x: 100, y: 200 }) + + Button('custom popup') + .onClick(() => { + this.customPopup = !this.customPopup + }) + .bindPopup(this.customPopup, { + builder: this.popupBuilder, + placement: Placement.Bottom, + maskColor: 0x33000000, + popupColor: Color.White, + enableArrow: true, + onStateChange: (e) => { + if (!e.isVisible) { + this.customPopup = false + } + } + }) + .position({ x: 100, y: 350 }) + }.width('100%').padding({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/popup.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" index 76f5a9c39eea8ece7753b4d2ec668c3569494705..4a8beb7f0468f9f8da707a5b7907e6a50ba59bba 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/19.Menu\346\216\247\345\210\266.md" @@ -1,6 +1,6 @@ --- title: Menu控制 -permalink: /pages/000b010102000112 +permalink: /pages/010c020201010213 navbar: true sidebar: true prev: true @@ -9,28 +9,36 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Menu控制 +# Menu控制 - -

名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + + - - - - - - - @@ -38,27 +46,26 @@ date: 2021-12-30 18:31:40 - MenuItem - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

bindMenu

+

bindMenu

Array<MenuItem>

+

Array<MenuItem> | CustomBuilder8+

-

+

-

给组件绑定菜单,点击后弹出菜单。

+

给组件绑定菜单,点击后弹出菜单。弹出菜单项支持文本和自定义两种功能。

名称

+ - - - - - - - - @@ -70,7 +77,7 @@ date: 2021-12-30 18:31:40 ``` @Entry @Component -struct menuExample { +struct MenuExample { build() { Column() { Text('click for Menu') @@ -97,3 +104,51 @@ struct menuExample { ![](/images/application-dev/reference/arkui-ts/figures/menu.gif) +``` +import router from '@system.router'; + +@Entry +@Component +struct MenuExample { + @Builder MenuBuilder() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + Text('text1') + .fontSize(20) + .width(100) + .height(50) + .textAlign(TextAlign.Center) + + Divider().height(10) + + Text('text2') + .fontSize(20) + .width(100) + .height(50) + .textAlign(TextAlign.Center) + + Divider().height(10) + + Button('Next') + .fontSize(20) + .width(100) + .height(50) + .onClick(() => { + router.push({ uri: 'pages/details' }) + }) + + }.width(100) + } + + build() { + Column() { + Text('click for menu') + } + .width('100%') + .margin({ top: 5 }) + .bindMenu(this.MenuBuilder) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/20.\347\202\271\345\207\273\346\216\247\345\210\266.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/20.\347\202\271\345\207\273\346\216\247\345\210\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..56e93a96a4d21b009dca4fe6e926af58cd788b7c --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/20.\347\202\271\345\207\273\346\216\247\345\210\266.md" @@ -0,0 +1,77 @@ +--- +title: 点击控制 +permalink: /pages/010c020201010214 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# 点击控制 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 属性 + +

名称

类型

+

类型

描述

+

描述

value

+

value

string

+

string

菜单项文本。

+

菜单项文本。

action

+

action

() => void

+

() => void

点击菜单项的事件回调。

+

点击菜单项的事件回调。

+ + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

touchable

+

boolean

+

true

+

设置当前组件是否可以被触摸。

+
+ +## 示例 + +``` +@Entry +@Component +struct TouchAbleExample { + @State text1: string = '' + @State text2: string = '' + + build() { + Stack() { + Rect() + .fill(Color.Gray).width(150).height(150) + .onClick(() => { + console.info(this.text1 = 'Rect Clicked') + }) + .overlay(this.text1, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) + Ellipse() + .fill(Color.Pink).width(150).height(80) + .touchable(false) // 点击Ellipse区域,不会打印 “Ellipse Clicked” + .onClick(() => { + console.info(this.text2 = 'Ellipse Clicked') + }) + .overlay(this.text2, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) + }.margin(100) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF2.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/21.\350\247\246\346\221\270\347\203\255\345\214\272\350\256\276\347\275\256.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/21.\350\247\246\346\221\270\347\203\255\345\214\272\350\256\276\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..49362aaf782c34aae4e3aca54a78b78831906c50 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/21.\350\247\246\346\221\270\347\203\255\345\214\272\350\256\276\347\275\256.md" @@ -0,0 +1,144 @@ +--- +title: 触摸热区设置 +permalink: /pages/010c020201010215 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# 触摸热区设置 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +适用于支持通用点击事件、通用触摸事件、通用手势处理的组件。 + +## 权限列表 + +无 + +## 属性 + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

responseRegion

+

Array<Rectangle> | Rectangle

+

{

+

x:0,

+

y:0,

+

width:'100%',

+

height:'100%'

+

}

+

设置一个或多个触摸热区,包括位置和大小。

+
说明:

百分比是相对于组件本身来度量的。

+

x和y可以设置正负值百分比。当x设置为'100%'时表示热区往右偏移组件本身宽度大小,当x设置为'-100%'时表示热区往左偏移组件本身宽度大小。当y设置为'100%'时表示热区往下偏移组件本身高度大小,当y设置为'-100%'时表示热区往上偏移组件本身高度大小。

+

width和height只能设置正值百分比。width:'100%'表示热区宽度设置为该组件本身的宽度。比如组件本身宽度是100vp,那么'100%'表示热区宽度也为100vp。height:'100%'表示热区高度设置为该组件本身的高度。

+
+
+ +- Rectangle对象说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

必填

+

默认值

+

描述

+

x

+

Length

+

+

0vp

+

触摸点相对于组件本身左边沿的X坐标。

+

y

+

Length

+

+

0vp

+

触摸点相对于组件本身左边沿的Y坐标。

+

width

+

Length

+

+

100%

+

触摸热区范围的宽度。

+

height

+

Length

+

+

100%

+

触摸热区范围的高度。

+
+ + >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** + >当x和y都设置为正值时,表示组件的触摸热区的范围整体往组件本身右下角偏移,偏移的大小可通过数值来设置。 + + +## 示例 + +``` +@Entry +@Component +struct ResponseRegionExample { + build() { + Column() { + Toggle({ type: ToggleType.Checkbox, isOn: true }) + .selectedColor(0x39a2db) + .backgroundColor(0xAFEEEE) + .responseRegion({ x: 1.0, y: 1.0, width: 400, height: 400 }) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF1.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..92ca1b81ccfe649900b8e5bdfd9eacdb5fb47521 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" @@ -0,0 +1,229 @@ +--- +title: 绑定手势方法 +permalink: /pages/010c020201010301 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# 绑定手势方法 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 绑定手势识别 + +通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。 + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

gesture

+

gesture: GestureType,

+

mask?: GestureMask

+

gesture: -,

+

mask: GestureMask.Normal

+

绑定手势识别。

+

gesture: 绑定的手势类型, mask: 事件响应设置。

+

priorityGesture

+

gesture: GestureType,

+

mask?: GestureMask

+

gesture: -,

+

mask: GestureMask.Normal

+

绑定优先识别手势。

+

gesture: 绑定的手势类型, mask: 事件响应设置。

+
说明:
  • 默认情况下,子组件优先于父组件识别手势,当父组件配置priorityGesture时,父组件优先于子组件进行识别。
+
+

parallelGesture

+

gesture: GestureType,

+

mask?: GestureMask

+

gesture: -,

+

mask: GestureMask.Normal

+

绑定可与子组件手势同时触发的手势。

+

gesture: 绑定的手势类型, mask: 事件响应设置。

+
说明:
  • 手势事件为非冒泡事件。父组件设置parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。
+
+
+ +- GestureMask枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Normal

+

不屏蔽子组件的手势,按照默认手势识别顺序进行识别。

+

IgnoreInternal

+

屏蔽子组件的手势,仅当前容器的手势进行识别。

+
说明:

子组件上系统内置的手势不会被屏蔽,如子组件为List组件时,内置的滑动手势仍然会触发。

+
+
+ + +- 系统提供如下Gesture类型 + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

TapGesture

+

点击手势,支持单次点击、多次点击识别。

+

LongPressGesture

+

长按手势。

+

PanGesture

+

平移手势。

+

PinchGesture

+

捏合手势。

+

RotationGesture

+

旋转手势。

+

GestureGroup

+

手势识别组,多种手势组合为复合手势,支持连续识别、并行识别和互斥识别。

+
+ + +## 响应手势事件 + +组件通过gesture方法绑定手势对象,可以通过手势对象提供的事件相应响应手势操作。如通过TapGesture对象的onAction事件响应点击事件。具体事件定义见各个手势对象章节。 + +- TapGesture事件说明 + + + + + + + + + +

名称

+

功能描述

+

onAction((event?: GestureEvent) => void)

+

Tap手势识别成功回调。

+
+ + +- GestureEvent对象说明 + + + + + + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

timestamp

+

number

+

事件时间戳。

+

target8+

+

EventTarget

+

触发手势事件的元素对象。

+
+ + +## 示例 + +``` +@Entry +@Component +struct GestureSettingsExample { + @State value: string = '' + + build() { + Column(){ + Column() { + Text('Click\n' + this.value) + .gesture( + TapGesture() + .onAction(() => { + this.value = 'gesture onAction' + })) + }.height(200).width(300).padding(60).border({ width: 1 }) + //设置为priorityGesture时,会优先识别该绑定手势忽略内部gesture手势 + .priorityGesture( + TapGesture() + .onAction((event: GestureEvent) => { + this.value = 'priorityGesture onAction' + '\ncomponent globalPos:(' + + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height + }), GestureMask.IgnoreInternal + ) + }.padding(60) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475107.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" index 6898627102b0fd10970597fff0f76a7a6e430e12..3ebb1ba6d718fde0aad2694e84d01e45cad4ab08 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/01.TapGesture.md" @@ -1,6 +1,6 @@ --- title: TapGesture -permalink: /pages/000b01010200020100 +permalink: /pages/010c02020101030201 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# TapGesture +# TapGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,43 +26,42 @@ TapGesture\(options?: \{ count?: number, fingers?: number \}\) - 参数 - -

参数名称

+ - - - - - - - - - - - - - - @@ -65,21 +71,25 @@ TapGesture\(options?: \{ count?: number, fingers?: number \}\) ## 事件 - -

参数名称

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

count

+

count

number

+

number

+

1

+

1

识别的连续点击次数。如果设置小于1,会被转化为默认值。

-
说明:

如配置多击,上一次抬起和下一次按下的超时时间为300毫秒(ms)。

+

识别的连续点击次数。如果设置小于1,会被转化为默认值。

+
说明:

如配置多击,上一次抬起和下一次按下的超时时间为300毫秒(ms)。

fingers

+

fingers

number

+

number

+

1

+

1

触发点击的最少手指数,最小为1指, 最大为10指。

-
说明:

1. 当配置多指时,第一根手指按下后300毫秒(ms)内未有足够的手指数按下,手势识别失败。

-

2. 实际点击手指数超过配置值,手势识别失败。

+

触发点击的最少手指数,最小为1指, 最大为10指。

+
说明:

1. 当配置多指时,第一根手指按下后300毫秒(ms)内未有足够的手指数按下,手势识别失败。

+

2. 实际点击手指数超过配置值,手势识别失败。

名称

+ - - -

名称

功能描述

+

功能描述

onAction((event?: GestureEvent) => void)

+

onAction((event?: TapGestureEvent) => void)

Tap手势识别成功回调。

+

Tap手势识别成功回调。

+- TapGestureEvent类型说明8+ + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + ## 示例 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" index ffe5b68d9d02831400db23b5de2dcb1ea62d6da7..ad25c8bf908eb48a70f1afa965cade0c3316b7e9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/02.LongPressGesture.md" @@ -1,6 +1,6 @@ --- title: LongPressGesture -permalink: /pages/000b01010200020101 +permalink: /pages/010c02020101030202 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# LongPressGesture +# LongPressGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,50 +26,49 @@ LongPressGesture\(options?: \{ fingers?: number, repeat?: boolean, duration?: nu - 参数 - -

参数名称

+ - - - - - - - - - - - - - - - - - - - @@ -71,31 +77,53 @@ LongPressGesture\(options?: \{ fingers?: number, repeat?: boolean, duration?: nu ## 事件 - -

参数名称

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

fingers

+

fingers

number

+

number

+

1

+

1

触发长按的最少手指数,最小为1指, 最大取值为10指。

+

触发长按的最少手指数,最小为1指, 最大取值为10指。

repeat

+

repeat

boolean

+

boolean

+

false

+

false

是否连续触发事件回调。

+

是否连续触发事件回调。

duration

+

duration

number

+

number

+

500

+

500

最小触发长按的时间,单位为毫秒(ms)。

+

最小触发长按的时间,单位为毫秒(ms)。

名称

+ - - - - - - -

名称

功能描述

+

功能描述

onAction((event?: GestureEvent) => void)

+

onAction((event?: LongPressGestureEvent) => void)

LongPress手势识别成功回调。

+

LongPress手势识别成功回调。

onActionEnd((event?: GestureEvent) => void)

+

onActionEnd((event?: LongPressGestureEvent) => void)

LongPress手势识别成功,手指抬起后触发回调。

+

LongPress手势识别成功,手指抬起后触发回调。

onActionCancel(event: () => void)

+

onActionCancel(event: () => void)

LongPress手势识别成功,接收到触摸取消事件触发回调。

+

LongPress手势识别成功,接收到触摸取消事件触发回调。

+- LongPressGestureEvent类型说明8+ + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

repeat

+

boolean

+

事件是否为重复触发事件。

+
+ + ## 示例 ``` @@ -112,7 +140,7 @@ struct LongPressGestureExample { .gesture( LongPressGesture({ repeat: true }) //长按动作存在会连续触发 - .onAction((event: GestureEvent) => { + .onAction((event: LongPressGestureEvent) => { if (event.repeat) { this.count++ } }) //长按动作一结束触发 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" index 1a58e745834561050e8409ef0d977b233fcc8dbc..20d064d009780dcbc2aa187d5cb1c4aa196adb5c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/03.PanGesture.md" @@ -1,6 +1,6 @@ --- title: PanGesture -permalink: /pages/000b01010200020102 +permalink: /pages/010c02020101030203 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# PanGesture +# PanGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,50 +26,49 @@ PanGesture\(options?: \{ fingers?: number, direction?: PanDirection, distance?: - 参数 - -

参数名称

+ - - - - - - - - - - - - - - - - - - - @@ -70,51 +76,50 @@ PanGesture\(options?: \{ fingers?: number, direction?: PanDirection, distance?: - PanDirection枚举说明 - -

参数名称

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

fingers

+

fingers

number

+

number

+

1

+

1

触发滑动的最少手指数,最小为1指, 最大取值为10指。

+

触发滑动的最少手指数,最小为1指, 最大取值为10指。

direction

+

direction

PanDirection

+

PanDirection

+

All

+

All

设置滑动方向,此枚举值支持逻辑与(&)和逻辑或(|)运算。

+

设置滑动方向,此枚举值支持逻辑与(&)和逻辑或(|)运算。

distance

+

distance

number

+

number

+

5.0

+

5.0

最小滑动识别距离,单位为vp。

+

最小滑动识别距离,单位为vp。

名称

+ - - - - - - - - - - - - - - - - - @@ -134,26 +139,25 @@ PanGestureOption\(options?: \{ fingers?: number, direction?: PanDirection, dista - 接口 - -

名称

描述

+

描述

All

+

All

所有方向可滑动。

+

所有方向可滑动。

Horizontal

+

Horizontal

水平方向可滑动。

+

水平方向可滑动。

Vertical

+

Vertical

竖直方向可滑动。

+

竖直方向可滑动。

Left

+

Left

向左滑动。

+

向左滑动。

Right

+

Right

向右滑动。

+

向右滑动。

Up

+

Up

向上滑动。

+

向上滑动。

Down

+

Down

向下滑动。

+

向下滑动。

None

+

None

任何方向都不可滑动。

+

任何方向都不可滑动。

名称

+ - - - - - - - @@ -162,36 +166,65 @@ PanGestureOption\(options?: \{ fingers?: number, direction?: PanDirection, dista ## 事件 - -

名称

功能描述

+

功能描述

setDirection(value: PanDirection)

+

setDirection(value: PanDirection)

设置direction属性。

+

设置direction属性。

setDistance(value: number)

+

setDistance(value: number)

设置distance属性。

+

设置distance属性。

setFingers(value: number)

+

setFingers(value: number)

设置fingers属性。

+

设置fingers属性。

名称

+ - - - - - - - - -

名称

功能描述

+

功能描述

onActionStart((event?: GestureEvent) => void)

+

onActionStart(callback: (event?: PanGestureEvent) => void)

Pan手势识别成功回调。

+

Pan手势识别成功回调。

onActionUpdate((event?: GestureEvent) => void)

+

onActionUpdate(callback: (event?: PanGestureEvent) => void)

Pan手势移动过程中回调。

+

Pan手势移动过程中回调。

onActionEnd((event?: GestureEvent) => void)

+

onActionEnd(callback: (event?: PanGestureEvent) => void)

Pan手势识别成功,手指抬起后触发回调。

+

Pan手势识别成功,手指抬起后触发回调。

onActionCancel(event: () => void)

+

onActionCancel(callback: () => void)

Pan手势识别成功,接收到触摸取消事件触发回调。

+

Pan手势识别成功,接收到触摸取消事件触发回调。

+- PanGestureEvent类型说明8+ + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + + + + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

offsetX

+

number

+

手势事件偏移量,单位为vp。

+

offsetY

+

number

+

手势事件偏移量,单位为vp。

+
+ + ## 示例 ``` @@ -209,10 +242,10 @@ struct PanGestureExample { .translate({ x: this.offsetX, y: this.offsetY, z: 5 }) .gesture( PanGesture({}) - .onActionStart((event: GestureEvent) => { + .onActionStart((event: PanGestureEvent) => { console.info('Pan start') }) - .onActionUpdate((event: GestureEvent) => { + .onActionUpdate((event: PanGestureEvent) => { this.offsetX = event.offsetX this.offsetY = event.offsetY }) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" index 4cacd58785dcc4e66ba111b1ee766ea7f7bb3452..a76f0ac846f926133048ee8bfb45a3f1f00197c3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/04.PinchGesture.md" @@ -1,6 +1,6 @@ --- title: PinchGesture -permalink: /pages/000b01010200020103 +permalink: /pages/010c02020101030204 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# PinchGesture +# PinchGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,39 +26,38 @@ PinchGesture\(options?: \{ fingers?: number, distance?: number \}\) - 参数 - -

参数名称

+ - - - - - - - - - - - - - - @@ -60,36 +66,72 @@ PinchGesture\(options?: \{ fingers?: number, distance?: number \}\) ## 事件 - -

参数名称

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

fingers

+

fingers

number

+

number

+

2

+

2

触发捏合的最少手指数, 最小为2指,最大为5指。

+

触发捏合的最少手指数, 最小为2指,最大为5指。

distance

+

distance

number

+

number

+

3.0

+

3.0

最小识别距离,单位为vp。

+

最小识别距离,单位为vp。

名称

+ - - - - - - - - -

名称

功能描述

+

功能描述

onActionStart((event?: GestureEvent) => void)

+

onActionStart((event?: PinchGestureEvent) => void)

Pinch手势识别成功回调。

+

Pinch手势识别成功回调。

onActionUpdate((event?: GestureEvent) => void)

+

onActionUpdate((event?: PinchGestureEvent) => void)

Pinch手势移动过程中回调。

+

Pinch手势移动过程中回调。

onActionEnd((event?: GestureEvent) => void)

+

onActionEnd((event?: PinchGestureEvent) => void)

Pinch手势识别成功,手指抬起后触发回调。

+

Pinch手势识别成功,手指抬起后触发回调。

onActionCancel(event: () => void)

+

onActionCancel(event: () => void)

Pinch手势识别成功,接收到触摸取消事件触发回调。

+

Pinch手势识别成功,接收到触摸取消事件触发回调。

+- PinchGestureEvent类型说明8+ + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + + + + + + + + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

scale

+

number

+

缩放比例,用于PinchGesture手势触发场景。

+

pinchCenterX

+

number

+

捏合手势中心点X轴坐标,单位为px。

+

pinchCenterY

+

number

+

捏合手势中心点Y轴坐标,单位为px。

+
+ + ## 示例 ``` @@ -106,10 +148,10 @@ struct PinchGestureExample { .scale({ x: this.scale, y: this.scale, z: this.scale }) .gesture( PinchGesture() - .onActionStart((event: GestureEvent) => { + .onActionStart((event: PinchGestureEvent) => { console.info('Pinch start') }) - .onActionUpdate((event: GestureEvent) => { + .onActionUpdate((event: PinchGestureEvent) => { this.scale = event.scale }) .onActionEnd(() => { diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" index 4c93a015f23b1cf8173d7d405eff6cbe8c8651ca..e2943a3e9eeb8037422ff3fcc6896da13c5ef779 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/05.RotationGesture.md" @@ -1,6 +1,6 @@ --- title: RotationGesture -permalink: /pages/000b01010200020104 +permalink: /pages/010c02020101030205 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# RotationGesture +# RotationGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,39 +26,38 @@ RotationGesture\(options?: \{ fingers?: number, angle?: number \}\) - 参数 - -

参数名称

+ - - - - - - - - - - - - - - @@ -60,36 +66,72 @@ RotationGesture\(options?: \{ fingers?: number, angle?: number \}\) ## 事件 - -

参数名称

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

fingers

+

fingers

number

+

number

+

2

+

2

触发旋转的最少手指数, 最小为2指,最大为5指。

+

触发旋转的最少手指数, 最小为2指,最大为5指。

angle

+

angle

number

+

number

+

1.0

+

1.0

触发旋转手势的最小改变度数,单位为度数。

+

触发旋转手势的最小改变度数,单位为度数。

名称

+ - - - - - - - - -

名称

功能描述

+

功能描述

onActionStart((event?: GestureEvent) => void)

+

onActionStart((event?: RotationGestureEvent) => void)

Rotation手势识别成功回调。

+

Rotation手势识别成功回调。

onActionUpdate((event?: GestureEvent) => void)

+

onActionUpdate((event?: RotationGestureEvent) => void)

Rotation手势移动过程中回调。

+

Rotation手势移动过程中回调。

onActionEnd((event?: GestureEvent) => void)

+

onActionEnd((event?: RotationGestureEvent) => void)

Rotation手势识别成功,手指抬起后触发回调。

+

Rotation手势识别成功,手指抬起后触发回调。

onActionCancel(event: () => void)

+

onActionCancel(event: () => void)

Rotation手势识别成功,接收到触摸取消事件触发回调。

+

Rotation手势识别成功,接收到触摸取消事件触发回调。

+- RotationGestureEvent类型说明8+ + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + + + + + + + + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

angle

+

number

+

旋转角度。

+

pinchCenterX

+

number

+

捏合手势中心点X轴坐标,单位为px。

+

pinchCenterY

+

number

+

捏合手势中心点Y轴坐标,单位为px。

+
+ + ## 示例 ``` @@ -106,10 +148,10 @@ struct RotationGestureExample { .margin(80).rotate({ x:1, y:2, z:3, angle: this.angle }) .gesture( RotationGesture() - .onActionStart((event: GestureEvent) => { + .onActionStart((event: RotationGestureEvent) => { console.log('Rotation start') }) - .onActionUpdate((event: GestureEvent) => { + .onActionUpdate((event: RotationGestureEvent) => { this.angle = event.angle }) .onActionEnd(() => { diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/06.SwipeGesture.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/06.SwipeGesture.md" new file mode 100644 index 0000000000000000000000000000000000000000..a2377f0604e8a6877a9b40fc5a7aa29c710e9d97 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/02.\345\237\272\347\241\200\346\211\213\345\212\277/06.SwipeGesture.md" @@ -0,0 +1,180 @@ +--- +title: SwipeGesture +permalink: /pages/010c02020101030206 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# SwipeGesture + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 接口 + +SwipeGesture\(value?: \{ fingers?: number; direction?: SwipeDirection; speed?: number \}\) + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名称

+

参数类型

+

必填

+

默认值

+

参数描述

+

fingers

+

number

+

+

1

+

触发滑动的最少手指数,默认为1,最小为1指,最大为10指。

+

direction

+

SwipeDirection

+

+

SwipeDirection.All

+

滑动方向。

+

speed

+

number

+

+

100

+

识别滑动的最小速度(100VP/秒)。

+
+ +- SwipeDirection枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

All

+

所有方向。

+

Horizontal

+

水平方向。

+

Vertical

+

竖直方向。

+
+ + +## 事件 + + + + + + + + + +

名称

+

功能描述

+

onAction(callback:(event?: SwipeGestureEvent) => void)

+

滑动手势识别成功回调。

+
+ +- SwipeGestureEvent类型说明 + + 继承自[GestureEvent](/pages/010c020201010301#table290mcpsimp)类型。 + + + + + + + + + + + + + + + +

参数名

+

类型

+

说明

+

angle

+

number

+

滑动手势的角度。

+

speed

+

number

+

滑动手势的速度。

+
+ + +## 示例 + +``` +@Entry +@Component +struct SwipeGestureExample { + @State rotateAngle : number = 0 + @State speed : number = 1 + + build() { + Column() { + Text("SwipGesture speed : " + this.speed) + Text("SwipGesture angle : " + this.rotateAngle) + } + .position({x: 80, y: 200}) + .border({width:2}) + .width(260).height(260) + .rotate({x: 0, y: 0, z: 1, angle: this.rotateAngle}) + .gesture( + SwipeGesture({fingers: 1, direction:SwipeDirection.Vertical}) + .onAction((event: SwipeGestureEvent) => { + this.speed = event.speed + this.rotateAngle = event.angle + }) + ) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF-0.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" index 109022f6c6dcfb3efb106b208373966f62a91a87..4534751e36deab79f95981e988d82373488d9a0b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/03.\347\273\204\345\220\210\346\211\213\345\212\277.md" @@ -1,6 +1,6 @@ --- title: 组合手势 -permalink: /pages/000b010102000202 +permalink: /pages/010c020201010303 navbar: true sidebar: true prev: true @@ -9,9 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# 组合手势 +# 组合手势 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 ## 接口 @@ -19,43 +26,42 @@ GestureGroup\(mode: GestureMode, ...gesture: GestureType\[\]\) - 参数 - -

参数名

+ - - - - - - - - - - - - - - @@ -63,26 +69,25 @@ GestureGroup\(mode: GestureMode, ...gesture: GestureType\[\]\) - GestureMode枚举说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

mode

+

mode

GestureMode

+

GestureMode

+

-

+

-

设置组合手势识别模式。

+

设置组合手势识别模式。

gesture

+

gesture

TapGesture

-

| LongPressGesture

-

| PanGesture

-

| PinchGesture

-

| RotationGesture

+

TapGesture

+

| LongPressGesture

+

| PanGesture

+

| PinchGesture

+

| RotationGesture

+

-

+

-

可变长参数,1个或者多个基础手势类型,这些手势会被组合识别。

+

可变长参数,1个或者多个基础手势类型,这些手势会被组合识别。

名称

+ - - - - - - - @@ -91,16 +96,15 @@ GestureGroup\(mode: GestureMode, ...gesture: GestureType\[\]\) ## 事件 - -

名称

描述

+

描述

Sequence

+

Sequence

顺序识别,按照手势的注册顺序识别手势,直到所有手势识别成功。当有一个手势识别失败时,所有手势识别失败。

+

顺序识别,按照手势的注册顺序识别手势,直到所有手势识别成功。当有一个手势识别失败时,所有手势识别失败。

Parallel

+

Parallel

并发识别,注册的手势同时识别,直到所有手势识别结束,手势识别互相不影响。

+

并发识别,注册的手势同时识别,直到所有手势识别结束,手势识别互相不影响。

Exclusive

+

Exclusive

互斥识别,注册的手势同时识别,若有一个手势识别成功,则结束手势识别。

+

互斥识别,注册的手势同时识别,若有一个手势识别成功,则结束手势识别。

名称

+ - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" similarity index 41% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" index ecd15624cc5cb414f91a7d2ea3db12cf6a7ffe71..6665b5c28430e44d812dc3a806cdbef3adf34985 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/01.Blank.md" @@ -1,6 +1,6 @@ --- title: Blank -permalink: /pages/000b0101020100 +permalink: /pages/010c0202010201 navbar: true sidebar: true prev: true @@ -9,14 +9,14 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Blank - -空白填充组件,在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力。 +# Blank >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 仅当父组件为Row/Column时生效。 +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +空白填充组件,在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力。仅当父组件为Row/Column时生效。 ## 权限列表 @@ -32,28 +32,27 @@ Blank\(min?: Length\) - 参数 - -

名称

功能描述

+

功能描述

onCancel(event: () => void)

+

onCancel(event: () => void)

顺序组合手势(GestureMode.Sequence)取消后触发回调。

+

顺序组合手势(GestureMode.Sequence)取消后触发回调。

参数名

+ - - - - - - - - - @@ -62,24 +61,23 @@ Blank\(min?: Length\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

min

+

min

Length

+

Length

+

0

+

0

空白填充组件在容器主轴上的最小大小。

+

空白填充组件在容器主轴上的最小大小。

名称

+ - - - - - - - @@ -99,8 +97,8 @@ struct BlankExample { Row() { Text('Bluetooth').fontSize(18) Blank() - Text('on/off').fontSize(18).height(60) - }.width('100%').backgroundColor(0xFFFFFF).borderRadius(15).padding(12) + Toggle({ type: ToggleType.Switch }) + }.width('100%').backgroundColor(0xFFFFFF).borderRadius(15).padding({ left: 12 }) }.backgroundColor(0xEFEFEF).padding(20) } } @@ -108,9 +106,9 @@ struct BlankExample { 竖屏状态 -![](/images/application-dev/reference/arkui-ts/figures/blank_v.gif) +![](/images/application-dev/reference/arkui-ts/figures/Blank1.gif) 横屏状态 -![](/images/application-dev/reference/arkui-ts/figures/blank_h.gif) +![](/images/application-dev/reference/arkui-ts/figures/Blank2.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" similarity index 46% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" index b62de96986aee82316ea458e81748b293265fbec..8bcad261f066089fff595aeb7e5770343df0e7b9 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/02.Button.md" @@ -1,6 +1,6 @@ --- title: Button -permalink: /pages/000b0101020101 +permalink: /pages/010c0202010202 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Button +# Button + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 提供按钮组件。 @@ -30,38 +33,38 @@ date: 2021-12-30 18:31:40 **表 1** options参数说明 -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

color

+

color

Color

+

Color

0x00000000

+

0x00000000

设置空白填充的填充颜色。

+

设置空白填充的填充颜色。

参数名

+ - - - - - - - - - - - - - - @@ -74,39 +77,38 @@ date: 2021-12-30 18:31:40 **表 2** value参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

type

+

type

ButtonType

+

ButtonType

+

Capsule

+

Capsule

描述按钮风格。

+

描述按钮风格。

stateEffect

+

stateEffect

boolean

+

boolean

+

true

+

true

按钮按下时是否开启切换效果,当状态置为false时,点击效果关闭。

+

按钮按下时是否开启切换效果,当状态置为false时,点击效果关闭。

参数名

+ - - - - - - - - - - - - - - @@ -115,33 +117,32 @@ date: 2021-12-30 18:31:40 ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

label

+

label

string

+

string

+

-

+

-

按钮文本内容。

+

按钮文本内容。

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

名称

+ - - - - - - - - - - - @@ -149,26 +150,25 @@ date: 2021-12-30 18:31:40 - ButtonType枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

type

+

type

ButtonType

+

ButtonType

Capsule

+

Capsule

设置Button样式。

+

设置Button样式。

stateEffect

+

stateEffect

boolean

+

boolean

true

+

true

状态切换时是否开启切换效果,当状态置为false时,点击效果关闭。

+

状态切换时是否开启切换效果,当状态置为false时,点击效果关闭。

名称

+ - - - - - - - @@ -176,8 +176,8 @@ date: 2021-12-30 18:31:40 >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 按钮圆角通过[通用属性borderRadius设置](/pages/000b010102000104)(不支持通过border接口设置圆角)。 ->- 按钮文本通过[通用文本样式](/pages/000b01010200010e)进行设置。 +>- 按钮圆角通过[通用属性borderRadius设置](/pages/010c020201010205)(不支持通过border接口设置圆角)。 +>- 按钮文本通过[通用文本样式](/pages/010c02020101020f)进行设置。 ## 示例 diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" new file mode 100644 index 0000000000000000000000000000000000000000..2358e4ea62f270b91821b635b7bfb45d14ed92c6 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" @@ -0,0 +1,125 @@ +--- +title: DataPanel +permalink: /pages/010c0202010203 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# DataPanel + +数据面板组件,用于将多个数据占比情况使用占比图进行展示。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +DataPanel\(value:\{values: number\[\], max?: number, type?: DataPanelType\}\) + +- 参数 + +

名称

描述

+

描述

Capsule

+

Capsule

胶囊型按钮(圆角默认为高度的一半)。

+

胶囊型按钮(圆角默认为高度的一半)。

Circle

+

Circle

圆形按钮。

+

圆形按钮。

Normal

+

Normal

普通按钮(默认不带圆角)。

+

普通按钮(默认不带圆角)。

+ + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

values

+

number[]

+

+

-

+

数据值列表,最大支持9个数据。

+

max

+

number

+

+

100

+

1.max大于0,表示数据的最大值。

+

2.max小于等于0,max等于value数组各项的和,按比例显示。

+

type8+

+

DataPanelType

+

+

DataPanelType.Circle

+

数据面板的类型。

+
+ + +- DataPanelType枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Line

+

线型数据面板。

+

Circle

+

环形数据面板。

+
+ + +## 示例 + +``` +@Entry +@Component +struct DataPanelExample { + public values1: number[] = [10, 10, 10, 10, 10, 10, 10, 10, 10] + + build() { + Column({ space: 5 }) { + Text('Circle').fontSize(9).fontColor(0xCCCCCC).margin({ top: 20, right: '80%' }) + DataPanel({ values: this.values1, max: 100, type: DataPanelType.Circle }).width(200).height(200) + + Text('Line').fontSize(9).fontColor(0xCCCCCC).margin({ bottom: 20, right: '80%' }) + DataPanel({ values: this.values1, max: 100, type: DataPanelType.Line }).width(300).height(10) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/datapanel.jpg) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" similarity index 49% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" index 3c842d032acd2e9d8101ed3ddd77038a1d395d0b..a4555abe150528a323c5fdb66d1599f149360482 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/04.Divider.md" @@ -1,6 +1,6 @@ --- title: Divider -permalink: /pages/000b0101020103 +permalink: /pages/010c0202010204 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Divider +# Divider + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 提供分隔器组件,分隔不同内容块/内容元素。 @@ -29,51 +32,50 @@ Divider\(\) ## 属性 - -

名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Gauge.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Gauge.md" new file mode 100644 index 0000000000000000000000000000000000000000..eaf039a4bc501b1122d1a0efad3727f0211db8d3 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Gauge.md" @@ -0,0 +1,163 @@ +--- +title: Gauge +permalink: /pages/010c0202010205 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# Gauge + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +数据量规图表组件,用于将数据展示为环形图表。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +Gauge\(value:\{value: number, min?: number, max?: number\}\) + +- 参数 + +

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

vertical

+

vertical

boolean

+

boolean

false

+

false

使用水平分割线还是垂直分割线,false: 水平分割线, true:垂直分割线。

+

使用水平分割线还是垂直分割线,false: 水平分割线, true:垂直分割线。

color

+

color

Color

+

Color

-

+

-

设置分割线颜色。

+

设置分割线颜色。

strokeWidth

+

strokeWidth

Length

+

Length

1

+

1

设置分割线宽度。

+

设置分割线宽度。

lineCap

+

lineCap

LineCapStyle

+

LineCapStyle

Butt

+

Butt

设置分割线条的端点样式,默认为Butt。

+

设置分割线条的端点样式,默认为Butt。

+ + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

value

+

number

+

+

-

+

当前数据值。

+

min

+

number

+

+

0

+

当前数据段最小值。

+

max

+

number

+

+

100

+

当前数据段最大值。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

value

+

number

+

0

+

设置当前数据图表的值。

+

startAngle

+

Angle

+

-150

+

设置起始角度位置,时钟0点为0度,顺时针方向为正角度。

+

endAngle

+

Angle

+

150

+

设置终止角度位置,时钟0点为0度,顺时针方向为正角度。

+

colors

+

Color | Array<ColorStop>

+

-

+

设置图表的颜色,支持纯色和分段渐变色设置。

+

strokeWidth

+

Length

+

-

+

设置环形图表的环形厚度。

+
+ +## 示例 + +``` +@Entry +@Component +struct GaugeExample { + build() { + Column() { + Gauge({ value: 50, min: 0, max: 100 }) + .startAngle(210).endAngle(150) + .colors([[0x317AF7, 1], [0x5BA854, 1], [0xE08C3A, 1], [0x9C554B, 1], [0xD94838, 1]]) + .strokeWidth(20) + .width(200).height(200) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/gauge.png) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Image.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.Image.md" similarity index 47% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Image.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.Image.md" index 4ca5c9c317eb505b844bb6c4a885d05f9b597d58..385bb89bda10773ffe617484a90fb700db36df8e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/05.Image.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.Image.md" @@ -1,6 +1,6 @@ --- title: Image -permalink: /pages/000b0101020104 +permalink: /pages/010c0202010206 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Image +# Image + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 图片组件,用来渲染展示图片。 @@ -25,32 +28,31 @@ ohos.permission.INTERNET(使用网络图片) ## 接口 -Image\(src: string | PixelMap\) +Image\(value: \{uri: string | PixelMap\}\) - 参数 - -

参数名

+ - - - - - - - - - @@ -59,117 +61,124 @@ Image\(src: string | PixelMap\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

src

+

uri

string

+

string

+

-

+

-

图片的URI,支持本地图片和网络路径。

+

图片的uri,支持本地图片和网络路径。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

alt

+

alt

string

+

string

-

+

-

加载时显示的占位图。支持本地图片和网络路径。

+

加载时显示的占位图。支持本地图片和网络路径。

objectFit

+

objectFit

ImageFit

+

ImageFit

Cover

+

Cover

设置图片的缩放类型。

+

设置图片的缩放类型。

objectRepeat

+

objectRepeat

ImageRepeat

+

ImageRepeat

NoRepeat

+

NoRepeat

设置图片的重复样式。

-
说明:
  • SVG类型图源不支持该属性。
+

设置图片的重复样式。

+
说明:
  • SVG类型图源不支持该属性。

interpolation

+

interpolation

ImageInterpolation

+

ImageInterpolation

None

+

None

设置图片的插值效果,仅针对图片放大插值。

-
说明:
  • SVG类型图源不支持该属性。
  • PixelMap资源不支持该属性。
+

设置图片的插值效果,仅针对图片放大插值。

+
说明:
  • SVG类型图源不支持该属性。
  • PixelMap资源不支持该属性。

renderMode

+

renderMode

ImageRenderMode

+

ImageRenderMode

Original

+

Original

设置图片渲染的模式。

-
说明:
  • SVG类型图源不支持该属性。
+

设置图片渲染的模式。

+
说明:
  • SVG类型图源不支持该属性。

sourceSize

+

sourceSize

{

-

width: number,

-

height: number

-

}

+

{

+

width: number,

+

height: number

+

}

-

+

-

设置图片解码尺寸,将原始图片解码成指定尺寸的图片,number类型单位为px。

-
说明:

PixelMap资源不支持该属性。

+

设置图片解码尺寸,将原始图片解码成指定尺寸的图片,number类型单位为px。

+
说明:

PixelMap资源不支持该属性。

syncLoad8+

+

boolean

+

false

+

设置是否同步加载图片,默认是异步加载。同步加载时阻塞UI线程,不会显示占位图。

+
- ImageFit枚举说明 - -

名称

+ - - - - - - - - - - - @@ -178,31 +187,30 @@ Image\(src: string | PixelMap\) - ImageInterpolation枚举说明 - -

名称

描述

+

描述

Cover

+

Cover

保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

+

保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

Contain

+

Contain

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

+

保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

Fill

+

Fill

不保持宽高比进行放大缩小,使得图片填充满显示边界。

+

不保持宽高比进行放大缩小,使得图片填充满显示边界。

None

+

None

保持原有尺寸显示。通常配合objectRepeat属性一起使用。

+

保持原有尺寸显示。通常配合objectRepeat属性一起使用。

ScaleDown

+

ScaleDown

保持宽高比显示,图片缩小或者保持不变。

+

保持宽高比显示,图片缩小或者保持不变。

名称

+ - - - - - - - - - @@ -211,21 +219,20 @@ Image\(src: string | PixelMap\) - ImageRenderMode枚举说明 - -

名称

描述

+

描述

None

+

None

不使用插值图片数据。

+

不使用插值图片数据。

High

+

High

高度使用插值图片数据,可能会影响图片渲染的速度。

+

高度使用插值图片数据,可能会影响图片渲染的速度。

Medium

+

Medium

中度使用插值图片数据。

+

中度使用插值图片数据。

Low

+

Low

低度使用插值图片数据。

+

低度使用插值图片数据。

名称

+ - - - - - @@ -234,26 +241,25 @@ Image\(src: string | PixelMap\) ## 事件 - -

名称

描述

+

描述

Original

+

Original

按照原图进行渲染,包括颜色。

+

按照原图进行渲染,包括颜色。

Template

+

Template

将图像渲染为模板图像,忽略图片的颜色信息。

+

将图像渲染为模板图像,忽略图片的颜色信息。

名称

+ - - - - - - - @@ -395,7 +401,7 @@ struct ImageExample2 { } ``` -![](/images/application-dev/reference/arkui-ts/figures/Image2.gif) +![](/images/application-dev/reference/arkui-ts/figures/Image2.png) ``` // Image3 @@ -457,5 +463,4 @@ struct ImageExample3 { } ``` -![](/images/application-dev/reference/arkui-ts/figures/Image3.gif) - +![](/images/application-dev/reference/arkui-ts/figures/Image3.gif) \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.ImageAnimator.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.ImageAnimator.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.ImageAnimator.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.ImageAnimator.md" index b61f727a14889d220fd79e8efa2d17d16a12b1c0..93d94de5ec70dbd0f925ddfbc88f11b93df65b42 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/06.ImageAnimator.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.ImageAnimator.md" @@ -1,6 +1,6 @@ --- title: ImageAnimator -permalink: /pages/000b0101020105 +permalink: /pages/010c0202010207 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# ImageAnimator +# ImageAnimator + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 提供帧动画组件来实现逐帧播放图片的能力,可以配置需要播放的图片列表,每张图片可以配置时长。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,118 +32,117 @@ ImageAnimator\(\) ## 属性 - -

名称

功能描述

+

功能描述

onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void)

+

onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void)

图片成功加载时触发该回调,返回成功加载的图源尺寸。

+

图片成功加载时触发该回调,返回成功加载的图源尺寸。

onError(callback: (event?: { componentWidth: number, componentHeight: number }) => void)

+

onError(callback: (event?: { componentWidth: number, componentHeight: number }) => void)

图片加载出现异常时触发该回调。

+

图片加载出现异常时触发该回调。

onFinish(callback: () => void)

+

onFinish(callback: () => void)

当加载的源文件为带动效的svg图片时,当svg动效播放完成时会触发这个回调,如果动效为无限循环动效,则不会触发这个回调。

+

当加载的源文件为带动效的svg图片时,当svg动效播放完成时会触发这个回调,如果动效为无限循环动效,则不会触发这个回调。

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -144,31 +150,30 @@ ImageAnimator\(\) - AnimationStatus枚举说明 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

images

+

images

Array<{

-

src:string,

-

width?:Length,

-

height?:Length,

-

top?:Length,

-

left?:Length,

-

duration?:number

-

}>

+

Array<{

+

src:string,

+

width?:Length,

+

height?:Length,

+

top?:Length,

+

left?:Length,

+

duration?:number

+

}>

[]

+

[]

+

设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小、图片位置和图片播放时长信息。详细说明如下:

-

src:图片路径,图片格式为svg,png和jpg。

-

width:图片宽度。

-

height:图片高度。

-

top:图片相对于组件左上角的纵向坐标。

-

left:图片相对于组件左上角的横向坐标。

-

duration:每一帧图片的播放时长,单位毫秒。

+

设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小、图片位置和图片播放时长信息。详细说明如下:

+

src:图片路径,图片格式为svg,png和jpg。

+

width:图片宽度。

+

height:图片高度。

+

top:图片相对于组件左上角的纵向坐标。

+

left:图片相对于组件左上角的横向坐标。

+

duration:每一帧图片的播放时长,单位毫秒。

state

+

state

AnimationStatus

+

AnimationStatus

Initial

+

Initial

+

默认为初始状态,用于控制播放状态。

+

默认为初始状态,用于控制播放状态。

duration

+

duration

number

+

number

1000

+

1000

+

单位为毫秒,默认时长为1000ms;duration为0时,不播放图片;值的改变只会在下一次循环开始时生效;当images中设置了单独的duration后,该属性设置无效。

+

单位为毫秒,默认时长为1000ms;duration为0时,不播放图片;值的改变只会在下一次循环开始时生效;当images中设置了单独的duration后,该属性设置无效。

reverse

+

reverse

boolean

+

boolean

false

+

false

+

设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。

+

设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。

fixedSize

+

fixedSize

boolean

+

boolean

true

+

true

+

设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的width 、height 、top 和left属性是无效的。false表示每一张图片的 width 、height 、top和left属性都要单独设置。

+

设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的width 、height 、top 和left属性是无效的。false表示每一张图片的 width 、height 、top和left属性都要单独设置。

preDecode

+

preDecode

number

+

number

0

+

0

+

是否启用预解码,默认值为0,即不启用预解码,如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。

+

是否启用预解码,默认值为0,即不启用预解码,如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。

fillMode

+

fillMode

FillMode

+

FillMode

Forwards

+

Forwards

+

设置动画开始前和结束后的状态,可选值参见FillMode说明。

+

设置动画开始前和结束后的状态,可选值参见FillMode说明。

iterations

+

iterations

number

+

number

1

+

1

+

默认播放一次,设置为-1时表示无限次播放。

+

默认播放一次,设置为-1时表示无限次播放。

名称

+ - - - - - - - - - @@ -177,31 +182,30 @@ ImageAnimator\(\) - FillMode枚举值说明 - -

名称

描述

+

描述

Initial

+

Initial

动画初始状态

+

动画初始状态

Running

+

Running

动画处于播放状态。

+

动画处于播放状态。

Paused

+

Paused

动画处于暂停状态。

+

动画处于暂停状态。

Stopped

+

Stopped

动画处于停止状态。

+

动画处于停止状态。

名称

+ - - - - - - - - - @@ -210,36 +214,35 @@ ImageAnimator\(\) ## 事件 - -

名称

描述

+

描述

None

+

None

播放完成后恢复初始状态。

+

播放完成后恢复初始状态。

Forwards

+

Forwards

播放完成后保持动画结束时的状态。

+

播放完成后保持动画结束时的状态。

Backwards

+

Backwards

在animation-delay所指定的一段时间内,在动画显示之前,应用开始属性值。

+

在animation-delay所指定的一段时间内,在动画显示之前,应用开始属性值。

Both

+

Both

向前和向后填充模式都被应用。

+

向前和向后填充模式都被应用。

名称

+ - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.Progress.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.Progress.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.Progress.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.Progress.md" index b21d79131716bc4716bfa81f6cd63e59e342e4cd..b95e7b9d5e1b8d706db3ad9fa8532d944e2e0002 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/07.Progress.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.Progress.md" @@ -1,6 +1,6 @@ --- title: Progress -permalink: /pages/000b0101020106 +permalink: /pages/010c0202010208 navbar: true sidebar: true prev: true @@ -9,40 +9,18 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Progress +# Progress + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 进度条,用于显示内容加载或操作处理进度。 -## 支持设备 +## 权限列表 - -

名称

功能描述

+

功能描述

onStart() => void

+

onStart() => void

状态回调,动画开始播放时触发。

+

状态回调,动画开始播放时触发。

onPause() => void

+

onPause() => void

状态回调,动画暂停播放时触发。

+

状态回调,动画暂停播放时触发。

onRepeat() => void

+

onRepeat() => void

状态回调,动画重新播放时触发。

+

状态回调,动画重新播放时触发。

onCancel() => void

+

onCancel() => void

状态回调,动画取消播放时触发。

+

状态回调,动画取消播放时触发。

onFinish() => void

+

onFinish() => void

状态回调,动画播放完成时触发。

+

状态回调,动画播放完成时触发。

- - - - - - - - - - - - - -

手机

-

平板

-

车机

-

智慧屏

-

智能穿戴

-

支持

-

支持

-

支持

-

不支持

-

不支持

-
+无 ## 子组件 @@ -52,54 +30,53 @@ date: 2021-12-30 18:31:40 Progress\(value: \{value: number, total?: number, style?: ProgressStyle\}\) -创建有明确进度的进度条。 +创建指定进度的进度条。 - 参数 - -

参数名

+ - - - - - - - - - - - - - - - - - - - @@ -109,15 +86,15 @@ Progress\(value: \{value: number, total?: number, style?: ProgressStyle\}\) - ProgressStyle枚举说明 -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

number

+

number

+

-

+

-

指定当前进度值。

+

指定当前进度值。

total

+

total

number

+

number

+

100

+

100

指定进度总长。

+

指定进度总长。

style

+

style

ProgressStyle

+

ProgressStyle

+

Linear

+

Linear

指定进度条样式。

+

指定进度条样式。

名称

+ - - - @@ -126,33 +103,32 @@ Progress\(value: \{value: number, total?: number, style?: ProgressStyle\}\) ## 属性 - -

名称

描述

+

描述

Linear

+

Linear

线性进度条样式。

+

线性进度条样式。

名称

+ - - - - - - - - - - - @@ -176,5 +152,5 @@ struct ProgressExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/progress-15.png) +![](/images/application-dev/reference/arkui-ts/figures/progress.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.QRCode.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.QRCode.md" similarity index 44% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.QRCode.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.QRCode.md" index fd69ccce513f5e14f163b5d81e3b9a3413350715..1bbe68bc40febfcff4873449f744931067543c67 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/08.QRCode.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.QRCode.md" @@ -1,6 +1,6 @@ --- title: QRCode -permalink: /pages/000b0101020107 +permalink: /pages/010c0202010209 navbar: true sidebar: true prev: true @@ -9,13 +9,16 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# QRCode +# QRCode + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 显示二维码信息。 -## 权限类别 +## 权限列表 无 @@ -29,28 +32,27 @@ QRCode\(value: string\) - 参数 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

value

+

value

number

+

number

-

+

-

设置当前进度值。

+

设置当前进度值。

color

+

color

Color

+

Color

-

+

-

设置进度条前景色。

+

设置进度条前景色。

参数名

+ - - - - - - - - - @@ -59,24 +61,23 @@ QRCode\(value: string\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

string

+

string

+

-

+

-

二维码内容字符串。

+

二维码内容字符串。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.Rating.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Rating.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.Rating.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Rating.md" index ec623c87bdaa2472e92bf32eca750b497a53fa82..d67b09d7961fa0e33e970d2f72c5fcf05a4d7aac 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/09.Rating.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Rating.md" @@ -1,6 +1,6 @@ --- title: Rating -permalink: /pages/000b0101020108 +permalink: /pages/010c020201020a navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Rating +# Rating + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 评分条组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,39 +32,38 @@ Rating\(options?: \{ rating: number, indicator?: boolean \}\) - 参数 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

color

+

color

Color

+

Color

Black

+

Black

设置二维码颜色。

+

设置二维码颜色。

参数名

+ - - - - - - - - - - - - - - @@ -66,48 +72,47 @@ Rating\(options?: \{ rating: number, indicator?: boolean \}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

rating

+

rating

number

+

number

+

0

+

0

设置并接收评分值。

+

设置并接收评分值。

indicator

+

indicator

boolean

+

boolean

+

false

+

false

仅作为指示器使用,不可操作。

+

仅作为指示器使用,不可操作。

名称

+ - - - - - - - - - - - - - - - @@ -115,16 +120,15 @@ Rating\(options?: \{ rating: number, indicator?: boolean \}\) ## 事件 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

stars

+

stars

number

+

number

5

+

5

设置评星总数。

+

设置评星总数。

stepSize

+

stepSize

number

+

number

0.5

+

0.5

操作评级的步长。

+

操作评级的步长。

starStyle

+

starStyle

{

-

backgroundUri: string,

-

foregroundUri: string,

-

secondaryUri?: string

-

}

+

{

+

backgroundUri: string,

+

foregroundUri: string,

+

secondaryUri?: string

+

}

-

+

-

backgroundSrc:未选中的星级的图片链接,可由用户自定义或使用系统默认图片,仅支持本地。

-

foregroundSrc:选中的星级的图片路径,可由用户自定义或使用系统默认图片,仅支持本地。

-

secondarySrc:部分选中的星级的图片路径,可由用户自定义或使用系统默认图片,仅支持本地。

+

backgroundSrc:未选中的星级的图片链接,可由用户自定义或使用系统默认图片,仅支持本地。

+

foregroundSrc:选中的星级的图片路径,可由用户自定义或使用系统默认图片,仅支持本地。

+

secondarySrc:部分选中的星级的图片路径,可由用户自定义或使用系统默认图片,仅支持本地。

名称

+ - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Span.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Span.md" similarity index 47% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Span.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Span.md" index 6bdad5b9bdd5704067d6d60e31341ac8d1149ef4..99c493e543cd2e2fdbe6119d5efc2837f080e68c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/10.Span.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Span.md" @@ -1,6 +1,6 @@ --- title: Span -permalink: /pages/000b0101020109 +permalink: /pages/010c020201020b navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Span +# Span + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 文本段落,只能作为Text子组件,呈现一段文本信息。 @@ -29,28 +32,27 @@ Span\(content: string\) - 参数 - -

名称

功能描述

+

功能描述

onChange(callback:(value: number) => void)

+

onChange(callback:(value: number) => void)

操作评分条的评星发生改变时触发该回调。

+

操作评分条的评星发生改变时触发该回调。

参数名

+ - - - - - - - - - @@ -59,40 +61,39 @@ Span\(content: string\) ## 属性 -通用属性方法仅支持通用文本样式。 +通用属性方法仅支持通用文本样式,不支持触摸热区设置。 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

content

+

content

string

+

string

+

-

+

-

文本内容。

+

文本内容。

名称

+ - - - - - - - - - - - @@ -102,6 +103,9 @@ Span\(content: string\) 通用事件仅支持点击事件。 +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>由于Span组件无尺寸信息,因此点击事件返回的ClickEvent对象的target属性无效。 + ## 示例 ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Slider.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Slider.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Slider.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Slider.md" index 9480601b527e521ebf88e65aed7ba73f9704dbe3..cabfe04f230d3006f299545d9b89e82a6fb1e304 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/11.Slider.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Slider.md" @@ -1,6 +1,6 @@ --- title: Slider -permalink: /pages/000b010102010a +permalink: /pages/010c020201020c navbar: true sidebar: true prev: true @@ -9,88 +9,105 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Slider +# Slider + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 滑动条组件,用来快速调节设置值,如音量、亮度等。 +## 权限列表 + +无 + ## 子组件 无 ## 接口 -Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style?: SliderStyle\}\) +Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis\}\) - 参数 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

decoration

+

decoration

{

-

type: TextDecorationType,

-

color?: Color

-

}

+

{

+

type: TextDecorationType,

+

color?: Color

+

}

{

-

type: TextDecorationType.None

-

}

+

{

+

type: TextDecorationType.None

+

}

设置文本装饰线样式及其颜色。

+

设置文本装饰线样式及其颜色。

textCase

+

textCase

TextCase

+

TextCase

Normal

+

Normal

设置文本大小写。

+

设置文本大小写。

参数名

+ - - - - - + + + + - + + - - - - - - - - - - - - - - - - - - - - - - - @@ -98,21 +115,20 @@ Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style - SliderStyle枚举说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

+

number

+

+

0

+

当前进度值。

number

+

min

+

number

+

0

+

0

当前进度值。

+

设置最小值。

min

+

max

number

+

number

+

0

+

100

设置最小值。

+

设置最大值。

max

+

step

number

+

number

+

100

+

1

设置最大值

+

设置Slider滑动跳动值,当设置相应的step时,Slider为间歇滑动。

step

+

style

number

+

SliderStyle

+

1

+

SliderStyle.OutSet

设置Slider滑动跳动值,当设置相应的step时,Slider为间歇滑动。

+

设置Slider的滑块样式。

style

+

direction8+

SliderStyle

+

Axis

+

Outset

+

Axis.Horizontal

设置Slider的滑块样式。

+

设置滑动条滑动方向为水平或竖直方向。

名称

+ - - - - - @@ -121,60 +137,61 @@ Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style ## 属性 - -

名称

描述

+

描述

OutSet

+

OutSet

滑块在滑轨上。

+

滑块在滑轨上。

InSet

+

InSet

滑块在滑轨内。

+

滑块在滑轨内。

名称

+不支持触摸热区设置。 + + - - - - - - - - - - - - - - - - - - - - - - - @@ -184,18 +201,17 @@ Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style 通用事件仅支持:OnAppear,OnDisAppear。 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

blockColor

+

blockColor

Color

+

Color

-

+

-

设置滑块的颜色。

+

设置滑块的颜色。

trackColor

+

trackColor

Color

+

Color

-

+

-

设置滑轨的背景颜色。

+

设置滑轨的背景颜色。

selectedColor

+

selectedColor

Color

+

Color

-

+

-

设置滑轨的已滑动颜色。

+

设置滑轨的已滑动颜色。

showSteps

+

showSteps

boolean

+

boolean

false

+

false

设置当前是否显示步长刻度值。

+

设置当前是否显示步长刻度值。

showTips

+

showTips

boolean

+

boolean

false

+

false

设置滑动时是否显示气泡提示百分比。

+

设置滑动时是否显示气泡提示百分比。

名称

+ - - - @@ -203,26 +219,25 @@ Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style - SliderChangeMode枚举说明 - -

名称

功能描述

+

功能描述

onChange(callback: (value: number, mode: SliderChangeMode) => void)

+

onChange(callback: (value: number, mode: SliderChangeMode) => void)

Slider滑动时触发事件回调。

-

value:当前进度值。

-

mode:拖动状态。

+

Slider滑动时触发事件回调。

+

value:当前进度值。

+

mode:拖动状态。

名称

+ - - - - - - - @@ -237,6 +252,8 @@ Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style struct SliderExample { @State outSetValue: number = 40 @State inSetValue: number = 40 + @State outVerticalSetValue: number = 40 + @State inVerticalSetValue: number = 40 build() { Column({ space: 5 }) { @@ -284,10 +301,57 @@ struct SliderExample { Text(this.inSetValue.toFixed(0)).fontSize(16) } .width('80%') + + Row() { + Column() { + Text('slider out direction set').fontSize(9).fontColor(0xCCCCCC).width('50%') + Slider({ + value: this.outVerticalSetValue, + min: 0, + max: 100, + step: 1, + style: SliderStyle.OutSet, + direction: Axis.Vertical + }) + .blockColor(Color.Blue) + .trackColor(Color.Gray) + .selectedColor(Color.Blue) + .showSteps(true) + .showTips(true) + .onChange((value: number, mode: SliderChangeMode) => { + this.outVerticalSetValue = value + console.info('value:' + value + 'mode:' + mode.toString()) + }) + Text(this.outVerticalSetValue.toFixed(0)).fontSize(16) + }.width('50%').height(300) + + Column() { + Text('slider in direction set').fontSize(9).fontColor(0xCCCCCC).width('50%') + Slider({ + value: this.inVerticalSetValue, + min: 0, + max: 100, + step: 1, + style: SliderStyle.InSet, + direction: Axis.Vertical + }) + .blockColor(0xCCCCCC) + .trackColor(Color.Black) + .selectedColor(0xCCCCCC) + .showSteps(false) + .showTips(false) + .onChange((value: number, mode: SliderChangeMode) => { + this.inVerticalSetValue = value + console.info('value:' + value + 'mode:' + mode.toString()) + }) + Text(this.inVerticalSetValue.toFixed(0)).fontSize(16) + }.width('50%').height(300) + } + }.width('100%').margin({ top: 5 }) } } ``` -![](/images/application-dev/reference/arkui-ts/figures/sider.gif) +![](/images/application-dev/reference/arkui-ts/figures/slider.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Text.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/13.Text.md" similarity index 42% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Text.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/13.Text.md" index b7db6bb1596c0552123a69f39ed2eb99cf9d2476..738b728b000f31b70988feff038dd65113dde749 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/12.Text.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/13.Text.md" @@ -1,6 +1,6 @@ --- title: Text -permalink: /pages/000b010102010b +permalink: /pages/010c020201020d navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Text +# Text + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 文本,用于呈现一段信息。 @@ -21,7 +24,7 @@ date: 2021-12-30 18:31:40 ## 子组件 -可以包含[Span](/pages/000b0101020109)子组件。 +可以包含[Span](/pages/010c020201020b)子组件。 ## 接口 @@ -29,28 +32,27 @@ Text\(content?: string\) - 参数 - -

名称

描述

+

描述

Begin

+

Begin

用户开始拖动滑块。

+

用户开始拖动滑块。

Moving

+

Moving

用户拖动滑块中。

+

用户拖动滑块中。

End

+

End

用户结束拖动滑块。

+

用户结束拖动滑块。

参数名

+ - - - - - - - - - @@ -59,84 +61,83 @@ Text\(content?: string\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

content

+

content

string

+

string

+

''

+

''

文本内容,包含子组件Span时不生效,显示Span内容。

+

文本内容,包含子组件Span时不生效,显示Span内容。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -144,26 +145,25 @@ Text\(content?: string\) - TextAlign枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

textAlign

+

textAlign

TextAlign

+

TextAlign

Start

+

Start

设置多行文本的文本对齐方式。

+

设置多行文本的文本对齐方式。

textOverflow

+

textOverflow

{overflow: TextOverflow}

+

{overflow: TextOverflow}

{overflow: TextOverflow.Clip}

+

{overflow: TextOverflow.Clip}

设置文本超长时的显示方式。

+

设置文本超长时的显示方式。

maxLines

+

maxLines

number

+

number

Infinity

+

Infinity

设置文本的最大行数。

+

设置文本的最大行数。

lineHeight

+

lineHeight

Length

+

Length

-

+

-

设置文本的文本行高,设置值不大于0时,不限制文本行高,自适应字体大小,Length为number类型时单位为fp。

+

设置文本的文本行高,设置值不大于0时,不限制文本行高,自适应字体大小,Length为number类型时单位为fp。

decoration

+

decoration

{

-

type: TextDecorationType,

-

color?: Color

-

}

+

{

+

type: TextDecorationType,

+

color?: Color

+

}

{

-

type: TextDecorationType.None,

-

color:Color.Black

-

}

+

{

+

type: TextDecorationType.None,

+

color:Color.Black

+

}

设置文本装饰线样式及其颜色。

+

设置文本装饰线样式及其颜色。

baselineOffset

+

baselineOffset

Length

+

Length

-

+

-

设置文本基线的偏移量。

+

设置文本基线的偏移量。

textCase

+

textCase

TextCase

+

TextCase

Normal

+

Normal

设置文本大小写。

+

设置文本大小写。

名称

+ - - - - - - - @@ -172,26 +172,25 @@ Text\(content?: string\) - TextOverflow枚举说明 - -

名称

描述

+

描述

Center

+

Center

文本居中对齐。

+

文本居中对齐。

Start

+

Start

根据文字书写相同的方向对齐。

+

根据文字书写相同的方向对齐。

End

+

End

根据文字书写相反的方向对齐。

+

根据文字书写相反的方向对齐。

名称

+ - - - - - - - @@ -200,31 +199,30 @@ Text\(content?: string\) - TextDecorationType枚举说明 - -

名称

描述

+

描述

Clip

+

Clip

文本超长时进行裁剪显示。

+

文本超长时进行裁剪显示。

Ellipsis

+

Ellipsis

文本超长时显示不下的文本用省略号代替。

+

文本超长时显示不下的文本用省略号代替。

None

+

None

文本超长时不进行裁剪。

+

文本超长时不进行裁剪。

名称

+ - - - - - - - - - @@ -233,26 +231,25 @@ Text\(content?: string\) - TextCase枚举说明 - -

名称

描述

+

描述

Underline

+

Underline

文字下划线修饰。

+

文字下划线修饰。

LineThrough

+

LineThrough

穿过文本的修饰线。

+

穿过文本的修饰线。

Overline

+

Overline

文字上划线修饰。

+

文字上划线修饰。

None

+

None

不使用文本装饰线。

+

不使用文本装饰线。

名称

+ - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/14.TextArea.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/14.TextArea.md" new file mode 100644 index 0000000000000000000000000000000000000000..ef179c84c047fa128a974053b6f6308d790b3212 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/14.TextArea.md" @@ -0,0 +1,196 @@ +--- +title: TextArea +permalink: /pages/010c020201020e +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# TextArea + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +提供多行文本输入组件。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +TextArea\(value?: \{ placeholder?: string \}\) + +- 参数 + +

名称

描述

+

描述

Normal

+

Normal

保持文本原有大小写。

+

保持文本原有大小写。

LowerCase

+

LowerCase

文本采用全小写。

+

文本采用全小写。

UpperCase

+

UpperCase

文本采用全大写。

+

文本采用全大写。

+ + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

placeholder

+

string

+

+

-

+

无输入时的提示文本。

+
+ + +## 属性 + +除支持[通用属性](/pages/extra/35809a/)外,还支持以下属性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

placeholderColor

+

Color

+

-

+

设置placeholder文本颜色。

+

placeholderFont

+

{

+

size?: number,

+

weight?:number | FontWeight,

+

family?: string,

+

style?: FontStyle

+

}

+

-

+

设置placeholder文本样式:

+
  • size: 设置文本尺寸,Length为number类型时,使用fp单位。
  • weight: 设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。
  • family: 设置文本的字体列表。使用多个字体,使用','进行分割,优先级按顺序生效。例如:'Arial, sans-serif'。
  • style: 设置文本的字体样式。
+

textAlign

+

TextAlign

+

TextAlign.Start

+

设置文本水平对齐方式。

+

caretColor

+

Color

+

-

+

设置输入框光标颜色。

+
+ +- TextAlign枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Start

+

水平对齐首部。

+

Center

+

水平居中对齐。

+

End

+

水平对齐尾部。

+
+ + +## 事件 + + + + + + + + + + +

名称

+

功能描述

+

onChange(callback: (value: string) => void)

+

输入发生变化时,触发回调。

+
+ +## 示例 + +``` +@Entry +@Component +struct TextAreaExample { + @State text: string = '' + + build() { + Column() { + TextArea({ placeholder: 'input your word' }) + .placeholderColor("rgb(0,0,225)") + .placeholderFont({ size: 30, weight: 100, family: 'cursive', style: FontStyle.Italic }) + .textAlign(TextAlign.Center) + .caretColor(Color.Blue) + .height(50) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .fontFamily("sans-serif") + .fontStyle(FontStyle.Normal) + .fontColor(Color.Red) + .onChange((value: string) => { + this.text = value + }) + Text(this.text).width('90%') + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/textarea1.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/15.TextInput.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/15.TextInput.md" new file mode 100644 index 0000000000000000000000000000000000000000..f91b82b459959e89729f3127cd342e260f2e4333 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/15.TextInput.md" @@ -0,0 +1,276 @@ +--- +title: TextInput +permalink: /pages/010c020201020f +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# TextInput + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +提供单行文本输入组件。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +TextInput\(value?: \{ placeholder?: string \}\) + +- 参数 + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

placeholder

+

string

+

+

-

+

无输入时的提示文本。

+
+ + +## 属性 + +除支持[通用属性](/pages/extra/35809a/)外,还支持以下属性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

type

+

InputType

+

InputType.Normal

+

设置输入框类型。

+

placeholderColor

+

Color

+

-

+

设置placeholder颜色。

+

placeholderFont

+

{

+

size?: Length,

+

weight?: number | FontWeight,

+

family?: string,

+

style?: FontStyle

+

}

+

-

+

设置placeholder文本样式:

+
  • size: 设置文本尺寸,Length为number类型时,使用fp单位。
  • weight: 设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。
  • family: 设置文本的字体列表。使用多个字体,使用','进行分割,优先级按顺序生效。例如:'Arial, sans-serif'。
  • style: 设置文本的字体样式。
+

enterKeyType

+

EnterKeyType

+

EnterKeyType.Done

+

设置输入法回车键类型。

+

caretColor

+

Color

+

-

+

设置输入框光标颜色。

+

maxLength

+

number

+

-

+

设置文本的最大输入字符数。

+
+ +- EnterKeyType枚举说明 + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Go

+

显示Go文本。

+

Search

+

显示为搜索样式。

+

Send

+

显示为发送样式。

+

Next

+

显示为下一个样式。

+

Done

+

标准样式。

+
+ + +- InputType枚举说明 + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Normal

+

基本输入模式。

+

Password

+

密码输入模式。

+

Email

+

e-mail地址输入模式。

+

Number

+

纯数字输入模式。

+
+ + +## 事件 + + + + + + + + + + + + + + + +

名称

+

功能描述

+

onChange(value: string) => void

+

输入发生变化时,触发回调。

+

onSubmit(callback: (enterKey: EnterKeyType) => void)

+

回车键或者软键盘回车键触发该回调,参数为当前软键盘回车键类型。

+

onEditChanged(callback: (isEditing: boolean) => void)

+

输入状态变化时,触发回调。

+
+ +## 示例 + +``` +@Entry +@Component +struct TextInputTest { + @State text: string = '' + @State text1: string = '' + @State text2: string = '' + build() { + Column() { + TextInput({ placeholder: 'input your word' }) + .type(InputType.Normal) + .placeholderColor(Color.Blue) + .placeholderFont({ size: 40, weight: FontWeight.Normal, family: "sans-serif", style: FontStyle.Normal }) + .enterKeyType(EnterKeyType.Next) + .caretColor(Color.Green) + .height(60) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .fontFamily("cursive") + .fontStyle(FontStyle.Italic) + .fontColor(Color.Red) + .maxLength(20) + .onChange((value: string) => { + this.text = value + }) + .onSubmit((enterKey) => { + this.text1 = 'onSubmit' + }) + .onEditChanged((isEditing) => { + this.text2 = 'onEditChanged' + }) + Text(this.text) + Text(this.text1) + Text(this.text2) + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/textinput1.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/16.Toggle.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/16.Toggle.md" new file mode 100644 index 0000000000000000000000000000000000000000..3e6366e115621a32a2732d4cee7ead681ddcb839 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/16.Toggle.md" @@ -0,0 +1,217 @@ +--- +title: Toggle +permalink: /pages/010c0202010210 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# Toggle + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +Toggle\(options: \{ type: ToggleType, isOn?: boolean \}\) + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

type

+

ToggleType

+

+

-

+

创建相应的开关状态组件。

+

isOn

+

boolean

+

+

false

+

设置开关状态组件初始化状态。

+
说明:

在创建组件时不设置isOn,组件复用时可保持选中状态;如设置isOn初始值,则需要在通过事件方法记录选中状态已达到组件复用时保持选中状态。

+
+
+ + +- ToggleType枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Checkbox

+

提供单选框样式,子组件设置文本不生效,如需文本设置,可将Text和当前组件放入布局组件中。

+

Button

+

提供状态按钮样式,如果有文本设置,则相应的文本内容会显示在按钮内部。

+

Switch

+

提供开关样式,子组件设置文本不生效,如需文本设置,可将Text和当前组件放入布局组件中。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + +

名称

+

参数

+

默认值

+

参数描述

+

selectedColor

+

Color

+

-

+

设置组件打开状态的背景颜色。

+

switchPointColor

+

Color

+

-

+

设置Switch类型的圆形滑块颜色。

+
说明:

仅对type为ToggleType.Switch生效。

+
+
+ +## 事件 + + + + + + + + + +

名称

+

功能描述

+

onChange(callback: (isOn: boolean) => void)

+

开关状态切换时触发该事件。

+
+ +## 示例 + +``` +@Entry +@Component +struct ToggleExample { + build() { + Column({ space: 10 }) { + Text('type: Switch').fontSize(12).fontColor(0xcccccc).width('90%') + Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { + Toggle({ type: ToggleType.Switch, isOn: false }) + .selectedColor(0xed6f21) + .switchPointColor(0xe5ffffff) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + + Toggle({ type: ToggleType.Switch, isOn: true }) + .selectedColor(0x39a2db) + .switchPointColor(0xe5ffffff) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + } + + Text('type: Checkbox').fontSize(12).fontColor(0xcccccc).width('90%') + Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { + Toggle({ type: ToggleType.Checkbox, isOn: false }) + .size({ width: 28, height: 28 }) + .selectedColor(0xed6f21) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + + Toggle({ type: ToggleType.Checkbox, isOn: true }) + .size({ width: 28, height: 28 }) + .selectedColor(0x39a2db) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + } + + Text('type: Button').fontSize(12).fontColor(0xcccccc).width('90%') + Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { + Toggle({ type: ToggleType.Button, isOn: false }) { + Text('status button').padding({ left: 12, right: 12 }) + } + .selectedColor(0xed6f21) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + + Toggle({ type: ToggleType.Button, isOn: true }) { + Text('status button').padding({ left: 12, right: 12 }) + } + .selectedColor(0x39a2db) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + } + }.width('100%').padding(24) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/toggle.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" new file mode 100644 index 0000000000000000000000000000000000000000..560598017b6f0c7be83333a47e74c345299267b4 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" @@ -0,0 +1,272 @@ +--- +title: AlphabetIndexer +permalink: /pages/010c0202010301 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# AlphabetIndexer + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +字母索引条。 + +## 支持设备 + + + + + + + + + + + + + +

手机

+

平板

+

智慧屏

+

智能穿戴

+

支持

+

支持

+

不支持

+

不支持

+
+ +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +AlphabetIndexer\(value: \{arrayValue : Array, selected : number\}\) + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

arrayValue

+

Array<string>

+

+

-

+

字母索引字符串数组。

+

selected

+

number

+

+

-

+

选中项编号。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

描述

+

selectedColor

+

Color

+

选中文本文字颜色。

+

popupColor

+

Color

+

弹出提示文本字体颜色。

+

selectedBackgroundColor

+

Color

+

选中文本背景颜色。

+

popupBackground

+

Color

+

弹窗索引背景色。

+

usingPopup

+

boolean

+

是否使用弹出索引提示。

+

selectedFont

+

{

+

size?: number,

+

weight?: FontWeight,

+

family?: string,

+

style?: FontStyle

+

}

+

选中文本文字样式。

+

popupFont

+

{

+

size?: number,

+

weight?: FontWeight,

+

family?: string,

+

style?: FontStyle

+

}

+

弹出提示文本字体样式。

+

font

+

{

+

size?: number,

+

weight?: FontWeight,

+

family?: string,

+

style?: FontStyle

+

}

+

字母索引条默认文本字体样式。

+

itemSize

+

Length

+

字母索引条字母区域大小,字母区域为正方形,设置正方形边长。

+

alignStyle

+

IndexerAlign

+

字母索引条对齐样式,支持左侧对齐样式与右侧对齐样式,影响弹窗弹出位置。

+
+ +- IndexerAlign枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Left

+

弹框显示在索引条右侧。

+

Right

+

弹框显示在索引条左侧。

+
+ + +## 事件 + + + + + + + + + + + + + + + +

名称

+

功能描述

+

onSelected(index: number) => void

+

字母索引条选中回调。

+

onRequestPopupData(callback: (index: number) => Array<string>)8+

+

选中字母索引后,请求索引提示窗口显示内容回调。

+

返回值:索引对应的字符串数组,此字符串数组在弹出窗口中竖排显示,字符串列表最多显示5个,超出部分可以滑动显示。

+

onPopupSelected(callback: (index: number) => void)8+

+

字母索引提示窗口选中回调。

+
+ +## 示例 + +``` +@Entry +@Component +struct AlphabetIndexerComponent { + private value: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + + build() { + AlphabetIndexer({ arrayValue: this.value, selected: 0 }) + .selectedColor(0xffffff) // 选中颜色 + .popupColor(0xFFFAF0) // 弹出框颜色 + .selectedBackgroundColor(0xCCCCCC) // 选中背景颜色 + .popupBackground(0xD2B48C) // 弹出框背景颜色 + .usingPopup(true) // 是否显示弹出框 + .selectedFont({ size: 16, weight: FontWeight.Bolder }) // 选中的样式 + .popupFont({ size: 30, weight: FontWeight.Bolder }) // 弹出框的演示 + .itemSize(28) // 每一项的大小正方形 + .alignStyle(IndexerAlign.Left) // 左对齐 + .onSelected((index: number) => { + console.info(this.value[index] + '被选中了') // 选中的事件 + }) + .margin({ left: 50 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/alphabetindexer.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" index e7b8695ea315b1ac8fe04da39418b9cd04446c8e..35f658310278c2be165a37fa64e51d72e76aab6e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/02.Badge.md" @@ -1,6 +1,6 @@ --- title: Badge -permalink: /pages/000b0101020201 +permalink: /pages/010c0202010302 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Badge +# Badge + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 新事件标记组件,在组件上提供事件信息展示能力。 +## 权限列表 + +无 + ## 子组件 支持单个子组件。 @@ -25,61 +32,60 @@ Badge\(value: \{count: number, position?: BadgePosition, maxCount?: number, styl - 参数 - -

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -92,50 +98,49 @@ Badge\(value: \{value: string, position?: BadgePosition, style?: BadgeStyle\}\) - 参数 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

count

+

count

number

+

number

+

-

+

-

设置提醒消息数。

+

设置提醒消息数。

position

+

position

BadgePosition

+

BadgePosition

+

RightTop

+

RightTop

设置提示点显示位置。

+

设置提示点显示位置。

maxCount

+

maxCount

number

+

number

+

99

+

99

最大消息数,超过最大消息时仅显示maxCount+。

+

最大消息数,超过最大消息时仅显示maxCount+。

style

+

style

BadgeStyle

+

BadgeStyle

+

-

+

-

Badge组件可设置样式,支持设置文本颜色、尺寸、圆点颜色和尺寸。

+

Badge组件可设置样式,支持设置文本颜色、尺寸、圆点颜色和尺寸。

参数名

+ - - - - - - - - - - - - - - - - - - - @@ -144,61 +149,60 @@ Badge\(value: \{value: string, position?: BadgePosition, style?: BadgeStyle\}\) - BadgeStyle对象说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

string

+

string

+

-

+

-

提示内容的文本字符串。

+

提示内容的文本字符串。

position

+

position

BadgePosition

+

BadgePosition

+

RightTop

+

RightTop

设置提示点显示位置。

+

设置提示点显示位置。

style

+

style

BadgeStyle

+

BadgeStyle

+

-

+

-

Badge组件可设置样式,支持设置文本颜色、尺寸、圆点颜色和尺寸。

+

Badge组件可设置样式,支持设置文本颜色、尺寸、圆点颜色和尺寸。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -207,26 +211,25 @@ Badge\(value: \{value: string, position?: BadgePosition, style?: BadgeStyle\}\) - BadgePosition枚举说明 - -

名称

类型

+

类型

必填

+

必填

默认值

+

默认值

描述

+

描述

color

+

color

Color

+

Color

+

White

+

White

文本颜色。

+

文本颜色。

fontSize

+

fontSize

number | string

+

number | string

+

10

+

10

文本大小。

+

文本大小。

badgeSize

+

badgeSize

number | string

+

number | string

+

-

+

-

badge的大小。

+

badge的大小。

badgeColor

+

badgeColor

Color

+

Color

+

Red

+

Red

badge的颜色。

+

badge的颜色。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" similarity index 31% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" index 828b807ca908572c8877af2a8fd2f0b22acfe48d..3c180ece1502253db4def136b781bb096be61417 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/03.Column.md" @@ -1,6 +1,6 @@ --- title: Column -permalink: /pages/000b0101020202 +permalink: /pages/010c0202010303 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Column +# Column + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 沿垂直方向布局的容器。 @@ -25,58 +28,67 @@ date: 2021-12-30 18:31:40 ## 接口 -Column\(options?: \{ space?: Length \}\) +Column\(value:\{space?: Length\}\) - 参数 - -

名称

描述

+

描述

Right

+

Right

圆点显示在右侧纵向居中。

+

圆点显示在右侧纵向居中。

RightTop

+

RightTop

圆点显示在右上角。

+

圆点显示在右上角。

Left

+

Left

圆点显示在左侧纵向居中。

+

圆点显示在左侧纵向居中。

参数名

+ - - - - - - - - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

space

+

space

Length

+

Length

+

0

+

0

纵向布局元素间距。

+

纵向布局元素间距。

+ ## 属性 - -

名称

+ - - - - + + + + + + - - - @@ -84,26 +96,25 @@ Column\(options?: \{ space?: Length \}\) - HorizontalAlign枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

alignItems

+

alignItems

+

HorizontalAlign

+

Center

+

设置子组件在水平方向上的对齐格式。

+

justifyContent8+

HorizontalAlign

+

FlexAlign

Center

+

Start

设置子组件在水平方向上的对齐格式。

+

设置子组件在垂直方向上的对齐格式。

名称

+ - - - - - - - @@ -117,28 +128,39 @@ Column\(options?: \{ space?: Length \}\) @Component struct ColumnExample { build() { - Column({ space: 5 }) { - Text('space').fontSize(9).fontColor(0xCCCCCC).width('90%') - Column({ space: 5 }) { - Column().width('100%').height(50).backgroundColor(0xAFEEEE) - Column().width('100%').height(50).backgroundColor(0x00FFFF) - }.width('90%').height(107).border({ width: 1 }) - - Text('alignItems(Start)').fontSize(9).fontColor(0xCCCCCC).width('90%') - Column() { - Column().width('50%').height(50).backgroundColor(0xAFEEEE) - Column().width('50%').height(50).backgroundColor(0x00FFFF) - }.alignItems(HorizontalAlign.Start).width('90%').border({ width: 1 }) - - Text('alignItems(End)').fontSize(9).fontColor(0xCCCCCC).width('90%') - Column() { - Column().width('50%').height(50).backgroundColor(0xAFEEEE) - Column().width('50%').height(50).backgroundColor(0x00FFFF) - }.alignItems(HorizontalAlign.End).width('90%').border({ width: 1 }) + Text('space').fontSize(9).fontColor(0xCCCCCC).width('90%') + Column({ space: 5 }) { + Column().width('100%').height(30).backgroundColor(0xAFEEEE) + Column().width('100%').height(30).backgroundColor(0x00FFFF) + }.width('90%').height(100).border({ width: 1 }) + + Text('alignItems(Start)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Column() { + Column().width('50%').height(30).backgroundColor(0xAFEEEE) + Column().width('50%').height(30).backgroundColor(0x00FFFF) + }.alignItems(HorizontalAlign.Start).width('90%').border({ width: 1 }) + + Text('alignItems(End)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Column() { + Column().width('50%').height(30).backgroundColor(0xAFEEEE) + Column().width('50%').height(30).backgroundColor(0x00FFFF) + }.alignItems(HorizontalAlign.End).width('90%').border({ width: 1 }) + + Text('justifyContent(Center)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Column() { + Column().width('30%').height(30).backgroundColor(0xAFEEEE) + Column().width('30%').height(30).backgroundColor(0x00FFFF) + }.height('15%').border({ width: 1 }).justifyContent(FlexAlign.Center) + + Text('justifyContent(End)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Column() { + Column().width('30%').height(30).backgroundColor(0xAFEEEE) + Column().width('30%').height(30).backgroundColor(0x00FFFF) + }.height('15%').border({ width: 1 }).justifyContent(FlexAlign.End) }.width('100%').padding({ top: 5 }) } } ``` -![](/images/application-dev/reference/arkui-ts/figures/column.gif) +![](/images/application-dev/reference/arkui-ts/figures/Column.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" similarity index 62% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" index 98220485f9fb98379e4f67f3a95caedbd2f82390..0d1fa0d75ee00d8f3be3aef5f8e7171b24289978 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/04.ColumnSplit.md" @@ -1,6 +1,6 @@ --- title: ColumnSplit -permalink: /pages/000b0101020203 +permalink: /pages/010c0202010304 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# ColumnSplit +# ColumnSplit + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 将子组件纵向布局,并在每个子组件之间插入一根横向的分割线。 +## 权限列表 + +无 + ## 子组件 可以包含子组件。 @@ -25,20 +32,19 @@ ColumnSplit\(\) ## 属性 - -

名称

描述

+

描述

Start

+

Start

按照语言方向起始端对齐。

+

按照语言方向起始端对齐。

Center

+

Center

居中对齐,默认对齐方式。

+

居中对齐,默认对齐方式。

End

+

End

按照语言方向末端对齐。

+

按照语言方向末端对齐。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" similarity index 47% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" index 464dbe8dcd9a8136d52b04a2c42dbc8195a96e1c..3ea4aa14534bd75b3123ace0daaf1316cd46a877 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/05.Counter.md" @@ -1,6 +1,6 @@ --- title: Counter -permalink: /pages/000b0101020204 +permalink: /pages/010c0202010305 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Counter +# Counter + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 计数器组件,提供相应的增加或者减少的计数操作。 +## 权限列表 + +无 + ## 子组件 可以包含子组件。 @@ -27,21 +34,20 @@ Counter\(\) 不支持通用事件和手势, 仅支持如下事件: - -

名称

参数类型

+

参数类型

描述

+

描述

resizeable

+

resizeable

boolean

+

boolean

分割线是否可拖拽,默认为false。

+

分割线是否可拖拽,默认为false。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" similarity index 53% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" index 9b771188ccf8ca135aae0ca6c23cd8d2adbd0006..b70937dbeea982107c82ec0ad20fd04198660e74 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/06.Flex.md" @@ -1,6 +1,6 @@ --- title: Flex -permalink: /pages/000b0101020205 +permalink: /pages/010c0202010306 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Flex +# Flex + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 弹性布局组件。 @@ -25,78 +28,77 @@ date: 2021-12-30 18:31:40 ## 接口 -Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign \}\) +Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign \}\) 标准Flex布局容器。 - 参数 - -

名称

功能描述

+

功能描述

onInc(callback: () => void)

+

onInc(event: () => void)

监听数值增加事件。

+

监听数值增加事件。

onDec(callback: () => void)

+

onDec(event: () => void)

监听数值减少事件。

+

监听数值减少事件。

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104,31 +106,30 @@ Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: - FlexDirection枚举说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

direction

+

direction

FlexDirection

+

FlexDirection

+

Row

+

Row

子组件在Flex容器上排列的方向,即主轴的方向。

+

子组件在Flex容器上排列的方向,即主轴的方向。

wrap

+

wrap

FlexWrap

+

FlexWrap

+

NoWrap

+

NoWrap

Flex容器是单行/列还是多行/列排列。

+

Flex容器是单行/列还是多行/列排列。

justifyContent

+

justifyContent

FlexAlign

+

FlexAlign

+

Start

+

Start

子组件在Flex容器主轴上的对齐格式。

+

子组件在Flex容器主轴上的对齐格式。

alignItems

+

alignItems

ItemAlign

+

ItemAlign

+

Stretch

+

Stretch

子组件在Flex容器交叉轴上的对齐格式。

+

子组件在Flex容器交叉轴上的对齐格式。

alignContent

+

alignContent

FlexAlign

+

FlexAlign

+

Start

+

Start

交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效。

+

交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效。

名称

+ - - - - - - - - - @@ -137,26 +138,25 @@ Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: - FlexWrap枚举说明 - -

名称

描述

+

描述

Row

+

Row

主轴与行方向一致作为布局模式。

+

主轴与行方向一致作为布局模式。

RowReverse

+

RowReverse

与Row方向相反方向进行布局。

+

与Row方向相反方向进行布局。

Column

+

Column

主轴与列方向一致作为布局模式。

+

主轴与列方向一致作为布局模式。

ColumnReverse

+

ColumnReverse

与Column相反方向进行布局。

+

与Column相反方向进行布局。

名称

+ - - - - - - - @@ -165,41 +165,40 @@ Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: - FlexAlign枚举说明 - -

名称

描述

+

描述

NoWrap

+

NoWrap

Flex容器的元素单行/列布局,子项允许超出容器。

+

Flex容器的元素单行/列布局,子项允许超出容器。

Wrap

+

Wrap

Flex容器的元素多行/列排布,子项允许超出容器。

+

Flex容器的元素多行/列排布,子项允许超出容器。

WrapReverse

+

WrapReverse

Flex容器的元素反向多行/列排布,子项允许超出容器。

+

Flex容器的元素反向多行/列排布,子项允许超出容器。

名称

+ - - - - - - - - - - - - - @@ -415,7 +414,7 @@ struct FlexExample4 { ![](/images/application-dev/reference/arkui-ts/figures/Flex04.jpg) -![](/images/application-dev/reference/arkui-ts/figures/Flex04-16.gif) +![](/images/application-dev/reference/arkui-ts/figures/Flex04-2.gif) ``` // Example 05 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" similarity index 46% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" index 922a9c134f1ee0578da81741a0207c27d3b00040..34a9fa7d9c55579d5dc5a77d561f81c00f025609 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/07.GridContainer.md" @@ -1,6 +1,6 @@ --- title: GridContainer -permalink: /pages/000b0101020206 +permalink: /pages/010c0202010307 navbar: true sidebar: true prev: true @@ -9,77 +9,83 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# GridContainer +# GridContainer + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 纵向排布栅格布局容器,仅在栅格布局场景中使用。 +## 权限列表 + +无 + ## 子组件 可以包含子组件。 ## 接口 -GridContainer\(options? :\{ columns?: number | 'auto', sizeType?: SizeType, gutter?: Length, margin?: Length \}\) +GridContainer\(options?: \{ columns?: number | 'auto', sizeType?: SizeType, gutter?: Length, margin?: Length\}\) - 参数 - -

名称

描述

+

描述

Start

+

Start

元素在主轴方向首端对齐, 第一个元素与行首对齐,同时后续的元素与前一个对齐。

+

元素在主轴方向首端对齐, 第一个元素与行首对齐,同时后续的元素与前一个对齐。

Center

+

Center

元素在主轴方向中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。

+

元素在主轴方向中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。

End

+

End

元素在主轴方向尾部对齐, 最后一个元素与行尾对齐,其他元素与后一个对齐。

+

元素在主轴方向尾部对齐, 最后一个元素与行尾对齐,其他元素与后一个对齐。

SpaceBetween

+

SpaceBetween

Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素与行首对齐,最后一个元素与行尾对齐。

+

Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素与行首对齐,最后一个元素与行尾对齐。

SpaceAround

+

SpaceAround

Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素到行首的距离和最后一个元素到行尾的距离时相邻元素之间距离的一半。

+

Flex主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素到行首的距离和最后一个元素到行尾的距离时相邻元素之间距离的一半。

SpaceEvenly

+

SpaceEvenly

Flex主轴方向元素等间距布局, 相邻元素之间的间距、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样。

+

Flex主轴方向元素等间距布局, 相邻元素之间的间距、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样。

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -87,36 +93,35 @@ GridContainer\(options? :\{ columns?: number | 'auto', sizeType?: SizeType, gutt - SizeType枚举说明 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

columns

+

columns

number

+

number

+

'auto'

+

'auto'

设置当前布局总列数。

+

设置当前布局总列数。

sizeType

+

sizeType

SizeType

+

SizeType

+

Auto

+

Auto

选用设备宽度类型。

+

选用设备宽度类型。

gutter

+

gutter

Length

+

Length

+

-

+

-

栅格布局列间距。

+

栅格布局列间距。

margin

+

margin

Length

+

Length

+

-

+

-

栅格布局两侧间距。

+

栅格布局两侧间距。

名称

+ - - - - - - - - - - - @@ -125,7 +130,7 @@ GridContainer\(options? :\{ columns?: number | 'auto', sizeType?: SizeType, gutt ## 属性 -支持通用属性和Column组件的[属性方法](/pages/000b0101020202#section358284262918)。 +支持通用属性和Column组件的[属性方法](/pages/010c0202010303#section358284262918)。 ## 事件 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" similarity index 43% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" index 6a00aee19052bf6997d01ecf6284352e328d1730..03d3fde6ed17410b2469065881a1e5c1dd6ad8e5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/08.Grid.md" @@ -1,6 +1,6 @@ --- title: Grid -permalink: /pages/000b0101020207 +permalink: /pages/010c0202010308 navbar: true sidebar: true prev: true @@ -9,19 +9,22 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Grid +# Grid + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 网格容器,二维布局,将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以任意组合不同的网格,做出各种各样的布局。 -## 权限类别 +## 权限列表 无 ## 子组件 -包含[GridItem](/pages/000b0101020208)子组件。 +包含[GridItem](/pages/010c0202010309)子组件。 ## 接口说明 @@ -29,51 +32,50 @@ Grid\(\) ## 属性 - -

名称

描述

+

描述

XS

+

XS

最小宽度类型设备。

+

最小宽度类型设备。

SM

+

SM

小宽度类型设备。

+

小宽度类型设备。

MD

+

MD

中等宽度类型设备。

+

中等宽度类型设备。

LG

+

LG

大宽度类型设备。

+

大宽度类型设备。

Auto

+

Auto

根据设备类型进行选择。

+

根据设备类型进行选择。

名称

+ - - - - - - - - - - - - - - - - - - - @@ -81,16 +83,15 @@ Grid\(\) ## 事件 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

columnsTemplate

+

columnsTemplate

string

+

string

'1fr'

+

'1fr'

用于设置当前网格布局列的数量,不设置时默认1列 示例, '1fr 1fr 2fr' 分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份。

+

用于设置当前网格布局列的数量,不设置时默认1列 示例, '1fr 1fr 2fr' 分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份。

rowsTemplate

+

rowsTemplate

string

+

string

'1fr'

+

'1fr'

用于设置当前网格布局行的数量,不设置时默认1行 示例, '1fr 1fr 2fr'分三行,将父组件允许的高分为4等份,第一行占1份,第二行占一份,第三行占2份。

+

用于设置当前网格布局行的数量,不设置时默认1行 示例, '1fr 1fr 2fr'分三行,将父组件允许的高分为4等份,第一行占1份,第二行占一份,第三行占2份。

columnsGap

+

columnsGap

Length

+

Length

0

+

0

用于设置列与列的间距。

+

用于设置列与列的间距。

rowsGap

+

rowsGap

Length

+

Length

0

+

0

用于设置行与行的间距。

+

用于设置行与行的间距。

名称

+ - - - @@ -157,5 +158,5 @@ struct GridExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/grid-17.gif) +![](/images/application-dev/reference/arkui-ts/figures/grid-3.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" similarity index 45% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" index aa571a6ca607f9b06f321caeec871725f831b06f..88ba9ff710ac6467faf366153af10d8dec6888f7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/09.GridItem.md" @@ -1,6 +1,6 @@ --- title: GridItem -permalink: /pages/000b0101020208 +permalink: /pages/010c0202010309 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# GridItem +# GridItem + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 网格容器中单项内容容器。 @@ -29,60 +32,59 @@ GridItem\(\) ## 属性 - -

名称

功能描述

+

功能描述

onScrollIndex(first: number) => void

+

onScrollIndex(first: number) => void

当前列表显示的起始位置item发生变化时触发。

+

当前列表显示的起始位置item发生变化时触发。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" new file mode 100644 index 0000000000000000000000000000000000000000..838d5da557fea36977ae48aef2c6c37e440bc76f --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" @@ -0,0 +1,434 @@ +--- +title: List +permalink: /pages/010c020201030a +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# List + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 + +## 权限列表 + +无 + +## 子组件 + +包含[ListItem](/pages/010c020201030b)子组件。 + +## 接口 + +List\(value:\{space?: number, initialIndex?: number\}\) + +- 参数 + +

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

rowStart

+

rowStart

number

+

number

-

+

-

用于指定当前元素起始行号。

+

用于指定当前元素起始行号。

rowEnd

+

rowEnd

number

+

number

-

+

-

用于指定当前元素终点行号。

+

用于指定当前元素终点行号。

columnStart

+

columnStart

number

+

number

-

+

-

用于指定当前元素起始列号。

+

用于指定当前元素起始列号。

columnEnd

+

columnEnd

number

+

number

-

+

-

用于指定当前元素终点列号。

+

用于指定当前元素终点列号。

forceRebuild

+

forceRebuild

boolean

+

boolean

false

+

false

用于设置在触发组件build时是否重新创建此节点。

+

用于设置在触发组件build时是否重新创建此节点。

+ + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

space

+

number

+

+

0

+

列表项间距。

+

initialIndex

+

number

+

+

0

+

设置当前List初次加载时视口起始位置显示的item,即显示第一个item,如设置的序号超过了最后一个item的序号,则设置不生效。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

listDirection

+

Axis

+

Vertical

+

设置List组件排列方向参照Axis枚举说明。

+

divider

+

{

+

strokeWidth: Length,

+

color?:Color,

+

startMargin?: Length,

+

endMargin?: Length

+

}

+

-

+

用于设置ListItem分割线样式,默认无分割线。

+

strokeWidth: 分割线的线宽。

+

color: 分割线的颜色。

+

startMargin: 分割线距离列表侧边起始端的距离。

+

endMargin: 分割线距离列表侧边结束端的距离。

+

editMode

+

boolean

+

false

+

声明当前List组件是否处于可编辑模式。

+

edgeEffect

+

EdgeEffect

+

Spring

+

滑动效果,目前支持的滑动效果参见EdgeEffect的枚举说明。

+

chainAnimation

+

boolean

+

false

+

用于设置当前list是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。链式联动效果:list内的list-item间隔一定距离,在基本的滑动交互行为下,主动对象驱动从动对象进行联动,驱动效果遵循弹簧物理动效。

+
  • false:不启用链式联动。
  • true:启用链式联动。
+
+ +- EdgeEffect枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Spring

+

弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。

+

None

+

滑动到边缘后无效果。

+
+ + +## 事件 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

功能描述

+

onItemDelete(index: number) => boolean

+

列表项删除时触发。

+

onScrollIndex(firstIndex: number, lastIndex: number) => void

+

当前列表显示的起始位置和终止位置发生变化时触发。

+

onItemDragEnter(callback: (event: ItemDragInfo) => void)

+

绑定后,拖拽在可放置组件范围内移动时,触发回调。

+
  • itemIndex: 当前被拖拽的ListItem原本的索引。
  • insertIndex: 拖动当前ListItem插入List后的索引。
+
说明:

当监听了onDrop事件时,此事件才有效。

+
+

onItemDragMove(callback: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void)

+

+

绑定后,拖拽在可放置组件范围内移动时,触发回调。

+
  • itemIndex: 当前被拖拽的ListItem原本的索引。
  • insertIndex: 拖动当前ListItem插入List后的索引。
+
说明:

当监听了onDrop事件时,此事件才有效。

+
+

onItemDragLeave(callback: (event: ItemDragInfo, itemIndex: number) => void)

+

+

绑定后,拖拽离开组件范围内时,触发回调。

+
  • itemIndex: 当前被拖拽的ListItem原本的索引。
+
说明:

当监听了onDrop事件时,此事件才有效。

+
+

onItemDragStart(callback: (event: ItemDragInfo, itemIndex: number) => CustomBuilder)

+

+

绑定后,第一次拖拽ListItem时,触发回调。

+
  • itemIndex: 当前被拖拽的ListItem原本的索引。
  • 返回值:被拖拽ListItem的浮动UI布局。
+
说明:

当监听了onDrop事件时,此事件才有效。

+
+

onItemDrop(callback: (event: ItemDragInfo, itemIndex: number, insertIndex: number,isSuccess: boolean) => void)

+

+

绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发此回调。

+
  • itemIndex: 当前被拖拽的ListItem原本的索引。
  • insertIndex: 拖动当前ListItem插入List后的索引。
  • isSuccess: 拖拽释放时插入是否成功。
+
说明:

当监听了onDrop事件时,此事件才有效。

+
+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>List使能可编辑模式需配合onItemDelete事件和ListItem的editable属性,即可编辑模式实现删除列表项功能,需满足以下条件: +>- editMode属性设置为true。 +>- 绑定onItemDelete事件,且事件回调返回true。 +>- ListItem的editable属性设置为true。 +>实现ListItem拖拽,需满足以下条件: +>- editMode属性设置为true。 +>- 绑定onItemDragStart事件,且事件回调中返回浮动UI布局。 + +- ItemDragInfo对象说明 + + + + + + + + + + + + + + + +

属性名称

+

属性类型

+

描述

+

x

+

number

+

拖拽点的横坐标。

+

y

+

number

+

拖拽点的纵坐标。

+
+ + +## 示例 + +``` +@Entry +@Component +struct ListExample { + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + @State editFlag: boolean = false + + build() { + Stack({ alignContent: Alignment.TopStart }) { + Column() { + List({ space: 20, initialIndex: 0 }) { + ForEach(this.arr, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF) + }.editable(true) + }, item => item) + } + .listDirection(Axis.Vertical) // 排列方向 + .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线 + .edgeEffect(EdgeEffect.None) // 滑动到边缘无效果 + .chainAnimation(false) // 联动特效关闭 + .onScrollIndex((firstIndex: number, lastIndex: number) => { + console.info('first' + firstIndex) + console.info('last' + lastIndex) + }) + .editMode(this.editFlag) + .onItemDelete((index: number) => { + console.info(this.arr[index] + 'Delete') + this.arr.splice(index, 1) + console.info(JSON.stringify(this.arr)) + this.editFlag = false + return true + }).width('90%') + }.width('100%') + + Button('edit list') + .onClick(() => { + this.editFlag = !this.editFlag + }).margin({ top: 5, left: 20 }) + }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/list.gif) + +``` +@Entry +@Component +struct DragListExample { + @State number1: string[] = ['0', '1', '2'] + @State number2: string[] = ['one', 'two', 'three'] + @State text: string = '' + @State bool1: boolean = false + @State bool2: boolean = false + + @Builder pixelMapBuilder() { + Text('-1') + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF) + } + + build() { + Column() { + List() { + ForEach(this.number1, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xF666FF) + } + }, item => item) + } + .editMode(true) + .width('90%').divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) + .onItemDelete((index: number) => { + console.info(this.Number1[index] + 'Delete') + this.Number1.splice(index, 1) + console.info(JSON.stringify(this.Number1)) + return true + }) + .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { + this.bool1 = true + this.text = this.number1[itemIndex] + console.log("List1 onItemDragStart, itemIndex:" + itemIndex + ", ItemDragInfo:"+`${JSON.stringify(event)}`) + return this.pixelMapBuilder + }) + .onItemDragEnter((event: ItemDragInfo) => { + console.log("List1 onItemDragEnter") + }) + .onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => { + console.log("List1 onItemDragMove, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex) + }) + .onItemDragLeave((event: ItemDragInfo, itemIndex: number) => { + console.log("List1 onItemDragLeave, itemIndex:" + itemIndex) + }) + .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { + if (isSuccess) { + if (this.bool2) { + this.number2.splice(itemIndex, 1) + this.number1.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } else if (this.bool1) { + this.number1.splice(itemIndex, 1) + this.number1.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } + } + console.log("List1 onItemDrop, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex + ", isSuccess:" + isSuccess) + }) + Divider().strokeWidth(5).color(0x2788D9).lineCap(LineCapStyle.Round).margin(20) + List() { + ForEach(this.Number2, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFF888) + } + }, item => item) + } + .edgeEffect(EdgeEffect.None) + .width('90%') + .editMode(true) + .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) + .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { + this.bool2 = true + this.text = this.number2[itemIndex] + console.log("List2 onItemDragStart, itemIndex:" + itemIndex) + return this.pixelMapBuilder + }) + .onItemDragEnter((event: ItemDragInfo) => { + console.log("List2 onItemDragEnter") + }) + .onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => { + console.log("List2 onItemDragMove, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex) + }) + .onItemDragLeave((event: ItemDragInfo, itemIndex: number) => { + console.log("List2 onItemDragLeave, itemIndex:" + itemIndex) + }) + .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { + if (isSuccess) { + if (this.bool1) { + this.number1.splice(itemIndex, 1) + this.number2.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } else if (this.bool2) { + this.number2.splice(itemIndex, 1) + this.number2.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } + } + console.log("List2 onItemDrop, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex + ", isSuccess:" + isSuccess) + }) + }.width('100%').height('100%').backgroundColor(0xE600000).padding({ top: 25 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF-4.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" similarity index 49% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" index 41e84f7648adc656d4c813d769504344c0dbb54d..e1c2d7c8f50c55de85c800eb0429498962ad7180 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/11.ListItem.md" @@ -1,6 +1,6 @@ --- title: ListItem -permalink: /pages/000b010102020a +permalink: /pages/010c020201030b navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# ListItem +# ListItem + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 用来展示列表具体item,宽度默认充满List组件,必须配合List来使用。 @@ -29,33 +32,32 @@ ListItem\(\) ## 属性 - -

名称

+ - - - - - - - - - - - @@ -63,21 +65,20 @@ ListItem\(\) - Sticky枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

sticky

+

sticky

Sticky

+

Sticky

None

+

None

设置ListItem吸顶效果,参见Sticky枚举描述。

+

设置ListItem吸顶效果,参见Sticky枚举描述。

editable

+

editable

boolean

+

boolean

false

+

false

声明当前ListItem元素是否可编辑,进入编辑模式后可删除。

+

声明当前ListItem元素是否可编辑,进入编辑模式后可删除。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" similarity index 45% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" index 9d3299f5fbd3e26f5860064117ffa649ce3d429b..2dc0874974208b99003439504d2ccbce44c24af4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/12.Navigator.md" @@ -1,6 +1,6 @@ --- title: Navigator -permalink: /pages/000b010102020b +permalink: /pages/010c020201030c navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Navigator +# Navigator + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 路由容器组件,提供路由跳转能力。 @@ -31,39 +34,38 @@ Navigator\(value?: \{target: string, type?: NavigationType\}\) - 参数 - -

名称

描述

+

描述

None

+

None

无吸顶效果。

+

无吸顶效果。

Normal

+

Normal

当前item吸顶,滑动消失。

+

当前item吸顶,滑动消失。

参数名

+ - - - - - - - - - - - - - - @@ -72,25 +74,25 @@ Navigator\(value?: \{target: string, type?: NavigationType\}\) - NavigationType枚举说明 -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

target

+

target

string

+

string

+

-

+

-

指定跳转目标页面的路径。

+

指定跳转目标页面的路径。

type

+

type

NavigationType

+

NavigationType

+

Push

+

Push

指定路由方式。

+

指定路由方式。

名称

+ - - - - - - - @@ -99,33 +101,32 @@ Navigator\(value?: \{target: string, type?: NavigationType\}\) ## 属性 - -

名称

描述

+

描述

Push

+

Push

跳转到应用内的指定页面。

+

跳转到应用内的指定页面。

Replace

+

Replace

用应用内的某个页面替换当前页面,并销毁被替换的页面。

+

用应用内的某个页面替换当前页面,并销毁被替换的页面。

Back

+

Back

返回上一页面或指定的页面。

+

返回上一页面或指定的页面。

名称

+ - - - - - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Navigation.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Navigation.md" new file mode 100644 index 0000000000000000000000000000000000000000..c9e09ff21b4b79c4b923b77dc718b853638931d0 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Navigation.md" @@ -0,0 +1,427 @@ +--- +title: Navigation +permalink: /pages/010c020201030d +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:54 +--- +# Navigation + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +Navigation组件一般作为Page页面的根容器,通过属性设置来展示页面的标题、工具栏、菜单。 + +## 权限列表 + +无 + +## 子组件 + +可以包含子组件。 + +## 接口 + +Navigation\(\) + +创建可以根据属性设置,自动展示导航栏、标题、工具栏的组件。 + +## 属性 + +

名称

参数

+

参数

默认值

+

默认值

描述

+

描述

active

+

active

boolean

+

boolean

-

+

-

当前路由组件是否处于激活状态,处于激活状态时,会生效相应的路由操作。

+

当前路由组件是否处于激活状态,处于激活状态时,会生效相应的路由操作。

params

+

params

Object

+

Object

undefined

+

undefined

跳转时要同时传递到目标页面的数据,可在目标页面使用router.getParams()获得。

+

跳转时要同时传递到目标页面的数据,可在目标页面使用router.getParams()获得。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

title

+

string | CustomBuilder

+

-

+

页面标题。

+

subtitle

+

string

+

-

+

页面副标题。

+

menus

+

Array<NavigationMenuItem> | CustomBuilder

+

-

+

页面右上角菜单。

+

+

titleMode

+

NavigationTitleMode

+

NavigationTitleMode.Free

+

页面标题栏显示模式。

+

toolBar

+

{

+

items:[

+

Object

+

] }

+

| CustomBuilder

+

+

-

+

设置工具栏内容。

+

items: 工具栏所有项。

+

hideToolBar

+

boolean

+

false

+

设置隐藏/显示工具栏:

+

true: 隐藏工具栏。

+

false: 显示工具栏。

+

hideTitleBar

+

boolean

+

false

+

隐藏标题栏。

+

hideBackButton

+

boolean

+

false

+

隐藏返回键。

+
+ +- NavigationMenuItem类型接口说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

必填

+

默认值

+

描述

+

value

+

string

+

+

-

+

菜单栏单个选项的显示文本。

+

icon

+

string

+

+

-

+

菜单栏单个选项的图标资源路径。

+

action

+

() => void

+

+

-

+

当前选项被选中的事件回调。

+
+ + +- Object类型接口说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

必填

+

默认值

+

描述

+

value

+

string

+

+

-

+

工具栏单个选项的显示文本。

+

icon

+

string

+

+

-

+

工具栏单个选项的图标资源路径。

+

action

+

() => void

+

+

-

+

当前选项被选中的事件回调。

+
+ +- NavigationTitleMode枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Free

+

当内容为可滚动组件时,标题随着内容向上滚动而缩小(子标题的大小不变、淡出)。向下滚动内容到顶时则恢复原样。

+

Mini

+

固定为小标题模式(图标+主副标题)。

+

Full

+

固定为大标题模式(主副标题)。

+
+ + >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** + >目前可滚动组件只支持List。 + + +## 事件 + + + + + + + + + +

名称

+

功能描述

+

onTitleModeChanged(callback: (titleMode: NavigationTitleMode) => void)

+

当titleMode为NavigationTitleMode.Free时,随着可滚动组件的滑动标题栏模式发生变化时触发此回调。

+
+ +## 示例 + +``` +/ Example 01 +@Entry +@Component +struct NavigationExample { + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + @State hideBar: boolean = true + + @Builder NavigationTitle() { + Column() { + Text('title') + .width(80) + .height(60) + .fontColor(Color.Blue) + .fontSize(30) + } + .onClick(() => { + console.log("title") + }) + } + + @Builder NavigationMenus() { + Row() { + Image('images/add.png') + .width(25) + .height(25) + Image('comment/more.png') + .width(25) + .height(25) + .margin({ left: 30 }) + }.width(100) + } + + build() { + Column() { + Navigation() { + Search({ value: '', placeholder: "" }).width('85%').margin(26) + List({ space: 5, initialIndex: 0 }) { + ForEach(this.arr, (item) => { + ListItem() { + Text('' + item) + .width('90%') + .height(80) + .backgroundColor('#3366CC') + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + }.editable(true) + }, item => item) + } + .listDirection(Axis.Vertical) + .height(300) + .margin({ top: 10, left: 18 }) + .width('100%') + + Button(this.hideBar ? "tool bar" : "hide bar") + .onClick(() => { + this.hideBar = !this.hideBar + }) + .margin({ left: 135, top: 60 }) + } + .title(this.NavigationTitle) + .subTitle('subtitle') + .menus(this.NavigationMenus) + .titleMode(NavigationTitleMode.Free) + .hideTitleBar(false) + .hideBackButton(false) + .onTitleModeChanged((titleModel: NavigationTitleMode) => { + console.log('titleMode') + }) + .toolBar({ items: [ + { value: 'app', icon: 'images/grid.svg', action: () => { + console.log("app") + } }, + { value: 'add', icon: 'images/add.svg', action: () => { + console.log("add") + } }, + { value: 'collect', icon: 'images/collect.svg', action: () => { + console.log("collect") + } }] }) + .hideToolBar(this.hideBar) + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/66666.gif) + +``` +// Example 02 +@Entry +@Component +struct ToolbarBuilderExample { + @State currentIndex: number = 0 + @State Build: Array = [ + { + icon: $r('app.media.ic_public_add'), + icon_after: $r('app.media.ic_public_addcolor'), + text: 'add', + num: 0 + }, + { + icon: $r('app.media.ic_public_app'), + icon_after: $r('app.media.ic_public_appcolor'), + text: 'app', + num: 1 + }, + { + icon: $r('app.media.ic_public_collect'), + icon_after: $r('app.media.ic_public_collectcolor'), + text: 'collect', + num: 2 + } + ] + + @Builder NavigationToolbar() { + Row() { + ForEach(this.Build, item => { + Column() { + Image(this.currentIndex == item.num ? item.icon_after : item.icon) + .width(25) + .height(25) + Text(item.text) + .fontColor(this.currentIndex == item.num ? "#ff7500" : "#000000") + } + .onClick(() => { + this.currentIndex = item.num + }) + .margin({ left: 70 }) + }) + } + } + + build() { + Column() { + Navigation() { + Flex() { + } + } + .toolBar(this.NavigationToolbar) + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/duande.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Panel.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Panel.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Panel.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Panel.md" index a784ae9d16c3a970b588a880a6ab5906bee2219d..743c685ba267f31efe9eff517231dd3375fb4c1b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/13.Panel.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Panel.md" @@ -1,6 +1,6 @@ --- title: Panel -permalink: /pages/000b010102020c +permalink: /pages/010c020201030e navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Panel +# Panel + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 可滑动面板。提供一种轻量的内容展示的窗口,可方便的在不同尺寸中切换,属于弹出式组件。 @@ -29,28 +32,27 @@ Panel\(value:\{show:boolean\}\) - 参数 - -

参数名

+ - - - - - - - - - @@ -59,69 +61,68 @@ Panel\(value:\{show:boolean\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

show

+

show

boolean

+

boolean

+

-

+

-

控制Panel显示或隐藏。

+

控制Panel显示或隐藏。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -129,26 +130,25 @@ Panel\(value:\{show:boolean\}\) - PanelType枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

type

+

type

PanelType

+

PanelType

Foldable

+

Foldable

设置可滑动面板的类型。

+

设置可滑动面板的类型。

mode

+

mode

PanelMode

+

PanelMode

-

+

-

设置可滑动面板的初始状态。

+

设置可滑动面板的初始状态。

dragBar

+

dragBar

boolean

+

boolean

true

+

true

设置是否存在dragbar,true表示存在,false表示不存在。

+

设置是否存在dragbar,true表示存在,false表示不存在。

fullHeight

+

fullHeight

Length

+

Length

-

+

-

指定PanelMode.Full状态下的高度。

+

指定PanelMode.Full状态下的高度。

halfHeight

+

halfHeight

Length

+

Length

-

+

-

指定PanelMode.Half状态下的高度,默认为屏幕尺寸的一半。

+

指定PanelMode.Half状态下的高度,默认为屏幕尺寸的一半。

miniHeight

+

miniHeight

Length

+

Length

-

+

-

指定PanelMode.Mini状态下的高度。

+

指定PanelMode.Mini状态下的高度。

名称

+ - - - - - - - @@ -157,26 +157,25 @@ Panel\(value:\{show:boolean\}\) - PanelMode枚举说明 - -

名称

描述

+

描述

Minibar

+

Minibar

提供minibar和类全屏展示切换效果。

+

提供minibar和类全屏展示切换效果。

Foldable

+

Foldable

内容永久展示类,提供大(类全屏)、中(类半屏)、小三种尺寸展示切换效果。

+

内容永久展示类,提供大(类全屏)、中(类半屏)、小三种尺寸展示切换效果。

Temporary

+

Temporary

内容临时展示区,提供大(类全屏)、中(类半屏)两种尺寸展示切换效果。

+

内容临时展示区,提供大(类全屏)、中(类半屏)两种尺寸展示切换效果。

名称

+ - - - - - - - @@ -185,16 +184,15 @@ Panel\(value:\{show:boolean\}\) ## 事件 - -

名称

描述

+

描述

Mini

+

Mini

类型为minibar和foldable时,为最小状态;类型为temporary,则不生效。

+

类型为minibar和foldable时,为最小状态;类型为temporary,则不生效。

Half

+

Half

类型为foldable和temporary时,为类半屏状态;类型为minibar,则不生效。

+

类型为foldable和temporary时,为类半屏状态;类型为minibar,则不生效。

Full

+

Full

类全屏状态。

+

类全屏状态。

名称

+ - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Row.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.Row.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Row.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.Row.md" index 9b28da2e002b38b25b5852353ce6b8592f9e008d..26985f1dea97e18c32885dff184b6ef79758e086 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/14.Row.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.Row.md" @@ -1,6 +1,6 @@ --- title: Row -permalink: /pages/000b010102020d +permalink: /pages/010c020201030f navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# Row +# Row + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 沿水平方向布局容器。 @@ -25,32 +28,31 @@ date: 2021-12-30 18:31:40 ## 接口 -Row\(options?: \{ space?: Length \}\) +Row\(value:\{space?: Length\}\) - 参数 - -

名称

功能描述

+

功能描述

onChange(callback: (width: number, height: number, mode: PanelMode) => void)

+

onChange(callback: (width: number, height: number, mode: PanelMode) => void)

当可滑动面板发生状态变化时触发, 返回的height值为内容区高度值,当dragbar属性为true时,panel本身的高度值为dragbar高度加上内容区高度。

+

当可滑动面板发生状态变化时触发, 返回的height值为内容区高度值,当dragbar属性为true时,panel本身的高度值为dragbar高度加上内容区高度。

参数名

+ - - - - - - - - - @@ -59,24 +61,33 @@ Row\(options?: \{ space?: Length \}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

space

+

space

Length

+

Length

+

0

+

0

横向布局元素间距。

+

横向布局元素间距。

名称

+ - - - - + + + + + + - - - @@ -85,25 +96,25 @@ Row\(options?: \{ space?: Length \}\) - VerticalAlign枚举说明 -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

alignItems

+

alignItems

+

VerticalAlign

+

Center

+

在垂直方向上子组件的对齐格式。

+

justifyContent8+

VerticalAlign

+

FlexAlign

Center

+

Start

在垂直方向上子组件的对齐格式。

+

设置子组件在水平方向上的对齐格式。

名称

+ - - - - - - - @@ -119,26 +130,38 @@ struct RowExample { build() { Column({ space: 5 }) { Text('space').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row({ space: 20 }) { - Row().width(150).height(50).backgroundColor(0xAFEEEE) - Row().width(150).height(50).backgroundColor(0x00FFFF) - }.width(321).height(52).border({ width: 1 }) - - Text('alignItems(Bottom)').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row() { - Row().width('50%').height(50).backgroundColor(0xAFEEEE) - Row().width('50%').height(50).backgroundColor(0x00FFFF) - }.alignItems(VerticalAlign.Bottom).width('90%').height(100).border({ width: 1 }) - - Text('alignItems(Top)').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row() { - Row().width('50%').height(50).backgroundColor(0xAFEEEE) - Row().width('50%').height(50).backgroundColor(0x00FFFF) - }.alignItems(VerticalAlign.Top).width('90%').height(100).border({ width: 1 }) + Row({ space: 5 }) { + Row().width('30%').height(50).backgroundColor(0xAFEEEE) + Row().width('30%').height(50).backgroundColor(0x00FFFF) + }.width('90%').height(107).border({ width: 1 }) + + Text('alignItems(Top)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Row() { + Row().width('30%').height(50).backgroundColor(0xAFEEEE) + Row().width('30%').height(50).backgroundColor(0x00FFFF) + }.alignItems(VerticalAlign.Top).height('15%').border({ width: 1 }) + + Text('alignItems(Center)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Row() { + Row().width('30%').height(50).backgroundColor(0xAFEEEE) + Row().width('30%').height(50).backgroundColor(0x00FFFF) + }.alignItems(VerticalAlign.Center).height('15%').border({ width: 1 }) + + Text('justifyContent(End)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Row() { + Row().width('30%').height(50).backgroundColor(0xAFEEEE) + Row().width('30%').height(50).backgroundColor(0x00FFFF) + }.width('90%').border({ width: 1 }).justifyContent(FlexAlign.End) + + Text('justifyContent(Center)').fontSize(9).fontColor(0xCCCCCC).width('90%') + Row() { + Row().width('30%').height(50).backgroundColor(0xAFEEEE) + Row().width('30%').height(50).backgroundColor(0x00FFFF) + }.width('90%').border({ width: 1 }).justifyContent(FlexAlign.Center) }.width('100%') } } ``` -![](/images/application-dev/reference/arkui-ts/figures/row.png) +![](/images/application-dev/reference/arkui-ts/figures/Row.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.RowSplit.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.RowSplit.md" similarity index 62% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.RowSplit.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.RowSplit.md" index e9706cd11e4df70fea06acd83ec529c72e85373f..1c0670c0607884e30b0a7f589b7aa0226486970f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/15.RowSplit.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.RowSplit.md" @@ -1,6 +1,6 @@ --- title: RowSplit -permalink: /pages/000b010102020e +permalink: /pages/010c0202010310 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:54 --- -# RowSplit +# RowSplit + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 将子组件横向布局,并在每个子组件之间插入一根纵向的分割线。 +## 权限列表 + +无 + ## 子组件 可以包含子组件 @@ -25,20 +32,19 @@ RowSplit\(\) ## 属性 - -

名称

描述

+

描述

Top

+

Top

顶部对齐。

+

顶部对齐。

Center

+

Center

居中对齐,默认对齐方式。

+

居中对齐,默认对齐方式。

Bottom

+

Bottom

底部对齐。

+

底部对齐。

名称

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.Scroll.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Scroll.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.Scroll.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Scroll.md" index 95c9ca5f0dc7120192dbd34c9f5866377b5e3991..c5c5208227629fc3a3fde76b3176a604561b24f4 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/16.Scroll.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Scroll.md" @@ -1,6 +1,6 @@ --- title: Scroll -permalink: /pages/000b010102020f +permalink: /pages/010c0202010311 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Scroll +# Scroll + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 可滚动的容器组件,当子组件的布局尺寸超过父组件的视口时,内容可以滚动。 @@ -29,51 +32,50 @@ Scroll\(scroller?: Scroller\) ## 属性 - -

名称

参数类型

+

参数类型

描述

+

描述

resizeable

+

resizeable

boolean

+

boolean

分割线是否可拖拽,默认为false。

+

分割线是否可拖拽,默认为false。

名称

+ - - - - - - - - - - - - - - - - - - - @@ -81,26 +83,25 @@ Scroll\(scroller?: Scroller\) - ScrollDirection枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

scrollable

+

scrollable

ScrollDirection

+

ScrollDirection

Vertical

+

Vertical

设置滚动方法。

+

设置滚动方法。

scrollBar

+

scrollBar

BarState

+

BarState

Auto

+

Auto

设置滚动条状态。

+

设置滚动条状态。

scrollBarColor

+

scrollBarColor

Color

+

Color

-

+

-

设置滚动条的颜色。

+

设置滚动条的颜色。

scrollBarWidth

+

scrollBarWidth

Length

+

Length

-

+

-

设置滚动条的宽度。

+

设置滚动条的宽度。

名称

+ - - - - - - - @@ -111,7 +112,7 @@ Scroll\(scroller?: Scroller\) 可滚动容器组件的控制器,可以将此组件绑定至容器组件,然后通过它控制容器组件的滚动,目前支持绑定到List和Scroll组件上。 -### 导入对象 +### 创建对象 ``` scroller: Scroller = new Scroller() @@ -125,53 +126,53 @@ scrollTo\(value: \{ xOffset: number | string, yOffset: number | string, animatio - 参数 - -

名称

描述

+

描述

Horizontal

+

Horizontal

仅支持水平方向滚动。

+

仅支持水平方向滚动。

Vertical

+

Vertical

仅支持竖直方向滚动。

+

仅支持竖直方向滚动。

None

+

None

不可滚动。

+

不可滚动。

参数名

+ - - - - - - - - - - - - - - - + - - - - @@ -186,28 +187,28 @@ scrollEdge\(value: Edge\): void - 参数 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

xOffset

+

xOffset

Length

+

Length

+

-

+

-

水平滑动偏移。

+

水平滑动偏移。

yOffset

+

yOffset

Length

+

Length

+

-

+

-

竖直滑动偏移。

+

竖直滑动偏移。

animation

+

animation

+

{

+

duration: number,

+

curve: Curve | CubicBezier | SpringCurve

+

}

{

-

duration: number,

-

curve: Curve | CubicBezier | SpringCurve

-

}

+

+

-

  

动画配置:

-
  • duration: 滚动时长设置。
  • curve: 滚动曲线设置。
+

动画配置:

+
  • duration: 滚动时长设置。
  • curve: 滚动曲线设置。

参数名

+ - - - - - - - - + -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

Edge

+

Edge

+

-

+

-

+

滚动到的边缘位置。

 
@@ -215,32 +216,33 @@ scrollEdge\(value: Edge\): void ### scroller.scrollPage -scrollPage\(value: \{ next: boolean, direction?: Axis \}\): void +scrollPage\(value: \{ next: boolean \}\): void + +滚动到下一页或者上一页。 - 参数 - -

参数名

+ - - - - - - - - - @@ -255,20 +257,19 @@ scroller.currentOffset\(\): Object - 返回值 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

next

+

next

boolean

+

boolean

+

-

+

-

是否向下翻页。

+

是否向下翻页。true表示向下翻页,false表示向上翻页。

类型

+ - - - @@ -286,28 +287,27 @@ scroller.scrollToIndex\(value: number\): void - 参数 - -

类型

描述

+

描述

{

-

xOffset: number,

-

yOffset: number

-

}

+

{

+

xOffset: number,

+

yOffset: number

+

}

xOffset: 水平滑动偏移;

-

yOffset: 竖直滑动偏移。

+

xOffset: 水平滑动偏移;

+

yOffset: 竖直滑动偏移。

参数名

+ - - - - - - - - - @@ -316,26 +316,25 @@ scroller.scrollToIndex\(value: number\): void ## 事件 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

value

+

value

number

+

number

+

-

+

-

要滑动到的列表项在列表中的索引值。

+

要滑动到的列表项在列表中的索引值。

名称

+ - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.ScrollBar.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.ScrollBar.md" new file mode 100644 index 0000000000000000000000000000000000000000..d8f3142852e5ca947c1a15fa8c3d637c752d2338 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.ScrollBar.md" @@ -0,0 +1,179 @@ +--- +title: ScrollBar +permalink: /pages/010c0202010312 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# ScrollBar + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +滚动条组件ScrollBar,用于配合可滚动组件使用,如List、Grid、Scroll。 + +## 权限列表 + +无 + +## 子组件 + +可以包含单个子组件。 + +## 接口 + +ScrollBar\(value: ScrollBarOption\) + +- ScrollBarOption的参数描述 + +

名称

功能描述

+

功能描述

onScroll(xOffset: number, yOffset: number) => void

+

onScroll(xOffset: number, yOffset: number) => void

滚动事件回调, 返回滚动时水平、竖直方向偏移量。

+

滚动事件回调, 返回滚动时水平、竖直方向偏移量。

onScrollEdge(side: Edge) => void

+

onScrollEdge(side: Edge) => void

滚动到边缘事件回调。

+

滚动到边缘事件回调。

onScrollEnd() => void

+

onScrollEnd() => void

滚动已经停止。

+

滚动停止事件回调。

+ + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

scroller

+

Scroller

+

+

-

+

可滚动组件的控制器。用于与可滚动组件进行绑定。

+

direction

+

ScrollBarDirection

+

+

ScrollBarDirection.Vertical

+

滚动条的方向,控制可滚动组件对应方向的滚动。

+

state

+

BarState

+

+

BarState.Auto

+

滚动条状态。

+
+ + >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** + >ScrollBar组件负责定义可滚动区域的行为样式,ScrollBar的子节点负责定义滚动条的行为样式。 + >滚动条组件与可滚动组件通过Scroller进行绑定,且只有当两者方向相同时,才能联动,ScrollBar与可滚动组件仅支持一对一绑定。 + +- ScrollBarDirection枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Vertical

+

纵向滚动条。

+

Horizontal

+

横向滚动条。

+
+ +- BarState枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

On

+

常驻显示。

+

Off

+

不显示。

+

Auto

+

按需显示(触摸时显示,无操作2s后消失)。

+
+ + +## 示例 + +``` +@Entry +@Component +struct ScrollBarExample { + private scroller: Scroller = new Scroller() + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + build() { + Column() { + Stack({ alignContent: Alignment.End }) { + Scroll(this.scroller) { + Flex({ direction: FlexDirection.Column }) { + ForEach(this.arr, (item) => { + Row() { + Text(item.toString()) + .width('90%') + .height(100) + .backgroundColor('#3366CC') + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + .margin({ top: 5 }) + } + }, item => item) + }.margin({ left: 52 }) + } + .scrollBar(BarState.Off) + .scrollable(ScrollDirection.Vertical) + ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) { + Text() + .width(30) + .height(100) + .borderRadius(10) + .backgroundColor('#C0C0C0') + }.width(30).backgroundColor('#ededed') + } + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/F.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Stack.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Stack.md" similarity index 49% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Stack.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Stack.md" index f7989c1f891a271918588e18fe3ceca96b70ff52..55c437ade2b868297b876d03d1da4d37333aab75 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/17.Stack.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Stack.md" @@ -1,6 +1,6 @@ --- title: Stack -permalink: /pages/000b0101020210 +permalink: /pages/010c0202010313 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Stack +# Stack + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。 @@ -25,32 +28,31 @@ date: 2021-12-30 18:31:40 ## 接口 -Stack\(options?: \{ alignContent?: Alignment \}\) +Stack\(value:\{alignContent?: Alignment\}\) - 参数 - -

参数名

+ - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.Swiper.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.Swiper.md" similarity index 30% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.Swiper.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.Swiper.md" index 9119b4888512bd51f9a51881e82bea8863cec309..932da4732483c51892ba6adaeab1bf4540c86271 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/18.Swiper.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.Swiper.md" @@ -1,6 +1,6 @@ --- title: Swiper -permalink: /pages/000b0101020211 +permalink: /pages/010c0202010314 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Swiper +# Swiper + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 滑动容器,提供切换子组件显示的能力。 @@ -29,28 +32,27 @@ Swiper\(value:\{controller?: SwiperController\}\) - 参数 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

alignContent

+

alignContent

Alignment

+

Alignment

+

Center

+

Center

设置子组件在容器内的对齐方式。

+

设置子组件在容器内的对齐方式。

参数名

+ - - - - - - - - - @@ -59,87 +61,104 @@ Swiper\(value:\{controller?: SwiperController\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

controller

+

controller

SwiperController

+

SwiperController

+

null

+

null

给组件绑定一个控制器,用来控制组件翻页。

+

给组件绑定一个控制器,用来控制组件翻页。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + @@ -149,21 +168,20 @@ Swiper\(value:\{controller?: SwiperController\}\) Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,然后通过它控制翻页。 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

index

+

index

number

+

number

0

+

0

设置当前在容器中显示的子组件的索引值。

+

设置当前在容器中显示的子组件的索引值。

autoPlay

+

autoPlay

boolean

+

boolean

false

+

false

子组件是否自动播放,自动播放状态下,导航点不可操作。

+

子组件是否自动播放,自动播放状态下,导航点不可操作。

interval

+

interval

number

+

number

3000

+

3000

使用自动播放时播放的时间间隔,单位为毫秒。

+

使用自动播放时播放的时间间隔,单位为毫秒。

indicator

+

indicator

boolean

+

boolean

true

+

true

是否启用导航点指示器。

+

是否启用导航点指示器。

loop

+

loop

boolean

+

boolean

true

+

true

是否开启循环。

+

是否开启循环。

duration

+

duration

number

+

number

400

+

400

子组件切换的动画时长,单位为毫秒。

+

子组件切换的动画时长,单位为毫秒。

vertical

+

vertical

boolean

+

boolean

false

+

false

是否为纵向滑动。

+

是否为纵向滑动。

itemSpace

+

itemSpace

Length

+

Length

0

+

0

设置子组件与子组件之间间隙。

+

设置子组件与子组件之间间隙。

+

cachedCount8+

+

number

+

1

+

设置预加载子组件个数。

+

disableSwipe8+

+

boolean

+

false

+

禁用组件滑动切换功能。

接口名称

+ - - - - - @@ -171,16 +189,15 @@ Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,然 ## 事件 - -

接口名称

功能描述

+

功能描述

showNext():void;

+

showNext():void;

翻至下一页。

+

翻至下一页。

showPrevious():void;

+

showPrevious():void;

翻至上一页。

+

翻至上一页。

名称

+ - - - @@ -189,20 +206,52 @@ Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,然 ## 示例 ``` +class MyDataSource implements IDataSource { + private list: number[] = [] + private listener: DataChangeListener + + constructor(list: number[]) { + this.list = list + } + + totalCount(): number { + return this.list.length + } + + getData(index: number): any { + return this.list[index] + } + + registerDataChangeListener(listener: DataChangeListener): void { + this.listener = listener + } + + unregisterDataChangeListener() { + } +} + @Entry @Component struct SwiperExample { private swiperController: SwiperController = new SwiperController() + private data: MyDataSource = new MyDataSource([]) + + private aboutToAppear(): void { + let list = [] + for (var i = 1; i <= 10; i++) { + list.push(i.toString()); + } + this.data = new MyDataSource(list) + } build() { Column({ space: 5 }) { Swiper(this.swiperController) { - Text('1').width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) - Text('2').width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) - Text('3').width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) - Text('4').width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) - Text('5').width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) + LazyForEach(this.data, (item: string) => { + Text(item).width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(20) + }, item => item) } + .cachedCount(2) .index(1) .autoPlay(true) .interval(4000) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Tabs.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/21.Tabs.md" similarity index 34% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Tabs.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/21.Tabs.md" index d20cfdc501e689b007046d9600a552193ead30ad..3e8958cdbab793603efddee8ec129dccb94ddf4f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/19.Tabs.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/21.Tabs.md" @@ -1,6 +1,6 @@ --- title: Tabs -permalink: /pages/000b0101020212 +permalink: /pages/010c0202010315 navbar: true sidebar: true prev: true @@ -9,32 +9,34 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Tabs +# Tabs + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 一种可以通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。 ## 支持设备 - -

名称

功能描述

+

功能描述

onChange( index: number) => void

+

onChange( index: number) => void

当前显示的组件索引变化时触发该事件。

+

当前显示的组件索引变化时触发该事件。

手机

+ - - - - - - - @@ -46,7 +48,7 @@ date: 2021-12-30 18:31:40 ## 子组件 -包含子组件[TabContent](/pages/000b0101020213)。 +包含子组件[TabContent](/pages/010c0202010316)。 ## 接口说明 @@ -54,49 +56,48 @@ Tabs\(value: \{barPosition?: BarPosition, index?: number, controller?: [TabsCon - 参数 - -

手机

平板

+

平板

智慧屏

+

智慧屏

智能穿戴

+

智能穿戴

支持

+

支持

支持

+

支持

不支持

+

不支持

不支持

+

不支持

参数名

+ - - - - - - - - - - - - - - - - - - @@ -104,21 +105,20 @@ Tabs\(value: \{barPosition?: BarPosition, index?: number, controller?: [TabsCon - BarPosition枚举说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

barPosition

+

barPosition

BarPosition

+

BarPosition

+

Start

+

Start

指定页签位置来创建Tabs容器组件。

+

指定页签位置来创建Tabs容器组件。

index

+

index

number

+

number

+

0

+

0

指定初次初始页签索引。

+

指定初次初始页签索引。

controller

+

controller

TabsController

+

TabsController

+

  

设置Tabs控制器。

+

设置Tabs控制器。

名称

+ - - - - - @@ -129,16 +129,15 @@ Tabs\(value: \{barPosition?: BarPosition, index?: number, controller?: [TabsCon Tabs组件的控制器,用于控制Tabs组件进行页签切换。 - -

名称

描述

+

描述

Start

+

Start

vertical属性方法设置为true时,页签位于容器左侧;vertical属性方法设置为false时,页签位于容器顶部。

+

vertical属性方法设置为true时,页签位于容器左侧;vertical属性方法设置为false时,页签位于容器顶部。

End

+

End

vertical属性方法设置为true时,页签位于容器右侧;vertical属性方法设置为false时,页签位于容器底部。

+

vertical属性方法设置为true时,页签位于容器右侧;vertical属性方法设置为false时,页签位于容器底部。

接口名称

+ - - - @@ -146,69 +145,70 @@ Tabs组件的控制器,用于控制Tabs组件进行页签切换。 ## 属性 - -

接口名称

功能描述

+

功能描述

changeIndex(value: number): void

+

changeIndex(value: number): void

控制Tabs切换到指定页签,index: 页签在Tabs里的索引值,索引值从0开始。

+

控制Tabs切换到指定页签,index: 页签在Tabs里的索引值,索引值从0开始。

名称

+不支持触摸热区设置。 + + - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -216,21 +216,20 @@ Tabs组件的控制器,用于控制Tabs组件进行页签切换。 - BarMode枚举说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

vertical

+

vertical

boolean

+

boolean

是否为纵向Tab,默认为false。

+

是否为纵向Tab,默认为false。

是否为纵向Tab,默认为false。

+

是否为纵向Tab,默认为false。

scrollable

+

scrollable

boolean

+

boolean

是否可以通过左右滑动进行页面切换,默认为true。

+

是否可以通过左右滑动进行页面切换,默认为true。

是否可以通过左右滑动进行页面切换,默认为true。

+

是否可以通过左右滑动进行页面切换,默认为true。

barMode

+

barMode

BarMode

+

BarMode

TabBar布局模式。

+

TabBar布局模式。

TabBar布局模式。

+

TabBar布局模式。

barWidth

+

barWidth

number

+

number

TabBar的宽度值,不设置时使用系统主题中的默认值。

+

TabBar的宽度值,不设置时使用系统主题中的默认值。

TabBar的宽度值,不设置时使用系统主题中的默认值。

+

TabBar的宽度值,不设置时使用系统主题中的默认值。

barHeight

+

barHeight

number

+

number

TabBar的高度值,不设置时使用系统主题中的默认值。

+

TabBar的高度值,不设置时使用系统主题中的默认值。

TabBar的高度值,不设置时使用系统主题中的默认值

+

TabBar的高度值,不设置时使用系统主题中的默认值

animationDuration

+

animationDuration

number

+

number

200

+

200

TabContent滑动动画时长。

+

TabContent滑动动画时长。

名称

+ - - - - - @@ -239,16 +238,15 @@ Tabs组件的控制器,用于控制Tabs组件进行页签切换。 ## 事件 - -

名称

描述

+

描述

Scrollable

+

Scrollable

TabBar使用实际布局宽度, 超过总长度后可滑动。

+

TabBar使用实际布局宽度, 超过总长度后可滑动。

Fixed

+

Fixed

所有TabBar平均分配宽度。

+

所有TabBar平均分配宽度。

名称

+ - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/22.TabContent.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/22.TabContent.md" new file mode 100644 index 0000000000000000000000000000000000000000..38960dd51fe0a2de560e41ca641c61fa7a545b9a --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/22.TabContent.md" @@ -0,0 +1,192 @@ +--- +title: TabContent +permalink: /pages/010c0202010316 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# TabContent + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +仅在Tabs中使用,对应一个切换页签的内容视图。 + +## 权限列表 + +无 + +## 子组件 + +支持单个子组件。 + +## 接口 + +TabContent\(\) + +## 属性 + +不支持触摸热区设置。 + +

名称

功能描述

+

功能描述

onChange(callback: (index: number) => void)

+

onChange(callback: (index: number) => void)

Tab页签切换后触发的事件。

+

Tab页签切换后触发的事件。

+ + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

tabBar

+

string | {

+

icon?: string,

+

text?: string

+

}

+

| CustomBuilder8+

+

-

+

设置TabBar上显示内容。

+

CustomBuilder: 构造器,内部可以传入组件(API8版本以上适用)。

+
说明:

如果icon采用svg格式图源,则要求svg图源删除其自有宽高属性值。如采用带有自有宽高属性的svg图源,icon大小则是svg本身内置的宽高属性值大小。

+
+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>- TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。 +>- TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。 + +## 示例 + +``` +@Entry +@Component +struct TabContentExample { + @State fontColor: string = 'rgba(0, 0, 0, 0.4)' + @State selectedFontColor: string = 'rgba(10, 30, 255, 1)' + @State currentIndex: number = 0 + private controller: TabsController = new TabsController() + @Builder Tab1Builder() { + Column() { + Image(this.currentIndex === 0 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 0 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab1") + .fontColor(this.currentIndex === 0 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab2Builder() { + Column() { + Image(this.currentIndex === 1 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 1 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab2") + .fontColor(this.currentIndex === 1 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab3Builder() { + Column() { + Image(this.currentIndex === 3 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 3 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab3") + .fontColor(this.currentIndex === 3 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab4Builder() { + Column() { + Image(this.currentIndex === 4 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 4 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab4") + .fontColor(this.currentIndex === 4 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder AddBuilder() { + Column() { + Image(this.currentIndex === 2 ? '/resources/ic_public_add_norm_filled_selected.png' : '/resources/ic_public_add_norm_filled.png') + .width(this.currentIndex === 2 ? 26 : 24) + .height(this.currentIndex === 2 ? 26 : 24) + .opacity(this.currentIndex === 2 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + .animation({duration: 200}) + } + } + + build() { + Column() { + Tabs({ barPosition: BarPosition.End, index: 0, controller: this.controller }) { + TabContent() { + Flex({justifyContent: FlexAlign.Center})) { + Text('Tab1').fontSize(32) + } + }.tabBar(this.Tab1Builder) + + TabContent() { + Flex({justifyContent: FlexAlign.Center})) { + Text('Tab2').fontSize(32) + } + }.tabBar(this.Tab2Builder) + + TabContent() { + Flex({justifyContent: FlexAlign.Center})) { + Text('Add').fontSize(32) + } + }.tabBar(this.AddBuilder) + + TabContent() { + Flex({justifyContent: FlexAlign.Center})) { + Text('Tab3').fontSize(32) + } + }.tabBar(this.Tab3Builder) + + TabContent() { + Flex({justifyContent: FlexAlign.Center})) { + Text('Tab4').fontSize(32) + } + }.tabBar(this.Tab4Builder) + } + .vertical(false) + .barWidth(300).barHeight(56) + .onChange((index: number) => { + this.currentIndex = index + }) + .width('90%').backgroundColor('rgba(241, 243, 245, 0.95)') + }.width('100%').height(200).margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075122.gif) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/23.Stepper.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/23.Stepper.md" new file mode 100644 index 0000000000000000000000000000000000000000..bdd7b7dee01c31eadf85e19088bebd573bff49cb --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/23.Stepper.md" @@ -0,0 +1,174 @@ +--- +title: Stepper +permalink: /pages/010c0202010317 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# Stepper + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +步骤导航器。 + + +## 权限列表 + +无 + +## 子组件 + +仅能包含子组件[StepperItem](/pages/010c0202010318)。 + +## 接口 + +Stepper\(value?: \{ index?: number \}\) + +- 参数 + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

index

+

number

+

+

0

+

设置步骤导航器显示第几个StepperItem。

+
+ + +## 属性 + +无 + +## 事件 + + + + + + + + + + + + + + + +

名称

+

描述

+

onFinish(callback: () => void)

+

步骤导航器最后一个StepperItem的nextLabel被点击时触发该回调 。

+

onSkip(callback: () => void)

+

当前显示的StepperItem状态为ItemState.Skip时,nextLabel被点击时触发该回调。

+

onChange(callback: (prevIndex?: number, index?: number) => void)

+

点击左边或者右边文本按钮进行步骤切换时触发该事件。

+
  • prevIndex:切换前的步骤页索引值。
  • index:切换后的步骤页(前一页或者下一页)索引值。
+
+ +## 示例 + +``` +@Entry +@Component +struct StepperExample { + @State currentIndex: number = 0 + @State firstState: ItemState = ItemState.Normal + @State secondState: ItemState = ItemState.Normal + + build() { + Stepper({ + index: this.currentIndex + }) { + StepperItem() { + Text('Page One') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + } + .nextLabel('') + .position({x: '35%', y: 0}) + StepperItem() { + Text('Page Two') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + .onClick(()=>{ + this.firstState = this.firstState === ItemState.Skip ? ItemState.Normal : ItemState.Skip + }) + } + .nextLabel('Next') + .prevLabel('Previous') + .status(this.firstState) + .position({x: '35%', y: 0}) + StepperItem() { + Text('Page Three') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + .onClick(()=>{ + this.secondState = this.secondState === ItemState.Waiting ? ItemState.Normal : ItemState.Waiting + }) + } + .position({x: '35%', y: 0}) + .status(this.secondState) + StepperItem() { + Text('Page four') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + } + .position({x: '35%', y: 0}) + .nextLabel('Finish') + } + .onFinish(() => { + console.log('onFinish') + }) + .onSkip(() => { + console.log('onSkip') + }) + .onChange((prevIndex: number, index: number) => { + this.currentIndex = index + }) + .align(Alignment.Center) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/stepper.gif) + + + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/24.StepperItem.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/24.StepperItem.md" new file mode 100644 index 0000000000000000000000000000000000000000..bfc691cc89ce22730339611fbd74f6c45f797d71 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/24.StepperItem.md" @@ -0,0 +1,111 @@ +--- +title: StepperItem +permalink: /pages/010c0202010318 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# StepperItem + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +步骤导航器元素。 + + +## 权限列表 + +无 + +## 子组件 + +支持单个子组件。 + +## 接口 + +StepperItem\(\) + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

默认值

+

参数描述

+

prevLabel

+

string

+

-

+

当步骤导航器大于一页,除第一页默认值都为"返回"。

+

nextLabel

+

string

+

-

+

步骤导航器大于一页时,最后一页默认值为"开始",其余页默认值为"下一步"。

+

status

+

ItemState

+

ItemState.Normal

+

步骤导航器元素的状态。

+
+ +- ItemState枚举说明 + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Normal

+

正常状态,右侧文本按钮正常显示,可点击进入下一个StepperItem。

+

Disabled

+

不可用状态,右侧文本按钮灰度显示,不可点击进入下一个StepperItem。

+

Waiting

+

等待状态,右侧文本按钮不显示,使用等待进度条,不可点击进入下一个StepperItem。

+

Skip

+

跳过状态,表示跳过当前步骤, 进入下一个StepperItem。

+
+ + +## 示例 + +见[Stepper](/pages/010c0202010317)。 + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" index f3a61f8b02a3b64372cb9a7e22adac4070db511b..1c111aa3772b9448a8db320ebb3b1644fd8ea0b6 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/01.Circle.md" @@ -1,6 +1,6 @@ --- title: Circle -permalink: /pages/000b0101020300 +permalink: /pages/010c0202010401 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Circle +# Circle + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 圆形绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ Circle\(options?: \{width: Length, height: Length\}\) - 参数 - -

参数名

+ - - - - - - - - - @@ -54,39 +60,38 @@ Circle\(options?: \{width: Length, height: Length\}\) - options参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - @@ -95,39 +100,38 @@ Circle\(options?: \{width: Length, height: Length\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

参数名称

+ - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" index 98eab4bb9c3d0c74e3a7c17f7c843bc82c496dcd..d756ed44070b154df1e4d8527ec6c6e002f9938f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/02.Ellipse.md" @@ -1,6 +1,6 @@ --- title: Ellipse -permalink: /pages/000b0101020301 +permalink: /pages/010c0202010402 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Ellipse +# Ellipse + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 椭圆绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ ellipse\(options?: \{width: Lenght, height: Length\}\) - 参数 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

圆所在矩形的宽度。

+

圆所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

圆所在矩形的高度。

+

圆所在矩形的高度。

参数名

+ - - - - - - - - - @@ -54,39 +60,38 @@ ellipse\(options?: \{width: Lenght, height: Length\}\) - options参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - @@ -95,39 +100,38 @@ ellipse\(options?: \{width: Lenght, height: Length\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

参数名称

+ - - - - - - - - - - - - - - @@ -150,5 +154,5 @@ struct EllipseExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/ellipse-18.png) +![](/images/application-dev/reference/arkui-ts/figures/ellipse.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" index d9eec4c54708a0800fdd7359c0bf82ca7856507d..97bc5807f710f99d571c23d4e5051327d434a43f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/03.Line.md" @@ -1,6 +1,6 @@ --- title: Line -permalink: /pages/000b0101020302 +permalink: /pages/010c0202010403 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Line +# Line + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 直线绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ Line\(options?: \{width: Lenght, height: Length\}\) - 参数 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

椭圆所在矩形的宽度。

+

椭圆所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

椭圆所在矩形的高度。

+

椭圆所在矩形的高度。

参数名

+ - - - - - - - - - @@ -54,39 +60,38 @@ Line\(options?: \{width: Lenght, height: Length\}\) - options参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - @@ -95,61 +100,60 @@ Line\(options?: \{width: Lenght, height: Length\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" index 1311f8282a5d2d37be43b2d565ea74a29105a9b9..a2f7c6b3dc13e8864ffc694ec4c81b17eee35692 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/04.Polyline.md" @@ -1,6 +1,6 @@ --- title: Polyline -permalink: /pages/000b0101020303 +permalink: /pages/010c0202010404 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Polyline +# Polyline + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 折线绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ Polyline\(options?: \{width: Lenght, height: Length\}\) - 参数 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

直线所在矩形的宽度。

+

直线所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

直线所在矩形的高度。

+

直线所在矩形的高度。

startPoint

+

startPoint

Point

+

Point

[0, 0]

+

[0, 0]

+

直线起点坐标(相对坐标)。

+

直线起点坐标(相对坐标)。

endPoint

+

endPoint

Point

+

Point

[0, 0]

+

[0, 0]

+

直线终点坐标(相对坐标)。

+

直线终点坐标(相对坐标)。

参数名

+ - - - - - - - - - @@ -54,39 +60,38 @@ Polyline\(options?: \{width: Lenght, height: Length\}\) - options参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - @@ -95,50 +100,49 @@ Polyline\(options?: \{width: Lenght, height: Length\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

参数名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" index 1c78ca86cdb070b4db27bdadf778d2148bebc8db..a34d93c65bde7c3de3986c8e03824ef4207dfd7c 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/05.Polygon.md" @@ -1,6 +1,6 @@ --- title: Polygon -permalink: /pages/000b0101020304 +permalink: /pages/010c0202010405 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Polygon +# Polygon + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 多边形绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ Polygon\(value:\{options?: \{width: Lenght, height: Length\}\}\) - 参数 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

折线所在矩形的宽度。

+

折线所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

折线所在矩形的高度。

+

折线所在矩形的高度。

points

+

points

Array<Point>

+

Array<Point>

-

+

-

+

折线经过坐标点列表。

+

折线经过坐标点列表。

参数名

+ - - - - - - - - - @@ -54,39 +60,38 @@ Polygon\(value:\{options?: \{width: Lenght, height: Length\}\}\) - options参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - @@ -95,50 +100,49 @@ Polygon\(value:\{options?: \{width: Lenght, height: Length\}\}\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

参数名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" index 9d8944ae1fb4c843390d1fb5a0ae09a66ab5351c..655a2207a1c4e8e01ca5968f5a0529530465be27 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/06.Path.md" @@ -1,6 +1,6 @@ --- title: Path -permalink: /pages/000b0101020305 +permalink: /pages/010c0202010406 navbar: true sidebar: true prev: true @@ -9,62 +9,68 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Path +# Path + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 路径绘制组件。 +## 权限列表 + +无 + ## 子组件 无 ## 属性 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

多边形所在矩形的宽度。

+

多边形所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

多边形所在矩形的高度。

+

多边形所在矩形的高度。

points

+

points

Array<Point>

+

Array<Point>

-

+

-

+

多边形的顶点坐标列表。

+

多边形的顶点坐标列表。

参数名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" similarity index 37% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" index 2f46d3a053695de3099ea3b75663ebba01cd57bf..fadb6f4bdb7c3f727fa96101fe7f8f8fd2cf60b0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/07.Rect.md" @@ -1,6 +1,6 @@ --- title: Rect -permalink: /pages/000b0101020306 +permalink: /pages/010c0202010407 navbar: true sidebar: true prev: true @@ -9,12 +9,19 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:40 +date: 2022-02-12 09:01:55 --- -# Rect +# Rect + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 矩形绘制组件。 +## 权限列表 + +无 + ## 子组件 无 @@ -25,28 +32,27 @@ Rect\(value:\{options?: \{width: Length,height: Length,radius?: Length | Array -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

路径所在矩形的宽度。

+

路径所在矩形的宽度。

height

+

height

Length

+

Length

0

+

0

+

路径所在矩形的高度。

+

路径所在矩形的高度。

commands

+

commands

string

+

string

''

+

''

+

路径绘制的命令字符串。

+

路径绘制的命令字符串。

参数名

+ - - - - - - - - - @@ -54,72 +60,71 @@ Rect\(value:\{options?: \{width: Length,height: Length,radius?: Length | Arrayoptions参数说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

options

+

options

Object

+

Object

+

-

+

-

options参数说明

+

options参数说明

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -128,72 +133,71 @@ Rect\(value:\{options?: \{width: Length,height: Length,radius?: Length | Array - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

width

+

width

Length

+

Length

+

-

+

-

宽度。

+

宽度。

height

+

height

Length

+

Length

+

-

+

-

高度。

+

高度。

radius

+

radius

Length | Array<Length>

+

Length | Array<Length>

+

0

+

0

圆角半径,支持分别设置四个角的圆角度数。

+

圆角半径,支持分别设置四个角的圆角度数。

radiusWidth

+

radiusWidth

Length

+

Length

+

0

+

0

圆角宽度。

+

圆角宽度。

radiusHeight

+

radiusHeight

Length

+

Length

+

0

+

0

圆角高度。

+

圆角高度。

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" similarity index 42% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" index 4924474f52eed6750fb41b44345d3d5fd9e83d71..d1c6a0673c604c2b74c9b553feb992f307c2259a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/04.\347\273\230\345\210\266\347\273\204\344\273\266/08.Shape.md" @@ -1,6 +1,6 @@ --- title: Shape -permalink: /pages/000b0101020307 +permalink: /pages/010c0202010408 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:55 --- -# Shape +# Shape + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。 @@ -19,38 +22,41 @@ date: 2021-12-30 18:31:41 2、绘制组件单独使用,用于在页面上绘制指定的图形。 +## 权限列表 + +无 + ## 子组件 可以包含子组件。 ## 接口 -Shape\(target?: PixelMap\) +Shape\(value:\{target?: PixelMap\}\) - 参数 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

width

+

width

Length

+

Length

0

+

0

+

宽度。

+

宽度。

height

+

height

Length

+

Length

0

+

0

+

高度。

+

高度。

radiusWidth

+

radiusWidth

Length

+

Length

0

+

0

+

圆角的宽度,仅设置宽时宽高一致。

+

圆角的宽度,仅设置宽时宽高一致。

radiusHeight

+

radiusHeight

Length

+

Length

0

+

0

+

圆角的高度,仅设置高时宽高一致。

+

圆角的高度,仅设置高时宽高一致。

radius

+

radius

Length | Array<Length>

+

Length | Array<Length>

0

+

0

+

圆角大小。

+

圆角大小。

参数名

+ - - - - - - - - - @@ -59,143 +65,142 @@ Shape\(target?: PixelMap\) ## 属性 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

target

+

target

PixelMap

+

PixelMap

+

null

+

null

绘制目标,可将图形绘制在指定的PixelMap对象中,若未设置,则在当前绘制目标中进行绘制。

+

绘制目标,可将图形绘制在指定的PixelMap对象中,若未设置,则在当前绘制目标中进行绘制。

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -203,26 +208,25 @@ Shape\(target?: PixelMap\) - LineJoinStyle枚举说明 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

viewPort

+

viewPort

{

-

x: Length,

-

y: Length,

-

width: Length,

-

height: Length

-

}

+

{

+

x: Length,

+

y: Length,

+

width: Length,

+

height: Length

+

}

-

+

-

+

形状的视口。

+

形状的视口。

fill

+

fill

Color

+

Color

Black

+

Black

+

填充颜色。

+

填充颜色。

stroke

+

stroke

Color

+

Color

-

+

-

+

边框颜色。

+

边框颜色。

strokeDashArray

+

strokeDashArray

Array<Length>

+

Array<Length>

[]

+

[]

+

设置边框的间隙。

+

设置边框的间隙。

strokeDashOffset

+

strokeDashOffset

Length

+

Length

0

+

0

+

边框绘制起点的偏移量。

+

边框绘制起点的偏移量。

strokeLineCap

+

strokeLineCap

LineCapStyle

+

LineCapStyle

Butt

+

Butt

+

路径端点绘制样式。

+

路径端点绘制样式。

strokeLineJoin

+

strokeLineJoin

LineJoinStyle

+

LineJoinStyle

Miter

+

Miter

+

边框拐角绘制样式。

+

边框拐角绘制样式。

strokeMiterLimit

+

strokeMiterLimit

number

+

number

4

+

4

+

锐角绘制成斜角的极限值。

+

锐角绘制成斜角的极限值。

strokeOpacity

+

strokeOpacity

number

+

number

1

+

1

+

设置边框的不透明度。

+

设置边框的不透明度。

strokeWidth

+

strokeWidth

Length

+

Length

1

+

1

+

设置边框的宽度。

+

设置边框的宽度。

antiAlias

+

antiAlias

boolean

+

boolean

true

+

true

+

是否开启抗锯齿。

+

是否开启抗锯齿。

名称

+ - - - - - - - @@ -237,7 +241,7 @@ Shape\(target?: PixelMap\) struct ShapeExample { build() { Column({ space: 5 }) { - Text('basic').fontSize(9).fontColor(0xCCCCCC).width(320) + Text('basic').fontSize(30).fontColor(0xCCCCCC).width(320) // 在Shape的(-2, -2)点绘制一个 300 * 50 带边框的矩形,颜色0x317Af7,边框颜色黑色,边框宽度4,边框间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启) // 在Shape的(-2, 58)点绘制一个 300 * 50 带边框的椭圆,颜色0x317Af7,边框颜色黑色,边框宽度4,边框间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启) // 在Shape的(-2, 118)点绘制一个 300 * 10 线段,颜色0x317Af7,边框颜色黑色,宽度4,间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启) @@ -246,7 +250,7 @@ struct ShapeExample { Ellipse().width(300).height(50).offset({ x: 0, y: 60 }) Path().width(300).height(10).commands('M0 0 L900 0').offset({ x: 0, y: 120 }) } - .viewPort({ x: -2, y: -2, width: 304, height: 124 }) + .viewPort({ x: -2, y: -2, width: 304, height: 130 }) .fill(0x317Af7).stroke(Color.Black).strokeWidth(4) .strokeDashArray([20]).strokeDashOffset(10).strokeLineCap(LineCapStyle.Round) .strokeLineJoin(LineJoinStyle.Round).antiAlias(true) @@ -255,32 +259,32 @@ struct ShapeExample { Rect().width(300).height(50) }.viewPort({ x: -1, y: -1, width: 302, height: 52 }).fill(0x317Af7).stroke(Color.Black).strokeWidth(2) - Text('border').fontSize(9).fontColor(0xCCCCCC).width(320) + Text('border').fontSize(30).fontColor(0xCCCCCC).width(320).margin({top:30}) // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20 Shape() { Path().width(300).height(10).commands('M0 0 L900 0') - }.viewPort({ x: 0, y: -5, width: 300, height: 10 }).stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]) + }.viewPort({ x: 0, y: -5, width: 300, height: 20 }).stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]) // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20,向左偏移10 Shape() { Path().width(300).height(10).commands('M0 0 L900 0') } - .viewPort({ x: 0, y: -5, width: 300, height: 10 }) + .viewPort({ x: 0, y: -5, width: 300, height: 20 }) .stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]).strokeDashOffset(10) // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,透明度0.5 Shape() { Path().width(300).height(10).commands('M0 0 L900 0') - }.viewPort({ x: 0, y: -5, width: 300, height: 10 }).stroke(0xEE8443).strokeWidth(10).strokeOpacity(0.5) + }.viewPort({ x: 0, y: -5, width: 300, height: 20 }).stroke(0xEE8443).strokeWidth(10).strokeOpacity(0.5) // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20,向左偏移10,尖端样式圆角 Shape() { Path().width(300).height(10).commands('M0 0 L900 0') } - .viewPort({ x: 0, y: -5, width: 300, height: 10 }) + .viewPort({ x: 0, y: -5, width: 300, height: 20 }) .stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]).strokeLineCap(LineCapStyle.Round) // 在Shape的(-5, -5)点绘制一个 300 * 50 带边框的矩形,颜色0x317Af7,边框宽度10,边框颜色0xEE8443,拐角样式圆角 Shape() { - Rect().width(300).height(50) + Rect().width(300).height(100) } - .viewPort({ x: -5, y: -5, width: 310, height: 60 }) + .viewPort({ x: -5, y: -5, width: 310, height: 120 }) .fill(0x317Af7).stroke(0xEE8443).strokeWidth(10).strokeLineJoin(LineJoinStyle.Round) Shape() { Path().width(300).height(60).commands('M0 0 L400 0 L400 200 Z') @@ -293,5 +297,5 @@ struct ShapeExample { } ``` -![](/images/application-dev/reference/arkui-ts/figures/shape.gif) +![](/images/application-dev/reference/arkui-ts/figures/2-01.png) diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.Canvas.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.Canvas.md" new file mode 100644 index 0000000000000000000000000000000000000000..9dadd627f0e1851ea6f02a41a86e7d241e7e244f --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/01.Canvas.md" @@ -0,0 +1,112 @@ +--- +title: Canvas +permalink: /pages/010c0202010501 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# Canvas + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +提供画布组件,用于自定义绘制图形。 + +## 权限列表 + +无 + +## 子组件 + +不支持。 + +## 接口 + +Canvas\(context: CanvasRenderingContext2D\) + +- 参数 + +

名称

描述

+

描述

Bevel

+

Bevel

使用斜角连接路径段。

+

使用斜角连接路径段。

Miter

+

Miter

使用尖角连接路径段。

+

使用尖角连接路径段。

Round

+

Round

使用圆角连接路径段。

+

使用圆角连接路径段。

+ + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

context

+

CanvasRenderingContext2D

+

+

-

+

CanvasRenderingContext2D对象。

+
+ + +## 属性 + +支持[通用属性](/pages/010c020201010201)。 + +## 事件 + +除支持[通用事件](/pages/010c020201010101)外,还支持如下事件: + + + + + + + + + + + +

名称

+

参数

+

描述

+

onReady(callback: () => void)

+

+

画布组件的事件回调,可以在此时进行绘制。

+
+ +## 示例 + +``` +@Entry +@Component +struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillRect(0,30,100,100) + }) + } + .width('100%') + .height('100%') + } +} +``` + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..facea9ef38dd3b0e60cd7da3cdb8328f314183b3 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/02.CanvasRenderingContext2D\345\257\271\350\261\241.md" @@ -0,0 +1,3797 @@ +--- +title: CanvasRenderingContext2D对象 +permalink: /pages/010c0202010502 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:55 +--- +# CanvasRenderingContext2D对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +使用RenderingContext在Canvas组件上进行绘制,绘制对象可以是矩形、文本、图片等。 + +## 接口 + +CanvasRenderingContext2D\(setting: RenderingContextSetting\) + +- 参数 + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

setting

+

RenderingContextSettings

+

+

-

+

RenderingContextSettings

+
+ + +### RenderingContextSettings + +RenderingContextSettings\(antialias?: bool, alpha?: bool\) + +用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿和是否包含一个alpha通道。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

antialias

+

bool

+

+

false

+

表明canvas是否开启抗锯齿。

+

alpha

+

bool

+

+

false

+

表明canvas包含是否包含一个alpha通道。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

fillStyle

+

<color> | CanvasGradient | CanvasPattern

+

-

+

指定绘制的填充色。

+
  • 类型为<color>时,表示设置填充区域的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。
  • 类型为CanvasPattern时,使用createPattern方法创建。
+

lineWidth

+

number

+

-

+

设置绘制线条的宽度。

+

strokeStyle

+

<color> | CanvasGradient | CanvasPattern

+

-

+

设置描边的颜色。

+
  • 类型为<color>时,表示设置描边使用的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。
  • 类型为CanvasPattern时,使用createPattern方法创建。
+

lineCap

+

string

+

'butt'

+

指定线端点的样式,可选值为:

+
  • 'butt':线端点以方形结束。
  • 'round':线端点以圆形结束。
  • 'square':线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。
+

lineJoin

+

string

+

'miter'

+

指定线段间相交的交点样式,可选值为:

+
  • 'round':在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。
  • 'bevel':在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。
  • 'miter':在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。
+

miterLimit

+

number

+

10

+

设置斜接面限制值,该值指定了线条相交处内角和外角的距离。

+

font

+

string

+

'normal normal 14px sans-serif'

+

设置文本绘制中的字体样式。

+

语法:ctx.font='font-size font-family'

+
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列。
+

语法:ctx.font='font-style font-weight font-size font-family'

+
  • font-style(可选),用于指定字体样式,支持如下几种样式:'normal',talic。
  • font-weight(可选),用于指定字体的粗细,支持如下几种类型:'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900。
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列,支持如下几种类型:'sans-serif', 'serif', 'monospace'。
+

textAlign

+

string

+

'left'

+

设置文本绘制中的文本对齐方式,可选值为:

+
  • 'left':文本左对齐。
  • 'right':文本右对齐。
  • 'center':文本居中对齐。
  • 'start':文本对齐界线开始的地方。
  • 'end':文本对齐界线结束的地方。
+
说明:

ltr布局模式下'start'和'left'一致,rtl布局模式下'start'和'right'一致·。

+
+

textBaseline

+

string

+

'alphabetic'

+

设置文本绘制中的水平对齐方式,可选值为:

+
  • 'alphabetic':文本基线是标准的字母基线。
  • 'top':文本基线在文本块的顶部。
  • 'hanging':文本基线是悬挂基线。
  • 'middle':文本基线在文本块的中间。
  • 'ideographic':文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。
  • 'bottom':文本基线在文本块的底部。 与ideographic基线的区别在于ideographic基线不需要考虑下行字母。
+

globalAlpha

+

number

+

-

+

设置透明度,0.0为完全透明,1.0为完全不透明。

+

lineDashOffset

+

number

+

0.0

+

设置画布的虚线偏移量,精度为float。

+

globalCompositeOperation

+

string

+

'source-over'

+

设置合成操作的方式。类型字段可选值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。

+

shadowBlur

+

number

+

0.0

+

设置绘制阴影时的模糊级别,值越大越模糊,精度为float。

+

shadowColor

+

<color>

+

-

+

设置绘制阴影时的阴影颜色。

+

shadowOffsetX

+

number

+

-

+

设置绘制阴影时和原有对象的水平偏移值。

+

shadowOffsetY

+

number

+

-

+

设置绘制阴影时和原有对象的垂直偏移值。

+

imageSmoothingEnabled

+

boolean

+

true

+

用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。

+

imageSmoothingQuality

+

string

+

'low'

+

用于设置图像平滑度,支持如下三种类型:'low', 'medium', 'high'。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>类型格式为 'rgb\(255, 255, 255\)','rgba\(255, 255, 255, 1.0\)','\#FFFFFF'。 + +### fillStyle + +``` +@Entry +@Component +struct FillStyleExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = '#0000ff' + this.context.fillRect(20, 160, 150, 100) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322850.png) + +### lineWidth + +``` +@Entry +@Component +struct LineWidthExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.lineWidth = 5 + this.context.strokeRect(25, 25, 85, 105) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402745.png) + +### strokeStyle + +``` +@Entry +@Component +struct StrokeStyleExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.lineWidth = 10 + this.context.strokeStyle = '#0000ff' + this.context.strokeRect(25, 25, 155, 105) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282783.png) + +### lineCap + +``` +@Entry +@Component +struct LineCapExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.lineWidth = 8 + this.context.beginPath() + this.context.lineCap = 'round' + this.context.moveTo(30, 50) + this.context.lineTo(220, 50) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642802.png) + +### lineJoin + +``` +@Entry +@Component +struct LineJoinExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.lineWidth = 8 + this.context.lineJoin = 'miter' + this.context.moveTo(30, 30) + this.context.lineTo(120, 60) + this.context.lineTo(30, 110) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802788.png) + +### miterLimit + +``` +@Entry +@Component +struct MiterLimit { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.lineWidth = 8 + this.context.lineJoin = 'miter' + this.context.miterLimit = 3 + this.context.moveTo(30, 30) + this.context.lineTo(60, 35) + this.context.lineTo(30, 37) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522733.png) + +### font + +``` +@Entry +@Component +struct Font { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '30px sans-serif' + this.context.fillText("Hello World", 20, 60) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482814.png) + +### textAlign + +``` +@Entry +@Component +struct TextAlign { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeStyle = '#0000ff' + this.context.moveTo(140, 10) + this.context.lineTo(140, 160) + this.context.stroke() + + this.context.font = '18px sans-serif' + + this.context.textAlign = 'start' + this.context.fillText('textAlign=start', 140, 60) + this.context.textAlign = 'end' + this.context.fillText('textAlign=end', 140, 80) + this.context.textAlign = 'left' + this.context.fillText('textAlign=left', 140, 100) + this.context.textAlign = 'center' + this.context.fillText('textAlign=center',140, 120) + this.context.textAlign = 'right' + this.context.fillText('textAlign=right',140, 140) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602771.png) + +### textBaseline + +``` +@Entry +@Component +struct TextBaseline { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeStyle = '#0000ff' + this.context.moveTo(0, 120) + this.context.lineTo(400, 120) + this.context.stroke() + + this.context.font = '20px sans-serif' + + this.context.textBaseline = 'top' + this.context.fillText('Top', 10, 120) + this.context.textBaseline = 'bottom' + this.context.fillText('Bottom', 55, 120) + this.context.textBaseline = 'middle' + this.context.fillText('Middle', 125, 120) + this.context.textBaseline = 'alphabetic' + this.context.fillText('Alphabetic', 195, 120) + this.context.textBaseline = 'hanging' + this.context.fillText('Hanging', 295, 120) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322872.png) + +### globalAlpha + +``` +@Entry +@Component +struct GlobalAlpha { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(0, 0, 50, 50) + this.context.globalAlpha = 0.4 + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(50, 50, 50, 50) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238402777.png) + +### lineDashOffset + +``` +@Entry +@Component +struct LineDashOffset { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.arc(100, 75, 50, 0, 6.28) + this.context.setLineDash([10,20]) + this.context.stroke(); + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238282827.png) + +### globalCompositeOperation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

source-over

+

在现有绘制内容上显示新绘制内容,属于默认值。

+

source-atop

+

在现有绘制内容顶部显示新绘制内容。

+

source-in

+

在现有绘制内容中显示新绘制内容。

+

source-out

+

在现有绘制内容之外显示新绘制内容。

+

destination-over

+

在新绘制内容上方显示现有绘制内容。

+

destination-atop

+

在新绘制内容顶部显示现有绘制内容。

+

destination-in

+

在新绘制内容中显示现有绘制内容。

+

destination-out

+

在新绘制内容外显示现有绘制内容。

+

lighter

+

显示新绘制内容和现有绘制内容。

+

copy

+

显示新绘制内容而忽略现有绘制内容。

+

xor

+

使用异或操作对新绘制内容与现有绘制内容进行融合。

+
+ +``` +@Entry +@Component +struct GlobalCompositeOperation { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(20, 20, 50, 50) + this.context.globalCompositeOperation = 'source-over' + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(50, 50, 50, 50) + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(120, 20, 50, 50) + this.context.globalCompositeOperation = 'destination-over' + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(150, 50, 50, 50) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193642848.png) + +### shadowBlur + +``` +@Entry +@Component +struct ShadowBlur { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true); + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.shadowBlur = 30 + this.context.shadowColor = 'rgb(0,0,0)' + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(20, 20, 100, 80) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193802836.png) + +### shadowColor + +``` +@Entry +@Component +struct ShadowColor { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.shadowBlur = 30 + this.context.shadowColor = 'rgb(0,0,255)' + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(30, 30, 100, 100) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238522783.png) + +### shadowOffsetX + +``` +@Entry +@Component +struct ShadowOffsetX { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.shadowBlur = 10 + this.context.shadowOffsetX = 20 + this.context.shadowColor = 'rgb(0,0,0)' + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(20, 20, 100, 80) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193482866.png) + +### shadowOffsetY + +``` +@Entry +@Component +struct ShadowOffsetY { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.shadowBlur = 10 + this.context.shadowOffsetY = 20 + this.context.shadowColor = 'rgb(0,0,0)' + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(30, 30, 100, 100) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238602821.png) + +### imageSmoothingEnabled + +``` +@Entry +@Component +struct ImageSmoothingEnabled { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.imageSmoothingEnabled = false + this.context.drawImage( this.img,0,0,400,200) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193322910.png) + +## 方法 + +### fillRect + +fillRect\(x: number, y: number, w: number, h: number\): void + +填充一个矩形。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定矩形左上角点的x坐标。

+

y

+

number

+

+

0

+

指定矩形左上角点的y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct FillRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillRect(0,30,100,100) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193737314.png) + + +### strokeRect + +strokeRect\(x: number, y: number, w: number, h: number\): void + +绘制具有边框的矩形,矩形内部不填充。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定矩形的左上角x坐标。

+

y

+

number

+

+

0

+

指定矩形的左上角y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct StrokeRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeRect(30, 30, 200, 150) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238457271.png) + + +### clearRect + +clearRect\(x: number, y: number, w: number, h: number\): void + +删除指定区域内的绘制内容。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定矩形上的左上角x坐标。

+

y

+

number

+

+

0

+

指定矩形上的左上角y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct ClearRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0,0,500,500) + this.context.clearRect(20,20,150,100) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/11111.png) + + +### fillText + +fillText\(text: string, x: number, y: number\): void + +绘制填充类文本。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

text

+

string

+

+

“”

+

需要绘制的文本内容。

+

x

+

number

+

+

0

+

需要绘制的文本的左下角x坐标。

+

y

+

number

+

+

0

+

需要绘制的文本的左下角y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct FillText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '30px sans-serif' + this.context.fillText("Hello World!", 20, 100) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238537297.png) + + +### strokeText + +strokeText\(text: string, x: number, y: number\): void + +绘制描边类文本。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

text

+

string

+

+

“”

+

需要绘制的文本内容。

+

x

+

number

+

+

0

+

需要绘制的文本的左下角x坐标。

+

y

+

number

+

+

0

+

需要绘制的文本的左下角y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct StrokeText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '55px sans-serif' + this.context.strokeText("Hello World!", 20, 60) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193756416.png) + + +### measureText + +measureText\(text: string\): TextMetrics + +该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

text

+

string

+

+

""

+

需要进行测量的文本。

+
+ + +- 返回值 + + + + + + + + + +

类型

+

说明

+

TextMetrics

+

文本的尺寸信息

+
+ +- TextMetrics类型描述 + + + + + + + + + + + +

属性

+

类型

+

描述

+

width

+

number

+

字符串的宽度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct MeasureText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '50px sans-serif' + this.context.fillText("Hello World!", 20, 100) + this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238476361.png) + + +### stroke + +stroke\(path?: Path2D\): void + +进行边框绘制操作。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

path

+

Path2D

+

+

null

+

需要绘制的Path2D。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Stroke { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.moveTo(25, 25) + this.context.lineTo(25, 105) + this.context.strokeStyle = 'rgb(0,0,255)' + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193436448.png) + + +### beginPath + +beginPath\(\): void + +创建一个新的绘制路径。 + +- 示例 + + ``` + @Entry + @Component + struct BeginPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.lineWidth = 6 + this.context.strokeStyle = '#0000ff' + this.context.moveTo(15, 80) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238556395.png) + + +### moveTo + +moveTo\(x: number, y: number\): void + +路径从当前点移动到指定点。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定位置的x坐标。

+

y

+

number

+

+

0

+

指定位置的y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481094.png) + + +### lineTo + +lineTo\(x: number, y: number\): void + +从当前点到指定点进行路径连接。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定位置的x坐标。

+

y

+

number

+

+

0

+

指定位置的y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601051.png) + + +### closePath + +closePath\(\): void + +结束当前路径形成一个封闭路径。 + +- 示例 + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(30, 30) + this.context.lineTo(110, 30) + this.context.lineTo(70, 90) + this.context.closePath() + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321136.png) + + +### createPattern + +createPattern\(image: ImageBitmap, repetition: string\): void + +通过指定图像和重复方式创建图片填充的模板。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

image

+

ImageBitmap

+

+

null

+

图源对象,具体参考 ImageBitmap对象。

+

repetition

+

string

+

+

“”

+

设置图像重复的方式,取值为:'repeat'、'repeat-x'、 'repeat-y'、'no-repeat'。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreatePattern { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var pattern = this.context.createPattern(this.img, 'repeat') + this.context.fillStyle = pattern + this.context.fillRect(0, 0, 200, 200) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401029.png) + + +### bezierCurveTo + +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void + +创建三次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cp1x

+

number

+

+

0

+

第一个贝塞尔参数的x坐标值。

+

cp1y

+

number

+

+

0

+

第一个贝塞尔参数的y坐标值。

+

cp2x

+

number

+

+

0

+

第二个贝塞尔参数的x坐标值。

+

cp2y

+

number

+

+

0

+

第二个贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.bezierCurveTo(20, 100, 200, 100, 200, 20) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281067.png) + + +### quadraticCurveTo + +quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void + +创建二次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cpx

+

number

+

+

0

+

贝塞尔参数的x坐标值。

+

cpy

+

number

+

+

0

+

贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true); + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath(); + this.context.moveTo(20, 20); + this.context.quadraticCurveTo(100, 100, 200, 20); + this.context.stroke(); + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641084.png) + + +### arc + +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void + +绘制弧线路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

弧线圆心的x坐标值。

+

y

+

number

+

+

0

+

弧线圆心的y坐标值。

+

radius

+

number

+

+

0

+

弧线的圆半径。

+

startAngle

+

number

+

+

0

+

弧线的起始弧度。

+

endAngle

+

number

+

+

0

+

弧线的终止弧度。

+

anticlockwise

+

boolean

+

+

false

+

是否逆时针绘制圆弧。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.arc(100, 75, 50, 0, 6.28) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801070.png) + + +### arcTo + +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void + +依据圆弧经过的点和圆弧半径创建圆弧路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x1

+

number

+

+

0

+

圆弧经过的第一个点的x坐标值。

+

y1

+

number

+

+

0

+

圆弧经过的第一个点的y坐标值。

+

x2

+

number

+

+

0

+

圆弧经过的第二个点的x坐标值。

+

y2

+

number

+

+

0

+

圆弧经过的第二个点的y坐标值。

+

radius

+

number

+

+

0

+

圆弧的圆半径值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.moveTo(100, 20); + this.context.arcTo(150, 20, 150, 70, 50); + this.context.stroke(); + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521019.png) + + +### ellipse + +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void + +在规定的矩形区域绘制一个椭圆。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

椭圆圆心的x轴坐标。

+

y

+

number

+

+

0

+

椭圆圆心的y轴坐标。

+

radiusX

+

number

+

+

0

+

椭圆x轴的半径长度。

+

radiusY

+

number

+

+

0

+

椭圆y轴的半径长度。

+

rotation

+

number

+

+

0

+

椭圆的旋转角度,单位为弧度。

+

startAngle

+

number

+

+

0

+

椭圆绘制的起始点角度,以弧度表示。

+

endAngle

+

number

+

+

0

+

椭圆绘制的结束点角度,以弧度表示。

+

anticlockwise

+

number

+

+

0

+

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Ellipse { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.context.stroke() + }) + Button('back') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481096.png) + + +### rect + +rect\(x: number, y: number, width: number, height: number\): void + +创建矩形路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定矩形的左上角x坐标值。

+

y

+

number

+

+

0

+

指定矩形的左上角y坐标值。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Rect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.context.stroke() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238601053.png) + + +### fill + +fill\(\): void + +对封闭路径进行填充。 + +- 示例 + + ``` + @Entry + @Component + struct Fill { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.context.fill() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193321138.png) + + +### clip + +clip\(\): void + +设置当前路径为剪切路径。 + +- 示例 + + ``` + @Entry + @Component + struct Clip { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(0, 0, 200, 200) + this.context.stroke() + this.context.clip() + this.context.fillStyle = "rgb(255,0,0)" + this.context.fillRect(0, 0, 150, 150) + }) + Button('back') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238401031.png) + + +### rotate + +rotate\(rotate: number\): void + +针对当前坐标轴进行顺时针旋转。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

rotate

+

number

+

+

0

+

设置顺时针旋转的弧度值,可以通过Math.PI / 180将角度转换为弧度值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Rotate { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees + this.context.fillRect(70, 20, 50, 50) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238281069.png) + + +### scale + +scale\(x: number, y: number\): void + +设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

设置水平方向的缩放值。

+

y

+

number

+

+

0

+

设置垂直方向的缩放值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Scale { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeRect(10, 10, 25, 25) + this.context.scale(2, 2) // Scale to 200% + this.context.strokeRect(10, 10, 25, 25) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193641086.png) + + +### transform + +transform\(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number\): void + +transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标): +>- x' = scaleX \* x + skewY \* y + translateX +>- y' = skewX \* x + scaleY \* y + translateY + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

scaleX

+

number

+

+

0

+

指定水平缩放值。

+

skewX

+

number

+

+

0

+

指定水平倾斜值。

+

skewY

+

number

+

+

0

+

指定垂直倾斜值。

+

scaleY

+

number

+

+

0

+

指定垂直缩放值。

+

translateX

+

number

+

+

0

+

指定水平移动值。

+

translateY

+

number

+

+

0

+

指定垂直移动值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Transform { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(0,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.transform(1, 0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.transform(1, 0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0, 0, 100, 100) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193801072.png) + + +### setTransform + +setTransform\(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number\): void + +setTransfrom方法使用的参数和transform\(\)方法相同,但setTransform\(\)方法会重置现有的变换矩阵并创建新的变换矩阵。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

scaleX

+

number

+

+

0

+

指定水平缩放值。

+

skewX

+

number

+

+

0

+

指定水平倾斜值。

+

skewY

+

number

+

+

0

+

指定垂直倾斜值。

+

scaleY

+

number

+

+

0

+

指定垂直缩放值。

+

translateX

+

number

+

+

0

+

指定水平移动值。

+

translateY

+

number

+

+

0

+

指定垂直移动值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct SetTransform { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.setTransform(1,0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0, 0, 100, 100) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001238521021.png) + + +### translate + +translate\(x: number, y: number\): void + +移动当前坐标系的原点。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

设置水平平移量。

+

y

+

number

+

+

0

+

设置竖直平移量。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Translate { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillRect(10, 10, 50, 50) + this.context.translate(70, 70) + this.context.fillRect(10, 10, 50, 50) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193481098.png) + + +### drawImage + +drawImage\(image: ImageBitmap, dx: number, dy: number\): void + +drawImage\(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number\): void + +drawImage\(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number\):void + +进行图像绘制。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

image

+

ImageBitmap

+

+

null

+

图片资源,请参考ImageBitmap

+

sx

+

number

+

+

0

+

裁切源图像时距离源图像左上角的x坐标值。

+

sy

+

number

+

+

0

+

裁切源图像时距离源图像左上角的y坐标值。

+

sWidth

+

number

+

+

0

+

裁切源图像时需要裁切的宽度。

+

sHeight

+

number

+

+

0

+

裁切源图像时需要裁切的高度。

+

dx

+

number

+

+

0

+

绘制区域左上角在x轴的位置。

+

dy

+

number

+

+

0

+

绘制区域左上角在y 轴的位置。

+

dWidth

+

number

+

+

0

+

绘制区域的宽度。

+

dHeight

+

number

+

+

0

+

绘制区域的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct ImageExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true); + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); + private img:ImageBitmap = new ImageBitmap("common/images/example.jpg"); + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.drawImage( this.img,0,0,500,500,0,0,400,200); + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915154.png) + + +### createImageData + +createImageData\(width: number, height: number\): Object + +创建新的ImageData 对象,请参考[ImageData](/pages/010c0202010508)。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认

+

描述

+

width

+

number

+

+

0

+

ImageData的宽度。

+

height

+

number

+

+

0

+

ImageData的高度。

+
+ + +### createImageData + +createImageData\(imageData: Object\): Object + +创建新的ImageData 对象,请参考[ImageData](/pages/010c0202010508)。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认

+

描述

+

imagedata

+

Object

+

+

null

+

复制现有的ImageData对象。

+
+ + +### getImageData + +getImageData\(sx: number, sy: number, sw: number, sh: number\): Object + +以当前canvas指定区域内的像素创建[ImageData](/pages/010c0202010508)对象。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

sx

+

number

+

+

0

+

需要输出的区域的左上角x坐标。

+

sy

+

number

+

+

0

+

需要输出的区域的左上角y坐标。

+

sw

+

number

+

+

0

+

需要输出的区域的宽度。

+

sh

+

number

+

+

0

+

需要输出的区域的高度。

+
+ + +### putImageData + +putImageData\(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number\): void + +使用[ImageData](/pages/010c0202010508)数据填充新的矩形区域。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

imagedata

+

Object

+

+

null

+

包含像素值的ImageData对象。

+

dx

+

number

+

+

0

+

填充区域在x轴方向的偏移量。

+

dy

+

number

+

+

0

+

填充区域在y轴方向的偏移量。

+

dirtyX

+

number

+

+

0

+

源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。

+

dirtyY

+

number

+

+

0

+

源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。

+

dirtyWidth

+

number

+

+

imagedata的宽度

+

源图像数据矩形裁切范围的宽度。

+

dirtyHeight

+

number

+

+

imagedata的高度

+

源图像数据矩形裁切范围的高度。

+
+ +- 示例 + + ``` + @Entry + @Component + struct PutImageData { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var imageData = this.context.createImageData(100, 100) + for (var i = 0; i < imageData.data.length; i += 4) { + imageData.data[i + 0] = 255 + imageData.data[i + 1] = 0 + imageData.data[i + 2] = 255 + imageData.data[i + 3] = 255 + } + this.context.putImageData(imageData, 10, 10) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075134.png) + + +### restore + +restore\(\): void + +对保存的绘图上下文进行恢复。 + +- 示例 + + ``` + @Entry + @Component + struct Restore { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.controller.restore() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + +### save + +save\(\): void + +对当前的绘图上下文进行保存。 + +- 示例 + + ``` + @Entry + @Component + struct Restore { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.save() + }) + } + .width('100%') + .height('100%') + } + } + ``` + + +### createLinearGradient + +createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): void + +创建一个线性渐变色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x0

+

number

+

+

0

+

起点的x轴坐标。

+

y0

+

number

+

+

0

+

起点的y轴坐标。

+

x1

+

number

+

+

0

+

终点的x轴坐标。

+

y1

+

number

+

+

0

+

终点的y轴坐标。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreateLinearGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createLinearGradient(50,0, 300,100) + this.gra.addColorStop(0.0, 'red') + this.gra.addColorStop(0.5, 'white') + this.gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555149.png) + + +### createRadialGradient + +createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number\): void + +创建一个径向渐变色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x0

+

number

+

+

0

+

起始圆的x轴坐标。

+

y0

+

number

+

+

0

+

起始圆的y轴坐标。

+

r0

+

number

+

+

0

+

起始圆的半径。必须是非负且有限的。

+

x1

+

number

+

+

0

+

终点圆的x轴坐标。

+

y1

+

number

+

+

0

+

终点圆的y轴坐标。

+

r1

+

number

+

+

0

+

终点圆的半径。必须为非负且有限的。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreateRadialGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createRadialGradient(200,200,50, 200,200,200) + this.gra.addColorStop(0.0, 'red') + this.gra.addColorStop(0.5, 'white') + this.gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755188.png) + + +## CanvasPattern + +一个Object对象, 通过[createPattern](#section1643216163371)方法创建。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.OffscreenCanvasRenderingConxt2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.OffscreenCanvasRenderingConxt2D\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..a767a38e050bdaf96b666a3be5b3e7a3635295b6 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/03.OffscreenCanvasRenderingConxt2D\345\257\271\350\261\241.md" @@ -0,0 +1,3885 @@ +--- +title: OffscreenCanvasRenderingConxt2D对象 +permalink: /pages/010c0202010503 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# OffscreenCanvasRenderingConxt2D对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +使用OffscreenCanvasRenderingContext2D在Canvas上进行离屏绘制,绘制对象可以是矩形、文本、图片等。离屏绘制是指将需要绘制的内容先绘制在缓存区,然后将其转换成图片,一次性绘制绘制到canvas上,加快了绘制速度。 + +## 接口 + +OffscreenCanvasRenderingContext2D\(width: number, height: number, setting: RenderingContextSettings\) + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

width

+

number

+

+

-

+

离屏画布的宽度

+

height

+

number

+

+

-

+

离屏画布的高度

+

setting

+

RenderingContextSettings

+

+

-

+

RenderingContextSettings接口描述。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

类型

+

默认值

+

描述

+

fillStyle

+

<color> | CanvasGradient | CanvasPattern

+

-

+

指定绘制的填充色。

+
  • 类型为<color>时,表示设置填充区域的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用 createLinearGradient方法创建。
  • 类型为CanvasPattern时,使用createPattern方法创建。
+

lineWidth

+

number

+

-

+

设置绘制线条的宽度。

+

strokeStyle

+

<color> | CanvasGradient | CanvasPattern

+

-

+

设置描边的颜色。

+
  • 类型为<color>时,表示设置描边使用的颜色。
  • 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。
  • 类型为CanvasPattern时,使用createPattern方法创建。
+

lineCap

+

string

+

'butt'

+

指定线端点的样式,可选值为:

+
  • 'butt':线端点以方形结束。
  • 'round':线端点以圆形结束。
  • 'square':线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。
+

lineJoin

+

string

+

'miter'

+

指定线段间相交的交点样式,可选值为:

+
  • 'round':在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。
  • 'bevel':在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。
  • 'miter':在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。
+

miterLimit

+

number

+

10

+

设置斜接面限制值,该值指定了线条相交处内角和外角的距离。

+

font

+

string

+

'normal normal 14px sans-serif'

+

设置文本绘制中的字体样式。

+

语法:ctx.font='font-size font-family'

+
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列。
+

语法:ctx.font='font-style font-weight font-size font-family'

+
  • font-style(可选),用于指定字体样式,支持如下几种样式:'normal', 'italic'。
  • font-weight(可选),用于指定字体的粗细,支持如下几种类型:'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900。
  • font-size(可选),指定字号和行高,单位只支持px。
  • font-family(可选),指定字体系列,支持如下几种类型:'sans-serif', 'serif', 'monospace'。
+

textAlign

+

string

+

'left'

+

设置文本绘制中的文本对齐方式,可选值为:

+
  • 'left':文本左对齐。
  • 'right':文本右对齐。
  • 'center':文本居中对齐。
  • 'start':文本对齐界线开始的地方。
  • 'end':文本对齐界线结束的地方。
+
说明:

ltr布局模式下start和left一致,rtl布局模式下start和right一致·。

+
+

textBaseline

+

string

+

'alphabetic'

+

设置文本绘制中的水平对齐方式,可选值为:

+
  • 'alphabetic':文本基线是标准的字母基线。
  • 'top':文本基线在文本块的顶部。
  • 'hanging':文本基线是悬挂基线。
  • 'middle':文本基线在文本块的中间。
  • 'ideographic':文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。
  • 'bottom':文本基线在文本块的底部。 与ideographic基线的区别在于ideographic 基线不需要考虑下行字母。
+

globalAlpha

+

number

+

-

+

设置透明度,0.0为完全透明,1.0为完全不透明。

+

lineDashOffset

+

number

+

0.0

+

设置画布的虚线偏移量,精度为float。

+

globalCompositeOperation

+

string

+

'source-over'

+

设置合成操作的方式。类型字段可选值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。

+

shadowBlur

+

number

+

0.0

+

设置绘制阴影时的模糊级别,值越大越模糊,精度为float。

+

shadowColor

+

<color>

+

-

+

设置绘制阴影时的阴影颜色。

+

shadowOffsetX

+

number

+

-

+

设置绘制阴影时和原有对象的水平偏移值。

+

shadowOffsetY

+

number

+

-

+

设置绘制阴影时和原有对象的垂直偏移值。

+

imageSmoothingEnabled

+

boolean

+

true

+

用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。

+

imageSmoothingQuality

+

string

+

'low'

+

用于设置图像平滑度,支持如下三种类型:'low', 'medium', 'high'。

+
+ +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>类型格式为 'rgb\(255, 255, 255\)','rgba\(255, 255, 255, 1.0\)','\#FFFFFF'。 + +### fillStyle + +``` +@Entry +@Component +struct FillStyleExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = '#0000ff' + this.offContext.fillRect(20, 160, 150, 100) + var image = this.offContext.transferToImageBitmap(); + this.context.transferFromImageBitmap(image); + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555173.png) + +### lineWidth + +``` +@Entry +@Component +struct LineWidthExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.lineWidth = 5 + this.offContext.strokeRect(25, 25, 85, 105) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755194.png) + +### strokeStyle + +``` +@Entry +@Component +struct StrokeStyleExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.lineWidth = 10 + this.offContext.strokeStyle = '#0000ff' + this.offContext.strokeRect(25, 25, 155, 105) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355135.png) + +### lineCap + +``` +@Entry +@Component +struct LineCapExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.lineWidth = 8 + this.offContext.beginPath() + this.offContext.lineCap = 'round' + this.offContext.moveTo(30, 50) + this.offContext.lineTo(220, 50) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595232.png) + +### lineJoin + +``` +@Entry +@Component +struct LineJoinExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.lineWidth = 8 + this.offContext.lineJoin = 'miter' + this.offContext.moveTo(30, 30) + this.offContext.lineTo(120, 60) + this.offContext.lineTo(30, 110) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715141.png) + +### miterLimit + +``` +@Entry +@Component +struct MiterLimit { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.lineWidth = 8 + this.offContext.lineJoin = 'miter' + this.offContext.miterLimit = 3 + this.offContext.moveTo(30, 30) + this.offContext.lineTo(60, 35) + this.offContext.lineTo(30, 37) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075178.png) + +### font + +``` +@Entry +@Component +struct Font { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '30px sans-serif' + this.offContext.fillText("Hello World", 20, 60) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075164.png) + +### textAlign + +``` +@Entry +@Component +struct TextAlign { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeStyle = '#0000ff' + this.offContext.moveTo(140, 10) + this.offContext.lineTo(140, 160) + this.offContext.stroke() + + this.offContext.font = '18px sans-serif' + + this.offContext.textAlign = 'start' + this.offContext.fillText('textAlign=start', 140, 60) + this.offContext.textAlign = 'end' + this.offContext.fillText('textAlign=end', 140, 80) + this.offContext.textAlign = 'left' + this.offContext.fillText('textAlign=left', 140, 100) + this.offContext.textAlign = 'center' + this.offContext.fillText('textAlign=center',140, 120) + this.offContext.textAlign = 'right' + this.offContext.fillText('textAlign=right',140, 140) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595234.png) + +### textBaseline + +``` +@Entry +@Component +struct TextBaseline { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeStyle = '#0000ff' + this.offContext.moveTo(0, 120) + this.offContext.lineTo(400, 120) + this.offContext.stroke() + + this.offContext.font = '20px sans-serif' + + this.offContext.textBaseline = 'top' + this.offContext.fillText('Top', 10, 120) + this.offContext.textBaseline = 'bottom' + this.offContext.fillText('Bottom', 55, 120) + this.offContext.textBaseline = 'middle' + this.offContext.fillText('Middle', 125, 120) + this.offContext.textBaseline = 'alphabetic' + this.offContext.fillText('Alphabetic', 195, 120) + this.offContext.textBaseline = 'hanging' + this.offContext.fillText('Hanging', 295, 120) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075180.png) + +### globalAlpha + +``` +@Entry +@Component +struct GlobalAlpha { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(0, 0, 50, 50) + this.offContext.globalAlpha = 0.4 + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(50, 50, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715165.png) + +### lineDashOffset + +``` +@Entry +@Component +struct LineDashOffset { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.arc(100, 75, 50, 0, 6.28) + this.offContext.setLineDash([10,20]) + this.offContext.stroke(); + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555181.png) + +### globalCompositeOperation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

source-over

+

在现有绘制内容上显示新绘制内容,属于默认值。

+

source-atop

+

在现有绘制内容顶部显示新绘制内容。

+

source-in

+

在现有绘制内容中显示新绘制内容。

+

source-out

+

在现有绘制内容之外显示新绘制内容。

+

destination-over

+

在新绘制内容上方显示现有绘制内容。

+

destination-atop

+

在新绘制内容顶部显示现有绘制内容。

+

destination-in

+

在新绘制内容中显示现有绘制内容。

+

destination-out

+

在新绘制内容外显示现有绘制内容。

+

lighter

+

显示新绘制内容和现有绘制内容。

+

copy

+

显示新绘制内容而忽略现有绘制内容。

+

xor

+

使用异或操作对新绘制内容与现有绘制内容进行融合。

+
+ +``` +@Entry +@Component +struct GlobalCompositeOperation { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(20, 20, 50, 50) + this.offContext.globalCompositeOperation = 'source-over' + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(50, 50, 50, 50) + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(120, 20, 50, 50) + this.offContext.globalCompositeOperation = 'destination-over' + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(150, 50, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355137.png) + +### shadowBlur + +``` +@Entry +@Component +struct ShadowBlur { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.shadowBlur = 30 + this.offContext.shadowColor = 'rgb(0,0,0)' + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(20, 20, 100, 80) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755182.png) + +### shadowColor + +``` +@Entry +@Component +struct ShadowColor { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.shadowBlur = 30 + this.offContext.shadowColor = 'rgb(0,0,255)' + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(30, 30, 100, 100) + var image = this.offContext.transferToImageBitmap +() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555155.png) + +### shadowOffsetX + +``` +@Entry +@Component +struct ShadowOffsetX { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.shadowBlur = 10 + this.offContext.shadowOffsetX = 20 + this.offContext.shadowColor = 'rgb(0,0,0)' + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(20, 20, 100, 80) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075168.png) + +### shadowOffsetY + +``` +@Entry +@Component +struct ShadowOffsetY { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.shadowBlur = 10 + this.offContext.shadowOffsetY = 20 + this.offContext.shadowColor = 'rgb(0,0,0)' + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(30, 30, 100, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475139.png) + +### imageSmoothingEnabled + +``` +@Entry +@Component +struct ImageSmoothingEnabled { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.imageSmoothingEnabled = false + this.offContext.drawImage( this.img,0,0,400,200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355121.png) + +## 方法 + +### fillRect + +fillRect\(x: number, y: number, w: number, h: number\): void + +填充一个矩形。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定矩形左上角点的x坐标。

+

y

+

number

+

+

0

+

指定矩形左上角点的y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ +- 示例 + + ``` + @Entry + @Component + struct FillRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillRect(0,30,100,100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475123.png) + + +### strokeRect + +strokeRect\(x: number, y: number, w: number, h: number\): void + +绘制具有边框的矩形,矩形内部不填充。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定矩形的左上角x坐标。

+

y

+

number

+

+

0

+

指定矩形的左上角y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct StrokeRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeRect(30, 30, 200, 150) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755180.png) + + +### clearRect + +clearRect\(x: number, y: number, w: number, h: number\): void + +删除指定区域内的绘制内容。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定矩形上的左上角x坐标。

+

y

+

number

+

+

0

+

指定矩形上的左上角y坐标。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct ClearRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0,0,500,500) + this.offContext.clearRect(20,20,150,100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/11111-5.png) + + +### fillText + +fillText\(text: string, x: number, y: number\): void + +绘制填充类文本。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

text

+

string

+

+

“”

+

需要绘制的文本内容。

+

x

+

number

+

+

0

+

需要绘制的文本的左下角x坐标。

+

y

+

number

+

+

0

+

需要绘制的文本的左下角y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct FillText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '30px sans-serif' + this.offContext.fillText("Hello World!", 20, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555165.png) + + +### strokeText + +strokeText\(text: string, x: number, y: number\): void + +绘制描边类文本。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

text

+

string

+

+

“”

+

需要绘制的文本内容。

+

x

+

number

+

+

0

+

需要绘制的文本的左下角x坐标。

+

y

+

number

+

+

0

+

需要绘制的文本的左下角y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct StrokeText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '55px sans-serif' + this.offContext.strokeText("Hello World!", 20, 60) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715149.png) + + +### measureText + +measureText\(text: string\): TextMetrics + +该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

text

+

string

+

+

""

+

需要进行测量的文本。

+
+ +- 返回值 + + + + + + + + + +

类型

+

说明

+

TextMetrics

+

文本的尺寸信息

+
+ +- TextMetrics类型描述 + + + + + + + + + + + +

属性

+

类型

+

描述

+

width

+

number

+

字符串的宽度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct MeasureText { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '50px sans-serif' + this.offContext.fillText("Hello World!", 20, 100) + this.offContext.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075172.png) + + +### stroke + +stroke\(path?: Path2D\): void + +进行边框绘制操作。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

path

+

Path2D

+

+

null

+

需要绘制的Path2D。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Stroke { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenRenderingContext(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.moveTo(25, 25) + this.offContext.lineTo(25, 105) + this.offContext.strokeStyle = 'rgb(0,0,255)' + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595220.png) + + +### beginPath + +beginPath\(\): void + +创建一个新的绘制路径。 + +- 示例 + + ``` + @Entry + @Component + struct BeginPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.lineWidth = 6 + this.offContext.strokeStyle = '#0000ff' + this.offContext.moveTo(15, 80) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555163.png) + + +### moveTo + +moveTo\(x: number, y: number\): void + +路径从当前点移动到指定点。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

指定位置的x坐标。

+

y

+

number

+

+

0

+

指定位置的y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595228.png) + + +### lineTo + +lineTo\(x: number, y: number\): void + +从当前点到指定点进行路径连接。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定位置的x坐标。

+

y

+

number

+

+

0

+

指定位置的y坐标。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715151.png) + + +### closePath + +closePath\(\): void + +结束当前路径形成一个封闭路径。 + +- 示例 + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(30, 30) + this.offContext.lineTo(110, 30) + this.offContext.lineTo(70, 90) + this.offContext.closePath() + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595224.png) + + +### createPattern + +createPattern\(image: ImageBitmap, repetition: string\): CanvasPattern + +通过指定图像和重复方式创建图片填充的模板。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

image

+

ImageBitmap

+

+

null

+

图源对象,具体参考 ImageBitmap对象。

+

repetition

+

string

+

+

“”

+

设置图像重复的方式,取值为:'repeat'、'repeat-x'、 'repeat-y'、'no-repeat'。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreatePattern { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var pattern = this.offContext.createPattern(this.img, 'repeat') + this.offContext.fillStyle = pattern + this.offContext.fillRect(0, 0, 200, 200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475133.png) + + +### bezierCurveTo + +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void + +创建三次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cp1x

+

number

+

+

0

+

第一个贝塞尔参数的x坐标值。

+

cp1y

+

number

+

+

0

+

第一个贝塞尔参数的y坐标值。

+

cp2x

+

number

+

+

0

+

第二个贝塞尔参数的x坐标值。

+

cp2y

+

number

+

+

0

+

第二个贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.bezierCurveTo(20, 100, 200, 100, 200, 20) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715153.png) + + +### quadraticCurveTo + +quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void + +创建二次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cpx

+

number

+

+

0

+

贝塞尔参数的x坐标值。

+

cpy

+

number

+

+

0

+

贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath(); + this.offContext.moveTo(20, 20); + this.offContext.quadraticCurveTo(100, 100, 200, 20); + this.offContext.stroke(); + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915184.png) + + +### arc + +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void + +绘制弧线路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

弧线圆心的x坐标值。

+

y

+

number

+

+

0

+

弧线圆心的y坐标值。

+

radius

+

number

+

+

0

+

弧线的圆半径。

+

startAngle

+

number

+

+

0

+

弧线的起始弧度。

+

endAngle

+

number

+

+

0

+

弧线的终止弧度。

+

anticlockwise

+

boolean

+

+

false

+

是否逆时针绘制圆弧。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.arc(100, 75, 50, 0, 6.28) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595226.png) + + +### arcTo + +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void + +依据圆弧经过的点和圆弧半径创建圆弧路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x1

+

number

+

+

0

+

圆弧经过的第一个点的x坐标值。

+

y1

+

number

+

+

0

+

圆弧经过的第一个点的y坐标值。

+

x2

+

number

+

+

0

+

圆弧经过的第二个点的x坐标值。

+

y2

+

number

+

+

0

+

圆弧经过的第二个点的y坐标值。

+

radius

+

number

+

+

0

+

圆弧的圆半径值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.moveTo(100, 20); + this.offContext.arcTo(150, 20, 150, 70, 50); + this.offContext.stroke(); + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555167.png) + + +### ellipse + +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void + +在规定的矩形区域绘制一个椭圆。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

说明

+

x

+

number

+

+

0

+

椭圆圆心的x轴坐标。

+

y

+

number

+

+

0

+

椭圆圆心的y轴坐标。

+

radiusX

+

number

+

+

0

+

椭圆x轴的半径长度。

+

radiusY

+

number

+

+

0

+

椭圆y轴的半径长度。

+

rotation

+

number

+

+

0

+

椭圆的旋转角度,单位为弧度。

+

startAngle

+

number

+

+

0

+

椭圆绘制的起始点角度,以弧度表示。

+

endAngle

+

number

+

+

0

+

椭圆绘制的结束点角度,以弧度表示。

+

anticlockwise

+

boolean

+

+

false

+

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Ellipse { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355131.png) + + +### rect + +rect\(x: number, y: number, width: number, height: number\): void + +创建矩形路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定矩形的左上角x坐标值。

+

y

+

number

+

+

0

+

指定矩形的左上角y坐标值。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Rect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715155.png) + + +### fill + +fill\(\): void + +对封闭路径进行填充。 + +- 示例 + + ``` + @Entry + @Component + struct Fill { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.offContext.fill() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075166.png) + + +### clip + +clip\(\): void + +设置当前路径为剪切路径。 + +- 示例 + + ``` + @Entry + @Component + struct Clip { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(0, 0, 200, 200) + this.offContext.stroke() + this.offContext.clip() + this.offContext.fillStyle = "rgb(255,0,0)" + this.offContext.fillRect(0, 0, 150, 150) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595238.png) + + +### rotate + +rotate\(rotate: number\): void + +针对当前坐标轴进行顺时针旋转。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

rotate

+

number

+

+

0

+

设置顺时针旋转的弧度值,可以通过Math.PI / 180将角度转换为弧度值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Rotate { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees + this.offContext.fillRect(70, 20, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237355133.png) + + +### scale + +scale\(x: number, y: number\): void + +设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

设置水平方向的缩放值。

+

y

+

number

+

+

0

+

设置垂直方向的缩放值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Scale { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeRect(10, 10, 25, 25) + this.offContext.scale(2, 2) // Scale to 200% + this.offContext.strokeRect(10, 10, 25, 25) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755178.png) + + +### transform + +transform\(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number\): void + +transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标): +>- x' = scaleX \* x + skewY \* y + translateX +>- y' = skewX \* x + scaleY \* y + translateY + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

scaleX

+

number

+

+

0

+

指定水平缩放值。

+

skewX

+

number

+

+

0

+

指定水平倾斜值。

+

skewY

+

number

+

+

0

+

指定垂直倾斜值。

+

scaleY

+

number

+

+

0

+

指定垂直缩放值。

+

translateX

+

number

+

+

0

+

指定水平移动值。

+

translateY

+

number

+

+

0

+

指定垂直移动值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Transform { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(0,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0, 0, 100, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595230.png) + + +### setTransform + +setTransform\(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number\): void + +setTransfrom方法使用的参数和transform\(\)方法相同,但setTransform\(\)方法会重置现有的变换矩阵并创建新的变换矩阵。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

scaleX

+

number

+

+

0

+

指定水平缩放值。

+

skewX

+

number

+

+

0

+

指定水平倾斜值。

+

skewY

+

number

+

+

0

+

指定垂直倾斜值。

+

scaleY

+

number

+

+

0

+

指定垂直缩放值。

+

translateX

+

number

+

+

0

+

指定水平移动值。

+

translateY

+

number

+

+

0

+

指定垂直移动值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct SetTransform { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.setTransform(1,0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0, 0, 100, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237715159.png) + + +### translate + +translate\(x: number, y: number\): void + +移动当前坐标系的原点。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

设置水平平移量。

+

y

+

number

+

+

0

+

设置竖直平移量。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Translate { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillRect(10, 10, 50, 50) + this.offContext.translate(70, 70) + this.offContext.fillRect(10, 10, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475137.png) + + +### drawImage + +drawImage\(image: ImageBitmap, dx: number, dy: number\): void + +drawImage\(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number\): void + +drawImage\(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number\):void + +进行图像绘制。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

image

+

ImageBitmap

+

+

null

+

图片资源,请参考ImageBitmap

+

sx

+

number

+

+

0

+

裁切源图像时距离源图像左上角的x坐标值。

+

sy

+

number

+

+

0

+

裁切源图像时距离源图像左上角的y坐标值。

+

sWidth

+

number

+

+

0

+

裁切源图像时需要裁切的宽度。

+

sHeight

+

number

+

+

0

+

裁切源图像时需要裁切的高度。

+

dx

+

number

+

+

0

+

绘制区域左上角在x轴的位置。

+

dy

+

number

+

+

0

+

绘制区域左上角在y 轴的位置。

+

dWidth

+

number

+

+

0

+

绘制区域的宽度。

+

dHeight

+

number

+

+

0

+

绘制区域的高度。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct Index { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() => { + this.offContext.drawImage( this.img,0,0,400,200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915180.png) + + +### createImageData + +createImageData\(width: number, height: number\): Object + +根据宽高创建ImageData对象,请参考[ImageData](/pages/010c0202010508)。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认

+

描述

+

width

+

number

+

+

0

+

ImageData的宽度。

+

height

+

number

+

+

0

+

ImageData的高度。

+
+ + +### createImageData + +createImageData\(imageData: ImageData\): Object + +根据已创建的ImageData对象创建新的ImageData对象,请参考[ImageData](/pages/010c0202010508)。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认

+

描述

+

imagedata

+

ImageData

+

+

null

+

被复制的ImageData对象。

+
+ + +### getImageData + +getImageData\(sx: number, sy: number, sw: number, sh: number\): Object + +以当前canvas指定区域内的像素创建[ImageData](/pages/010c0202010508)对象。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

sx

+

number

+

+

0

+

需要输出的区域的左上角x坐标。

+

sy

+

number

+

+

0

+

需要输出的区域的左上角y坐标。

+

sw

+

number

+

+

0

+

需要输出的区域的宽度。

+

sh

+

number

+

+

0

+

需要输出的区域的高度。

+
+ + +### putImageData + +putImageData\(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number\): void + +使用[ImageData](/pages/010c0202010508)数据填充新的矩形区域。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

imagedata

+

Object

+

+

null

+

包含像素值的ImageData对象。

+

dx

+

number

+

+

0

+

填充区域在x轴方向的偏移量。

+

dy

+

number

+

+

0

+

填充区域在y轴方向的偏移量。

+

dirtyX

+

number

+

+

0

+

源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。

+

dirtyY

+

number

+

+

0

+

源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。

+

dirtyWidth

+

number

+

+

imagedata的宽度

+

源图像数据矩形裁切范围的宽度。

+

dirtyHeight

+

number

+

+

imagedata的高度

+

源图像数据矩形裁切范围的高度。

+
+ +- 示例 + + ``` + @Entry + @Component + struct PutImageData { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var imageData = this.offContext.createImageData(100, 100) + for (var i = 0; i < imageData.data.length; i += 4) { + imageData.data[i + 0] = 255 + imageData.data[i + 1] = 0 + imageData.data[i + 2] = 255 + imageData.data[i + 3] = 255 + } + this.offContext.putImageData(imageData, 10, 10) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075170.png) + + +### restore + +restore\(\): void + +对保存的绘图上下文进行恢复。 + +- 示例 + + ``` + @Entry + @Component + struct Restore { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.restore() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + +### save + +save\(\): void + +对当前的绘图上下文进行保存。 + +- 示例 + + ``` + @Entry + @Component + struct Restore { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.save() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + +### createLinearGradient + +createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): void + +创建一个线性渐变色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x0

+

number

+

+

0

+

起点的x轴坐标。

+

y0

+

number

+

+

0

+

起点的y轴坐标。

+

x1

+

number

+

+

0

+

终点的x轴坐标。

+

y1

+

number

+

+

0

+

终点的y轴坐标。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreateLinearGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.offContext.createLinearGradient(50,0, 300,100) + this.gra.addColorStop(0.0, 'red') + this.gra.addColorStop(0.5, 'white') + this.gra.addColorStop(1.0, 'green') + this.offContext.fillStyle = grad + this.offContext.fillRect(0, 0, 500, 500) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915162.png) + + +### createRadialGradient + +createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number\): void + +创建一个径向渐变色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x0

+

number

+

+

0

+

起始圆的x轴坐标。

+

y0

+

number

+

+

0

+

起始圆的y轴坐标。

+

r0

+

number

+

+

0

+

起始圆的半径。必须是非负且有限的。

+

x1

+

number

+

+

0

+

终点圆的x轴坐标。

+

y1

+

number

+

+

0

+

终点圆的y轴坐标。

+

r1

+

number

+

+

0

+

终点圆的半径。必须为非负且有限的。

+
+ +- 示例 + + ``` + @Entry + @Component + struct CreateRadialGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.offContext.createRadialGradient(200,200,50, 200,200,200) + this.gra.addColorStop(0.0, 'red') + this.gra.addColorStop(0.5, 'white') + this.gra.addColorStop(1.0, 'green') + this.offContext.fillStyle = grad + this.offContext.fillRect(0, 0, 500, 500) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555179.png) + + +## CanvasPattern + +一个Object对象, 通过[createPattern](#section660873113512)方法创建。 + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.Lottie.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.Lottie.md" new file mode 100644 index 0000000000000000000000000000000000000000..d2c37d7d5a166fe2c49eb8b231ba9e457b69848e --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/04.Lottie.md" @@ -0,0 +1,1331 @@ +--- +title: Lottie +permalink: /pages/010c0202010504 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# Lottie + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +Lottie为三方开源库,依赖Canvas与RenderingContext。 + +## 权限列表 + +无 + +## 导入模块 + +``` +import lottie from 'lottie-web' +``` + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>'lottie-web' 名字以实际生态发布后的命名为准。 + +## lottie.loadAnimation + +loadAnimation\( + +path: string, container: object, render: string, loop: boolean, autoplay: boolean, name: string \): AnimationItem + +加载动画,须提前声明Animator\('\_\_lottie\_ets'\)对象,并在Canvas完成布局后调用。可配合Canvas组件生命周期接口使用,比如onAppear\(\)与onPageShow\(\)。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

path

+

string

+

+

hap包内动画资源文件路径,仅支持json格式。示例:path: "common/lottie/data.json"

+

container

+

object

+

+

canvas绘图上下文,声明范式需提前声明CanvasRenderingContext2D。

+

render

+

string

+

+

渲染类型,仅支持“canvas”。

+

loop

+

boolean | number

+

+

动画播放结束后,是否循环播放,默认值true。值类型为number,且大于等于1时为设置的重复播放的次数。

+

autoplay

+

boolean

+

+

是否自动播放动画,默认值true。

+

name

+

string

+

+

开发者自定义的动画名称,后续支持通过该名称引用控制动画,默认为空。

+

initialSegment

+

[number, number]

+

+

指定动画播放的起始帧号,指定动画播放的结束帧号。

+
+ + +## lottie.destroy + +destroy\(name: string\): void + +销毁动画,页面退出时,必须调用。可配合Canvas组件生命周期接口使用,比如onDisappear\(\)与onPageHide\(\)。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,同loadAnimation接口参数name, 缺省时销毁所有动画。

+
+ +- 示例 + + ``` + import lottie from 'lottie-web' + + @Entry + @Component + struct Index { + private controller: CanvasRenderingContext2D = new CanvasRenderingContext2D() + private animateName: string = "animate" + private animatePath: string = "common/lottie/data.json" + private animateItem: any = null + + private onPageHide(): void { + console.log('onPageHide') + lottie.destroy() + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.controller) + .width('30%') + .height('20%') + .backgroundColor('#0D9FFB') + .onAppear(() => { + console.log('canvas onAppear'); + this.animateItem = lottie.loadAnimation({ + container: this.controller, + renderer: 'canvas', + loop: true, + autoplay: true, + name: this.animateName, + path: this.animatePath, + }) + }) + + Animator('__lottie_ets') // declare Animator('__lottie_ets') when use lottie + Button('load animation') + .onClick(() => { + if (this.animateItem != null) { + this.animateItem.destroy() + this.animateItem = null + } + this.animateItem = lottie.loadAnimation({ + container: this.controller, + renderer: 'canvas', + loop: true, + autoplay: true, + name: this.animateName, + path: this.animatePath, + initialSegment: [10, 50], + }) + }) + + Button('destroy animation') + .onClick(() => { + lottie.destroy(this.animateName) + this.animateItem = null + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/lottie-ark-2-0-canvas-ui-animate.gif) + + +## lottie.play + +play\(name: string\): void + +播放指定动画。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名, 同loadAnimation接口参数name,缺省时播放所有动画。

+
+ +- 示例 + + ``` + lottie.play(this.animateName) + ``` + + +## lottie.pause + +pause\(name: string\): void + +暂停指定动画,下次调用lottie.play\(\)从当前帧开始。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,同loadAnimation接口入参name,缺省时暂停所有动画。

+
+ +- 示例 + + ``` + lottie.pause(this.animateName) + ``` + + +## lottie.togglePause + +togglePause\(name: string\): void + +暂停或播放指定动画,等效于lottie.play\(\)与lottie.pause\(\)切换调用。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,同loadAnimation接口参数name,缺省时停止所有动画。

+
+ +- 示例 + + ``` + lottie.togglePause(this.animateName) + ``` + + +## lottie.stop + +stop\(name: string\): void + +停止指定动画,下次调用lottie.play\(\)从第一帧开始。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,同loadAnimation接口参数name,缺省时停止所有动画。

+
+ +- 示例 + + ``` + lottie.stop(this.animateName) + ``` + + +## lottie.setSpeed + +setSpeed\(speed: number, name: string\): void + +设置指定动画播放速度。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

speed

+

number

+

+

值为浮点类型, speed>0正向播放, speed<0反向播放, speed=0暂停播放, speed=1.0/-1.0正常速度播放。

+

name

+

string

+

+

被指定的动画,同loadAnimation接口参数name,缺省时停止所有动画。

+
+ +- 示例 + + ``` + lottie.setSpeed(5, this.animateName) + ``` + + +## lottie.setDirection + +setDirection\(direction: AnimationDirection, name: string\): void + +设置指定动画播放顺序。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

direction

+

AnimationDirection

+

+

1为正向,-1为反向; 当设置为反向时,从当前播放进度开始回播直到首帧,loop值为true时可无限倒放;speed<0叠加时也是倒放。

+

AnimationDirection:1 | -1

+

name

+

string

+

+

被指定的动画名,同loadAnimation接口参数name,缺省时设置所有动画方向。

+
+ + +- 示例 + + ``` + lottie.setDirection(-1, this.controlName) + ``` + + +## AnimationItem + +loadAnimation接口的返回对象,具有属性与接口。属性描述如下: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名称

+

参数类型

+

参数描述

+

name

+

string

+

动画名称。

+

isLoaded

+

boolean

+

动画是否已加载。

+

currentFrame

+

number

+

当前播放的帧号, 默认精度为>=0.0的浮点数, 调用setSubframe(false)后精度为去小数点后的正整数。

+

currentRawFrame

+

number

+

当前播放帧数, 精度为>=0.0的浮点数。

+

firstFrame

+

number

+

当前播放片段的第一帧帧号。

+

totalFrames

+

number

+

当前播放片段的总帧数。

+

frameRate

+

number

+

帧率 (frame/s)。

+

frameMult

+

number

+

帧率 (frame/ms)。

+

playSpeed

+

number

+

值为浮点类型, speed>0正向播放, speed<0反向播放, speed=0暂停播放, speed=1.0 | -1.0正常速度播放。

+

playDirection

+

number

+

播放方向, 1为正放, -1为倒放。

+

playCount

+

number

+

动画完成播放的次数。

+

isPaused

+

boolean

+

当前动画是否已暂停, 值为true动画已暂停。

+

autoplay

+

boolean

+

加载动画后是否自动播放, 若值为false需要再调用play()接口开始播放。

+

loop

+

boolean | number

+

类型为boolean时是否循环播放, 类型为number时播放次数。

+

renderer

+

any

+

动画渲染对象, 根据渲染类型而定。

+

animationID

+

string

+

动画ID。

+

timeCompleted

+

number

+

当前动画片段完成单次播放的帧数, 受AnimationSegment设置影响, 与totalFrames属性值相同。

+

segmentPos

+

number

+

当前动画片段序号, 值为>=0的正整数。

+

isSubframeEnabled

+

boolean

+

关联了currentFrame的精度是否为浮点数。

+

segments

+

AnimationSegment | AnimationSegment[]

+

当前动画的播放片段。

+
+ +## AnimationItem.play + +play\(name?: string\): void + +播放动画。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ +- 示例 + + ``` + this.anim.play() + ``` + + +## AnimationItem.destroy + +destroy\(name?: string\): void + +销毁动画。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ +- 示例 + + ``` + this.anim.destroy() + ``` + + +## AnimationItem.pause + +pause\(name?: string\): void + +暂停动画,下次调用play接口从当前帧开始播放。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ +- 示例 + + ``` + this.anim.pause() + ``` + + +## AnimationItem.togglePause + +togglePause\(name?: string\): void + +暂停或播放动画,等效于play接口与pause接口之间轮换调用。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ +- 示例 + + ``` + this.anim.togglePause() + ``` + + +## AnimationItem.stop + +stop\(name?: string\): void + +停止动画,下次调用play接口从第一帧开始播放。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ +- 示例 + + ``` + this.anim.stop() + ``` + + +## AnimationItem.setSpeed + +setSpeed\(speed: number\): void + +设置动画播放速度。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

speed

+

number

+

+

值为浮点类型, speed>0正向播放, speed<0反向播放, speed=0暂停播放, speed=1.0 | -1.0正常速度播放。

+
+ +- 示例 + + ``` + this.anim.setSpeed(5); + ``` + + +## AnimationItem.setDirection + +setDirection\(direction: AnimationDirection\): void + +设置动画播放顺序。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

direction

+

AnimationDirection

+

+

1为正向,-1为反向; 当设置为反向时,从当前播放进度开始回播直到首帧,loop值为true时可无限倒放;speed<0叠加时也是倒放。

+

AnimationDirection:1 | -1。

+
+ + +- 示例 + + ``` + this.anim.setDirection(-1) + ``` + + +## AnimationItem.goToAndStop + +goToAndStop\(value: number, isFrame: boolean\): void + +设置动画停止在指定帧或时间进度。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

value

+

number

+

+

帧号(值大于等于0)或时间进度(ms)。

+

isFrame

+

boolean

+

+

true: 按指定帧控制,false:按指定时间控制,缺省默认false。

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ + +- 示例 + + ``` + // 按帧号控制 + this.anim.goToAndStop(25, true) + // 按时间进度控制 + this.anim.goToAndStop(300, false, this.animateName) + ``` + + +## AnimationItem.goToAndPlay + +goToAndPlay\(value: number, isFrame: boolean\): void + +设置动画从指定帧或时间进度开始播放。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

value

+

number

+

+

帧号(值大于等于0)或时间进度(ms)

+

isFrame

+

boolean

+

+

true:按指定帧控制, false:按指定时间控制,缺省默认false。

+

name

+

string

+

+

被指定的动画名,缺省默认为空。

+
+ + +- 示例 + + ``` + // 按帧号控制 + this.anim.goToAndPlay(25, true) + // 按时间进度控制 + this.anim.goToAndPlay(300, false, this.animateName) + ``` + + +## AnimationItem.playSegments + +playSegments\(segments: AnimationSegment | AnimationSegment\[\], forceFlag: boolean\): void + +设置动画仅播放指定片段。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

segments

+

AnimationSegment = [number, number] | AnimationSegment[]

+

+

片段或片段列表;

+

如果片段列表全部播放完毕后,下轮循环播放仅播放最后一个片段

+

forceFlag

+

boolean

+

+

true:即时生效播放,false:延迟到下轮循环播放再生效

+
+ + +- 示例 + + ``` + // 指定播放片段 + this.anim.playSegments([10, 20], false) + // 指定播放片段列表 + this.anim.playSegments([[0, 5], [20, 30]], true) + ``` + + +## AnimationItem.resetSegments + +resetSegments\(forceFlag: boolean\): void + +重置动画播放片段,播放全帧。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

forceFlag

+

boolean

+

+

true:即时生效播放,false:延迟到下轮循环播放再生效

+
+ + +- 示例 + + ``` + this.anim.resetSegments(true) + ``` + + +## AnimationItem.resize + +resize\(\): void + +刷新动画布局。 + +- 示例 + + ``` + this.anim.resize() + ``` + + +## AnimationItem.setSubframe + +setSubframe\(useSubFrame: boolean\): void + +设置属性currentFrame的精度显示浮点数。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

useSubFrames

+

boolean

+

+

currentFrame属性默认显示浮点数,该接口参数将影响currentFrame属性的精度。

+

true:属性currentFrame显示浮点。

+

false:属性currentFrame去浮点数显示整数。

+
+ + +- 示例 + + ``` + this.anim.setSubframe(false) + ``` + + +## AnimationItem.getDuration + +getDuration\(inFrames?: boolean\): void + +获取动画单次完整播放的时间\(与播放速度无关\)或帧数, 与Lottie.loadAnimation接口入参initialSegment有关。 + +- 参数 + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

inFrames

+

boolean

+

+

true:获取帧数, false:获取时间(单位ms),缺省默认false。

+
+ + +- 示例 + + ``` + this.anim.setSubframe(true) + ``` + + +## AnimationItem.addEventListener + +addEventListener\(name: AnimationEventName, callback: AnimationEventCallback\): \(\) =\> void + +添加侦听事件, 事件完成后会触发指定回调函数。返回可删除该侦听事件的函数对象。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

AnimationEventName

+

+

指定动画事件类型,Lottie内置动画事件类型AnimationEventName:

+

'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images'

+

callback

+

AnimationEventCallback<T>

+

+

用户自定义回调函数

+
+ + +- 示例 + + ``` + private callbackItem: any = function() { + console.log("grunt loopComplete") + } + let delFunction = this.animateItem.addEventListener('loopComplete', this.callbackItem) + + // 删除侦听 + delFunction() + ``` + + +## AnimationItem.removeEventListener + +removeEventListener\(name: AnimationEventName, callback?: AnimationEventCallback\): void + +删除侦听事件。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

AnimationEventName

+

+

指定动画事件类型,Lottie内置动画事件类型AnimationEventName:

+

'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images'

+

callback

+

AnimationEventCallback<T>

+

+

用户自定义回调函数;缺省为空时, 删除此事件的所有回调函数。

+
+ + +- 示例 + + ``` + this.animateItem.removeEventListener('loopComplete', this.callbackItem) + ``` + + +## AnimationItem.triggerEvent + +triggerEvent\(name: AnimationEventName, args: T\): void + +直接触发指定事件的所有已设置的回调函数。 + +- 参数 + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

描述

+

name

+

AnimationEventName

+

+

指定动画事件类型

+

+

args

+

any

+

+

用户自定义回调参数

+
+ + +- 示例 + + ``` + private triggerCallBack: any = function(item) { + console.log("trigger loopComplete, name:" + item.name) + } + + this.animateItem.addEventListener('loopComplete', this.triggerCallBack) + this.animateItem.triggerEvent('loopComplete', this.animateItem) + this.animateItem.removeEventListener('loopComplete', this.triggerCallBack) + ``` + + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.Path2D\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.Path2D\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..8713d5fe2949b2d0fe1ac961b7cac07644962849 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/05.Path2D\345\257\271\350\261\241.md" @@ -0,0 +1,963 @@ +--- +title: Path2D对象 +permalink: /pages/010c0202010505 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# Path2D对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +路径对象,支持通过对象的接口进行路径的描述,并通过Canvas的stroke接口进行绘制。 + +## addPath + +addPath\(path: Object\): void + +将另一个路径添加到当前的路径对象中。 + +- 参数 + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

path

+

Object

+

+

null

+

需要添加到当前路径的路径对象

+
+ +- 示例 + + ``` + @Entry + @Component + struct AddPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z") + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.addPath(this.path2Da) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595216.png) + + +## closePath + +closePath\(\): void + +将路径的当前点移回到路径的起点,当前点到起点间画一条直线。如果形状已经闭合或只有一个点,则此功能不执行任何操作。 + +- 示例 + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(200, 100) + this.path2Db.lineTo(300, 100) + this.path2Db.lineTo(200, 200) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/unnaming-(4).png) + + +## moveTo + +moveTo\(x: number, y: number\): void + +将路径的当前坐标点移动到目标点,移动过程中不绘制线条。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

目标点X轴坐标

+

y

+

number

+

+

0

+

目标点Y轴坐标

+
+ +- 示例 + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(50, 100) + this.path2Db.lineTo(250, 100) + this.path2Db.lineTo(150, 200) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237475113.png) + + +## lineTo + +lineTo\(x: number, y: number\): void + +从当前点绘制一条直线到目标点。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

目标点X轴坐标

+

y

+

number

+

+

0

+

目标点Y轴坐标

+
+ +- 示例 + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(100, 100) + this.path2Db.lineTo(100, 200) + this.path2Db.lineTo(200, 200) + this.path2Db.lineTo(200, 100) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/unnaming-(3).png) + + +## bezierCurveTo + +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void + +创建三次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cp1x

+

number

+

+

0

+

第一个贝塞尔参数的x坐标值。

+

cp1y

+

number

+

+

0

+

第一个贝塞尔参数的y坐标值。

+

cp2x

+

number

+

+

0

+

第二个贝塞尔参数的x坐标值。

+

cp2y

+

number

+

+

0

+

第二个贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ + +- 示例 + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(10, 10) + this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915158.png) + + +## quadraticCurveTo + +quadraticCurveTo\(cpx: number, cpy: number, x: number ,y: number\): void + +创建二次贝赛尔曲线的路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

cpx

+

number

+

+

0

+

贝塞尔参数的x坐标值。

+

cpy

+

number

+

+

0

+

贝塞尔参数的y坐标值。

+

x

+

number

+

+

0

+

路径结束时的x坐标值。

+

y

+

number

+

+

0

+

路径结束时的y坐标值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(10, 10) + this.path2Db.quadraticCurveTo(100, 100, 200, 20) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001237555151.png) + + +## arc + +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: number\): void + +绘制弧线路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

弧线圆心的x坐标值。

+

y

+

number

+

+

0

+

弧线圆心的y坐标值。

+

radius

+

number

+

+

0

+

弧线的圆半径。

+

startAngle

+

number

+

+

0

+

弧线的起始弧度。

+

endAngle

+

number

+

+

0

+

弧线的终止弧度。

+

anticlockwise

+

boolean

+

+

false

+

是否逆时针绘制圆弧。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.arc(100, 75, 50, 0, 6.28);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595214.png) + + +## arcTo + +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void + +依据圆弧经过的点和圆弧半径创建圆弧路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x1

+

number

+

+

0

+

圆弧经过的第一个点的x坐标值。

+

y1

+

number

+

+

0

+

圆弧经过的第一个点的y坐标值。

+

x2

+

number

+

+

0

+

圆弧经过的第二个点的x坐标值。

+

y2

+

number

+

+

0

+

圆弧经过的第二个点的y坐标值。

+

radius

+

number

+

+

0

+

圆弧的圆半径值。

+
+ +- 示例 + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.arcTo(150, 20, 150, 70, 50) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755172.png) + + +## ellipse + +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: number\): void + +在规定的矩形区域绘制一个椭圆。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

椭圆圆心的x轴坐标。

+

y

+

number

+

+

0

+

椭圆圆心的y轴坐标。

+

radiusX

+

number

+

+

0

+

椭圆x轴的半径长度。

+

radiusY

+

number

+

+

0

+

椭圆y轴的半径长度。

+

rotation

+

number

+

+

0

+

椭圆的旋转角度,单位为弧度。

+

startAngle

+

number

+

+

0

+

椭圆绘制的起始点角度,以弧度表示。

+

endAngle

+

number

+

+

0

+

椭圆绘制的结束点角度,以弧度表示。

+

anticlockwise

+

number

+

+

0

+

是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0)

+
+ +- 示例 + + ``` + @Entry + @Component + struct Ellipse { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193075154.png) + + +## rect + +rect\(x: number, y: number, width: number, height: number\): void + +创建矩形路径。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

x

+

number

+

+

0

+

指定矩形的左上角x坐标值。

+

y

+

number

+

+

0

+

指定矩形的左上角y坐标值。

+

width

+

number

+

+

0

+

指定矩形的宽度。

+

height

+

number

+

+

0

+

指定矩形的高度。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Rect { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.rect(20, 20, 100, 100);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192755174.png) + + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.CanvasGradient\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.CanvasGradient\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..318ba073670aafcdb78c13d1107ed8dbd38a5784 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/06.CanvasGradient\345\257\271\350\261\241.md" @@ -0,0 +1,99 @@ +--- +title: CanvasGradient对象 +permalink: /pages/010c0202010506 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# CanvasGradient对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +渐变对象。 + +## addColorStop + +addColorStop\(offset: number, color: string\): void + +设置渐变断点值,包括偏移和颜色。 + +- 参数 + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

必填

+

默认值

+

描述

+

offset

+

number

+

+

0

+

设置渐变点距离起点的位置占总体长度的比例,范围为0到1。

+

color

+

string

+

+

'ffffff'

+

设置渐变的颜色。

+
+ +- 示例 + + ``` + @Entry + @Component + struct Page45 { + private settings: RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createLinearGradient(50,0, 300,100) + this.gra.addColorStop(0.0, 'red') + this.gra.addColorStop(0.5, 'white') + this.gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') + } + } + ``` + + ![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192915130.png) + + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..0ff118e9fef79b7c9aeff009b83002fb97f151bf --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/07.ImageBitmap\345\257\271\350\261\241.md" @@ -0,0 +1,120 @@ +--- +title: ImageBitmap对象 +permalink: /pages/010c0202010507 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# ImageBitmap对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +图片对象。 + +## 接口 + +ImageBitmap\(src: string\) + +- 参数 + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

src

+

string

+

+

-

+

图片对象所在的路径。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

默认值

+

必填

+

描述

+

width

+

Length

+

0px

+

+

图片的宽度。

+

height

+

Length

+

0px

+

+

图片的高度。

+
+ +示例 + +``` +@Entry +@Component +struct DrawImageExample { + private settings:RenderingContextSettings = new RenderingContextSettings(true,true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/example.jpg") + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.drawImage( this.img,0,0,400,200) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001192595194.png) + diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.ImageData\345\257\271\350\261\241.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.ImageData\345\257\271\350\261\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..86ec27e253f3c809783edc4604d5d69b233219e3 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\347\273\204\344\273\266/05.\347\224\273\345\270\203\347\273\204\344\273\266/08.ImageData\345\257\271\350\261\241.md" @@ -0,0 +1,54 @@ +--- +title: ImageData对象 +permalink: /pages/010c0202010508 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# ImageData对象 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +CanvasImageData对象可以存储canvas渲染的像素数据。 + +## 属性 + + + + + + + + + + + + + + + + + + + +

属性

+

类型

+

描述

+

width

+

number

+

矩形区域实际像素宽度。

+

height

+

number

+

矩形区域实际像素高度。

+

data

+

<Uint8ClampedArray>

+

一维数组,保存了相应的颜色数据,数据值范围为0到255。

+
+ diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" similarity index 32% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" index 2b7c8d6d53fbea85c5c19411dd8aaff1ec8e6673..82652b7eb2174f19af0627b95745c95b8d0cd553 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/01.\345\261\236\346\200\247\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 属性动画 -permalink: /pages/000b01010300 +permalink: /pages/010c02020201 navbar: true sidebar: true prev: true @@ -9,66 +9,68 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 属性动画 +# 属性动画 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 组件的通用属性发生变化时,可以创建属性动画进行渐变,提升用户体验。 - -

名称

+ - - - - - - - - - - - - - - - - - - - - - - - @@ -77,75 +79,75 @@ date: 2021-12-30 18:31:41 - Curve枚举说明 -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

duration

+

duration

number

+

number

1000

+

1000

单位为毫秒,默认动画时长为1000毫秒。

+

单位为毫秒,默认动画时长为1000毫秒。

curve

+

curve

Curve

+

Curve

Linear

+

Linear

默认曲线为线性,有效值参见Curve说明。

+

默认曲线为线性,有效值参见Curve说明。

delay

+

delay

number

+

number

0

+

0

单位为毫秒,默认不延时播放。

+

单位为毫秒,默认不延时播放。

iterations

+

iterations

number

+

number

1

+

1

默认播放一次,设置为-1时表示无限次播放。

+

默认播放一次,设置为-1时表示无限次播放。

playMode

+

playMode

PlayMode

+

PlayMode

Normal

+

Normal

设置动画播放模式,默认播放完成后重头开始播放。

+

设置动画播放模式,默认播放完成后重头开始播放。

名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" similarity index 38% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" index a1eed96b9610e8efc47524426744da14206dc0d4..92e861209a7b0131eddd62f26415744d3cca865d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/02.\346\230\276\345\274\217\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 显式动画 -permalink: /pages/000b01010301 +permalink: /pages/010c02020202 navbar: true sidebar: true prev: true @@ -9,21 +9,23 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 显式动画 +# 显式动画 - -

名称

描述

+

描述

Linear

+

Linear

表示动画从头到尾的速度都是相同的。

+

表示动画从头到尾的速度都是相同的。

Ease

+

Ease

表示动画以低速开始,然后加快,在结束前变慢,CubicBezier(0.25, 0.1, 0.25, 1.0)。

+

表示动画以低速开始,然后加快,在结束前变慢,CubicBezier(0.25, 0.1, 0.25, 1.0)。

EaseIn

+

EaseIn

表示动画以低速开始,CubicBezier(0.42, 0.0, 1.0, 1.0)。

+

表示动画以低速开始,CubicBezier(0.42, 0.0, 1.0, 1.0)。

EaseOut

+

EaseOut

表示动画以低速结束,CubicBezier(0.0, 0.0, 0.58, 1.0)。

+

表示动画以低速结束,CubicBezier(0.0, 0.0, 0.58, 1.0)。

EaseInOut

+

EaseInOut

表示动画以低速开始和结束,CubicBezier(0.42, 0.0, 0.58, 1.0)。

+

表示动画以低速开始和结束,CubicBezier(0.42, 0.0, 0.58, 1.0)。

FastOutSlowIn

+

FastOutSlowIn

标准曲线,cubic-bezier(0.4, 0.0, 0.2, 1.0)。

+

标准曲线,cubic-bezier(0.4, 0.0, 0.2, 1.0)。

LinearOutSlowIn

+

LinearOutSlowIn

减速曲线,cubic-bezier(0.0, 0.0, 0.2, 1.0)。

+

减速曲线,cubic-bezier(0.0, 0.0, 0.2, 1.0)。

FastOutLinearIn

+

FastOutLinearIn

加速曲线,cubic-bezier(0.4, 0.0, 1.0, 1.0)。

+

加速曲线,cubic-bezier(0.4, 0.0, 1.0, 1.0)。

ExtremeDeceleration

+

ExtremeDeceleration

急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。

+

急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。

Sharp

+

Sharp

锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。

+

锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。

Rhythm

+

Rhythm

节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。

+

节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。

Smooth

+

Smooth

平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。

+

平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。

Friction

+

Friction

阻尼曲线,CubicBezier(0.2, 0.0, 0.2, 1.0)。

+

阻尼曲线,CubicBezier(0.2, 0.0, 0.2, 1.0)。

接口名称

+>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + + - - - @@ -33,69 +35,68 @@ date: 2021-12-30 18:31:41 - 属性 - -

接口名称

功能描述

+

功能描述

animateTo(value: AnimationOption, event: ()=> void) : void

+

animateTo(value: AnimationOption, event: ()=> void) : void

提供全局animateTo显式动画接口来指定由于闭包代码导致的状态变化插入过渡动效。

-

event指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。

+

提供全局animateTo显式动画接口来指定由于闭包代码导致的状态变化插入过渡动效。

+

event指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。

属性名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104,16 +105,15 @@ date: 2021-12-30 18:31:41 - 接口 - -

属性名称

属性类型

+

属性类型

默认值

+

默认值

描述

+

描述

duration

+

duration

number

+

number

1000

+

1000

动画持续时间,单位为毫秒。

+

动画持续时间,单位为毫秒。

tempo

+

tempo

number

+

number

1.0

+

1.0

动画的播放速度,值越大动画播放越快,值越小播放越慢,为0时无动画效果。

+

动画的播放速度,值越大动画播放越快,值越小播放越慢,为0时无动画效果。

curve

+

curve

Curve | Curves

+

Curve | Curves

Linear

+

Linear

动画曲线。

+

动画曲线。

delay

+

delay

number

+

number

0

+

0

单位为ms(毫秒),默认不延时播放。

+

单位为ms(毫秒),默认不延时播放。

iterations

+

iterations

number

+

number

1

+

1

默认播放一次,设置为-1时表示无限次播放。

+

默认播放一次,设置为-1时表示无限次播放。

playMode

+

playMode

PlayMode

+

PlayMode

Normal

+

Normal

设置动画播放模式,默认播放完成后重头开始播放。

+

设置动画播放模式,默认播放完成后重头开始播放。

名称

+ - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" index af4e3ca2c13338f2ca2a4b900ad23905ba8f742b..51bb92183f1571ef5a8ccecbe90505776a49fbe0 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/01.\351\241\265\351\235\242\351\227\264\350\275\254\345\234\272.md" @@ -1,6 +1,6 @@ --- title: 页面间转场 -permalink: /pages/000b0101030200 +permalink: /pages/010c0202020301 navbar: true sidebar: true prev: true @@ -9,33 +9,35 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 页面间转场 +# 页面间转场 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 页面转场通过在全局pageTransition方法内配置页面入场组件和页面退场组件来自定义页面转场动效。 - -

名称

功能描述

+

功能描述

onFinish() => void

+

onFinish() => void

动效播放完成回调。

+

动效播放完成回调。

组件名称

+ - - - - - - - - @@ -43,61 +45,60 @@ date: 2021-12-30 18:31:41 - 动效参数说明 - -

名称

参数

+

参数

参数描述

+

参数描述

PageTransitionEnter

+

PageTransitionEnter

Object

+

Object

页面入场组件,用于自定义当前页面的入场效果,详见动效参数说明

+

页面入场组件,用于自定义当前页面的入场效果,详见动效参数说明

PageTransitionExit

+

PageTransitionExit

Object

+

Object

页面退场组件,用于自定义当前页面的退场效果,详见动效参数说明

+

页面退场组件,用于自定义当前页面的退场效果,详见动效参数说明

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -106,21 +107,20 @@ date: 2021-12-30 18:31:41 - RouteType枚举说明 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

type

+

type

RouteType

+

RouteType

-

+

-

+

不配置时表明pop为push时效果的逆播。

+

不配置时表明pop为push时效果的逆播。

duration

+

duration

number

+

number

1000

+

1000

+

动画时长,单位为毫秒。

+

动画时长,单位为毫秒。

curve

+

curve

Curve | Curves

+

Curve | Curves

Linear

+

Linear

+

动画曲线,有效值参见Curve 说明。

+

动画曲线,有效值参见Curve 说明。

delay

+

delay

number

+

number

0

+

0

+

动画延迟时长,单位为毫秒,默认不延时播放。

+

动画延迟时长,单位为毫秒,默认不延时播放。

名称

+ - - - - - @@ -131,71 +131,70 @@ date: 2021-12-30 18:31:41 PageTransitionEnter和PageTransitionExit组件支持的属性: - -

名称

描述

+

描述

Pop

+

Pop

PageA跳转到PageB时,PageA为Exit+Push,PageB为Enter+Push。

+

PageA跳转到PageB时,PageA为Exit+Push,PageB为Enter+Push。

Push

+

Push

PageB返回至PageA时,PageA为Enter+Pop,PageB为Exit+Pop。

+

PageB返回至PageA时,PageA为Enter+Pop,PageB为Exit+Pop。

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - @@ -203,31 +202,30 @@ PageTransitionEnter和PageTransitionExit组件支持的属性: - SlideEffect枚举说明 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

slide

+

slide

SlideEffect

+

SlideEffect

Right

+

Right

+

设置转场的滑入效果,有效值参见SlideEffect说明。

+

设置转场的滑入效果,有效值参见SlideEffect说明。

translate

+

translate

{

-

x? : number,

-

y? : number,

-

z? : number

-

}

+

{

+

x? : number,

+

y? : number,

+

z? : number

+

}

-

+

-

+

设置页面转场时的平移效果,为入场时起点和退场时终点的值,和slide同时设置时默认生效slide。

+

设置页面转场时的平移效果,为入场时起点和退场时终点的值,和slide同时设置时默认生效slide。

scale

+

scale

{

-

x? : number,

-

y? : number,

-

z? : number,

-

centerX? : number,

-

centerY? : number

-

}

+

{

+

x? : number,

+

y? : number,

+

z? : number,

+

centerX? : number,

+

centerY? : number

+

}

-

+

-

+

设置页面转场时的缩放效果,为入场时起点和退场时终点的值。

+

设置页面转场时的缩放效果,为入场时起点和退场时终点的值。

opacity

+

opacity

number

+

number

1

+

1

+

设置入场的起点透明度值或者退场的终点透明度值。

+

设置入场的起点透明度值或者退场的终点透明度值。

名称

+ - - - - - - - - - @@ -238,21 +236,20 @@ PageTransitionEnter和PageTransitionExit组件支持的属性: PageTransitionEnter和PageTransitionExit组件支持的事件: - -

名称

描述

+

描述

Left

+

Left

设置到入场时表示从左边滑入,出场时表示滑出到左边。

+

设置到入场时表示从左边滑入,出场时表示滑出到左边。

Right

+

Right

设置到入场时表示从右边滑入,出场时表示滑出到右边。

+

设置到入场时表示从右边滑入,出场时表示滑出到右边。

Top

+

Top

设置到入场时表示从上边滑入,出场时表示滑出到上边。

+

设置到入场时表示从上边滑入,出场时表示滑出到上边。

Bottom

+

Bottom

设置到入场时表示从下边滑入,出场时表示滑出到下边。

+

设置到入场时表示从下边滑入,出场时表示滑出到下边。

事件

+ - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" index 74bb310f1e0373e35a61710284dfc865ea097ba8..9657b8d6522b82827d0a617e6f97e4e7e4049413 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/02.\347\273\204\344\273\266\345\206\205\350\275\254\345\234\272.md" @@ -1,6 +1,6 @@ --- title: 组件内转场 -permalink: /pages/000b0101030201 +permalink: /pages/010c0202020302 navbar: true sidebar: true prev: true @@ -9,32 +9,34 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 组件内转场 +# 组件内转场 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 组件转场主要通过transition属性进行配置转场参数,在组件插入和删除时进行过渡动效,主要用于容器组件子组件插入删除时提升用户体验(需要配合animateTo才能生效,动效时长、曲线、延时跟随animateTo中的配置)。 ## 属性 - -

事件

功能描述

+

功能描述

onEnter(type: RouteType, progress: number) => void

+

onEnter(type: RouteType, progress: number) => void

回调入参为当前入场动画的归一化进度[0 - 1]。

+

回调入参为当前入场动画的归一化进度[0 - 1]。

onExit(type: RouteType, progress: number) => void

+

onExit(type: RouteType, progress: number) => void

回调入参为当前退场动画的归一化进度[0 - 1]。

+

回调入参为当前退场动画的归一化进度[0 - 1]。

名称

+ - - - - - - - @@ -42,91 +44,90 @@ date: 2021-12-30 18:31:41 - transition入参说明 - -

名称

参数类型

+

参数类型

默认值

+

默认值

参数描述

+

参数描述

transition

+

transition

Object

+

Object

-

+

-

所有参数均为可选参数,详细描述见transition入参说明

+

所有参数均为可选参数,详细描述见transition入参说明

参数名称

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -135,26 +136,25 @@ date: 2021-12-30 18:31:41 - TransitionType枚举说明 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

type

+

type

TransitionType

+

TransitionType

All

+

All

+

默认包括组件新增和删除。

-
说明:

不指定Type时说明插入删除使用同一种效果。

+

默认包括组件新增和删除。

+
说明:

不指定Type时说明插入删除使用同一种效果。

opacity

+

opacity

number

+

number

1

+

1

+

设置组件转场时的透明度效果,为插入时起点和删除时终点的值。

+

设置组件转场时的透明度效果,为插入时起点和删除时终点的值。

translate

+

translate

{

-

x? : number,

-

y? : number,

-

z? : number

-

}

+

{

+

x? : number,

+

y? : number,

+

z? : number

+

}

-

+

-

+

设置组件转场时的平移效果,为插入时起点和删除时终点的值。

+

设置组件转场时的平移效果,为插入时起点和删除时终点的值。

scale

+

scale

{

-

x? : number,

-

y? : number,

-

z? : number,

-

centerX? : number,

-

centerY? : number

-

}

+

{

+

x? : number,

+

y? : number,

+

z? : number,

+

centerX? : number,

+

centerY? : number

+

}

-

+

-

+

设置组件转场时的缩放效果,为插入时起点和删除时终点的值。

+

设置组件转场时的缩放效果,为插入时起点和删除时终点的值。

rotate

+

rotate

{

-

x?: number,

-

y?: number,

-

z?: number,

-

angle?: Angle,

-

centerX?: Length,

-

centerY?: Length

-

}

+

{

+

x?: number,

+

y?: number,

+

z?: number,

+

angle?: Angle,

+

centerX?: Length,

+

centerY?: Length

+

}

-

+

-

+

设置组件转场时的旋转效果,为插入时起点和删除时终点的值。

+

设置组件转场时的旋转效果,为插入时起点和删除时终点的值。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" similarity index 42% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" index 99d9062abd9806a6256a765fa6220f2515663962..ce7d20674b608a54fe39bbb3cfe4b0dbf9a3cf9e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/03.\350\275\254\345\234\272\345\212\250\347\224\273/03.\345\205\261\344\272\253\345\205\203\347\264\240\350\275\254\345\234\272.md" @@ -1,6 +1,6 @@ --- title: 共享元素转场 -permalink: /pages/000b0101030202 +permalink: /pages/010c0202020303 navbar: true sidebar: true prev: true @@ -9,33 +9,35 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 共享元素转场 +# 共享元素转场 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 共享元素转场支持页面间的转场,如当前页面的图片转场至下一页面中。 ## 属性 - -

名称

描述

+

描述

All

+

All

指定当前的Transition动效生效在组件的所有变化场景。

+

指定当前的Transition动效生效在组件的所有变化场景。

Insert

+

Insert

指定当前的Transition动效生效在组件的插入场景。

+

指定当前的Transition动效生效在组件的插入场景。

Delete

+

Delete

指定当前的Transition动效生效在组件的删除场景。

+

指定当前的Transition动效生效在组件的删除场景。

名称

+ - - - - - - - @@ -43,50 +45,49 @@ date: 2021-12-30 18:31:41 - options参数说明 - -

名称

参数

+

参数

默认值

+

默认值

参数描述

+

参数描述

sharedTransition

+

sharedTransition

id: string,

-

options?: Object

+

id: string,

+

options?: Object

-

+

-

两个页面的组件配置为同一个id,则转场过程中会进行共享元素转场,配置为空字符串时不会有共享元素转场效果。

+

两个页面的组件配置为同一个id,则转场过程中会进行共享元素转场,配置为空字符串时不会有共享元素转场效果。

参数名称

+ - - - - - - - - - - - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" similarity index 35% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" index 3c0b5c1b06f320708e6575f9862da1a6035a1d62..669115750a2795519c19d56fd8ec1baed303ec89 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/04.\350\267\257\345\276\204\345\212\250\347\224\273.md" @@ -1,6 +1,6 @@ --- title: 路径动画 -permalink: /pages/000b01010303 +permalink: /pages/010c02020204 navbar: true sidebar: true prev: true @@ -9,46 +9,48 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 路径动画 +# 路径动画 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 设置组件进行位移动画时的运动路径。 ## 属性 - -

参数名称

参数类型

+

参数类型

默认值

+

默认值

必填

+

必填

参数描述

+

参数描述

duration

+

duration

number

+

number

1000

+

1000

+

单位为毫秒,默认动画时长为1000毫秒。

+

单位为毫秒,默认动画时长为1000毫秒。

curve

+

curve

Curve | Curves

+

Curve | Curves

Linear

+

Linear

+

默认曲线为线性,有效值参见Curve说明。

+

默认曲线为线性,有效值参见Curve说明。

delay

+

delay

number

+

number

0

+

0

+

单位为毫秒,默认不延时播放。

+

单位为毫秒,默认不延时播放。

名称

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" similarity index 36% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" index 1d061c1b151c4b71a891db85075dbcaa3bb9d544..325382b23dac4e3f4a0591194c19a077bbe27452 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/05.\347\237\251\351\230\265\345\217\230\346\215\242.md" @@ -1,6 +1,6 @@ --- title: 矩阵变换 -permalink: /pages/000b01010304 +permalink: /pages/010c02020205 navbar: true sidebar: true prev: true @@ -9,17 +9,20 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 矩阵变换 +# 矩阵变换 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 导入模块 ``` -import matrix4 from '@ohos.matrix4' +import Matrix4 from '@ohos.matrix4' ``` -## 权限 +## 权限列表 无 @@ -31,31 +34,30 @@ Matrix的构造函数,可以通过传入的参数创建一个四阶矩阵, - 参数 - -

名称

参数类型

+

参数类型

默认值

+

默认值

描述

+

描述

motionPath

+

motionPath

{

-

path: string,

-

from?: number,

-

to?: number,

-

rotatable?: boolean

-

}

-
说明:

path中支持通过start和end进行起点和终点的替代,如:

-

'Mstart.x start.y L50 50 Lend.x end.y Z'。

+

{

+

path: string,

+

from?: number,

+

to?: number,

+

rotatable?: boolean

+

}

+
说明:

path中支持通过start和end进行起点和终点的替代,如:

+

'Mstart.x start.y L50 50 Lend.x end.y Z'。

{

-

"",

-

0.0,

-

1.0,

-

false

-

}

+

{

+

"",

+

0.0,

+

1.0,

+

false

+

}

设置组件的运动路径,入参说明如下:

-
  • path:位移动画的运动路径,使用svg路径字符串。
  • from:运动路径的起点,默认为0.0。
  • to:运动路径的终点,默认为1.0。
  • rotatable:是否跟随路径进行旋转。
+

设置组件的运动路径,入参说明如下:

+
  • path:位移动画的运动路径,使用svg路径字符串。
  • from:运动路径的起点,默认为0.0。
  • to:运动路径的终点,默认为1.0。
  • rotatable:是否跟随路径进行旋转。

参数名

+ - - - - - - - - - @@ -63,16 +65,15 @@ Matrix的构造函数,可以通过传入的参数创建一个四阶矩阵, - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

array

+

array

Array<number>

+

Array<number>

+

[1, 0, 0, 0,

-

0, 1, 0, 0,

-

0, 0, 1, 0,

-

0, 0, 0, 1]

+

[1, 0, 0, 0,

+

0, 1, 0, 0,

+

0, 0, 1, 0,

+

0, 0, 0, 1]

参数为长度为16(4*4)的number数组, 详情见参数描述

+

参数为长度为16(4*4)的number数组, 详情见参数描述

类型

+ - - - @@ -80,159 +81,158 @@ Matrix的构造函数,可以通过传入的参数创建一个四阶矩阵, - 参数描述 - -

类型

说明

+

说明

Object

+

Object

根据入参创建的四阶矩阵对象。

+

根据入参创建的四阶矩阵对象。

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -241,7 +241,6 @@ Matrix的构造函数,可以通过传入的参数创建一个四阶矩阵, - 示例 ``` - import Matrix4 from '@ohos.matrix4' // 创建一个四阶矩阵 let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, @@ -258,16 +257,15 @@ Matrix的初始化函数,可以返回一个单位矩阵对象。 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

m00

+

m00

number

+

number

+

x轴缩放值,单位矩阵默认为1。

+

x轴缩放值,单位矩阵默认为1。

m01

+

m01

number

+

number

+

第2个值,xyz轴旋转会影响这个值。

+

第2个值,xyz轴旋转会影响这个值。

m02

+

m02

number

+

number

+

第3个值,xyz轴旋转会影响这个值。

+

第3个值,xyz轴旋转会影响这个值。

m03

+

m03

number

+

number

+

无实际意义。

+

无实际意义。

m10

+

m10

number

+

number

+

第5个值,xyz轴旋转会影响这个值。

+

第5个值,xyz轴旋转会影响这个值。

m11

+

m11

number

+

number

+

y轴缩放值,单位矩阵默认为1。

+

y轴缩放值,单位矩阵默认为1。

m12

+

m12

number

+

number

+

第7个值,xyz轴旋转会影响这个值。

+

第7个值,xyz轴旋转会影响这个值。

m13

+

m13

number

+

number

+

无实际意义。

+

无实际意义。

m20

+

m20

number

+

number

+

第9个值,xyz轴旋转会影响这个值。

+

第9个值,xyz轴旋转会影响这个值。

m21

+

m21

number

+

number

+

第10个值,xyz轴旋转会影响这个值。

+

第10个值,xyz轴旋转会影响这个值。

m22

+

m22

number

+

number

+

z轴缩放值,单位矩阵默认为1。

+

z轴缩放值,单位矩阵默认为1。

m23

+

m23

number

+

number

+

无实际意义。

+

无实际意义。

m30

+

m30

number

+

number

+

x轴平移值,单位px,单位矩阵默认为0。

+

x轴平移值,单位px,单位矩阵默认为0。

m31

+

m31

number

+

number

+

y轴平移值,单位px,单位矩阵默认为0。

+

y轴平移值,单位px,单位矩阵默认为0。

m32

+

m32

number

+

number

+

z轴平移值,单位px,单位矩阵默认为0。

+

z轴平移值,单位px,单位矩阵默认为0。

m33

+

m33

number

+

number

+

齐次坐标下生效,产生透视投影效果。

+

齐次坐标下生效,产生透视投影效果。

类型

+ - - - @@ -277,8 +275,7 @@ Matrix的初始化函数,可以返回一个单位矩阵对象。 ``` // matrix1 和 matrix2 效果一致 - import Matrix4 from '@ohos.matrix4' - let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, + let matrix1 = Matrix4.init([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) @@ -294,16 +291,15 @@ Matrix的拷贝函数,可以拷贝一份当前的矩阵对象。 - 返回值 - -

类型

说明

+

说明

Object

+

Object

单位矩阵对象。

+

单位矩阵对象。

类型

+ - - - @@ -312,7 +308,6 @@ Matrix的拷贝函数,可以拷贝一份当前的矩阵对象。 - 示例 ``` - import Matrix4 from '@ohos.matrix4' @Entry @Component struct Test { @@ -333,8 +328,8 @@ Matrix的拷贝函数,可以拷贝一份当前的矩阵对象。 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/s1.png) + +![](/images/application-dev/reference/arkui-ts/figures/s1.png) ## Matrix4 @@ -347,28 +342,27 @@ Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个 - 参数 - -

类型

说明

+

说明

Object

+

Object

当前矩阵的拷贝对象。

+

当前矩阵的拷贝对象。

参数名

+ - - - - - - - - - @@ -376,16 +370,15 @@ Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

matrix

+

matrix

Matrix4

+

Matrix4

+

-

+

-

待叠加的矩阵对象。

+

待叠加的矩阵对象。

类型

+ - - - @@ -394,7 +387,6 @@ Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个 - 示例 ``` - import Matrix4 from '@ohos.matrix4' @Entry @Component struct Test { @@ -411,8 +403,8 @@ Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/q1.png) + +![](/images/application-dev/reference/arkui-ts/figures/q1.png) ### invert @@ -423,16 +415,15 @@ Matrix的逆函数,可以返回一个当前矩阵对象的逆矩阵,即效 - 返回值 - -

类型

说明

+

说明

Object

+

Object

矩阵叠加后的对象。

+

矩阵叠加后的对象。

类型

+ - - - @@ -441,7 +432,6 @@ Matrix的逆函数,可以返回一个当前矩阵对象的逆矩阵,即效 - 示例 ``` - import Matrix4 from '@ohos.matrix4' // matrix1(宽放大2倍) 和 matrix2(宽缩小2倍) 效果相反 let matrix1 = Matrix4.identity().scale({x:2}) let matrix2 = matrix1.invert() @@ -456,50 +446,49 @@ Matrix的平移函数,可以为当前矩阵增加x轴/Y轴/Z轴平移效果。 - 参数 - -

类型

说明

+

说明

Object

+

Object

当前矩阵的逆矩阵对象。

+

当前矩阵的逆矩阵对象。

参数名

+ - - - - - - - - - - - - - - - - - - - @@ -508,16 +497,15 @@ Matrix的平移函数,可以为当前矩阵增加x轴/Y轴/Z轴平移效果。 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

x

+

x

number

+

number

+

0

+

0

x轴的平移距离,单位px。

+

x轴的平移距离,单位px。

y

+

y

number

+

number

+

0

+

0

y轴的平移距离,单位px。

+

y轴的平移距离,单位px。

z

+

z

number

+

number

+

0

+

0

z轴的平移距离,单位px。

+

z轴的平移距离,单位px。

类型

+ - - - @@ -526,7 +514,6 @@ Matrix的平移函数,可以为当前矩阵增加x轴/Y轴/Z轴平移效果。 - 示例 ``` - import Matrix4 from '@ohos.matrix4' @Entry @Component struct Test { @@ -540,8 +527,8 @@ Matrix的平移函数,可以为当前矩阵增加x轴/Y轴/Z轴平移效果。 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/s3.png) + +![](/images/application-dev/reference/arkui-ts/figures/s3.png) ### scale @@ -552,72 +539,71 @@ Matrix的缩放函数,可以为当前矩阵增加x轴/Y轴/Z轴缩放效果。 - 参数 - -

类型

说明

+

说明

Object

+

Object

增加好平移效果后的矩阵对象。

+

增加好平移效果后的矩阵对象。

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -626,16 +612,15 @@ Matrix的缩放函数,可以为当前矩阵增加x轴/Y轴/Z轴缩放效果。 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

x

+

x

number

+

number

+

1

+

1

x轴的缩放倍数。

+

x轴的缩放倍数。

y

+

y

number

+

number

+

1

+

1

y轴的缩放倍数。

+

y轴的缩放倍数。

z

+

z

number

+

number

+

1

+

1

z轴的缩放倍数。

+

z轴的缩放倍数。

centerX

+

centerX

number

+

number

+

0

+

0

变换中心点x轴坐标。

+

变换中心点x轴坐标。

centerY

+

centerY

number

+

number

+

0

+

0

变换中心点y轴坐标。

+

变换中心点y轴坐标。

类型

+ - - - @@ -644,7 +629,6 @@ Matrix的缩放函数,可以为当前矩阵增加x轴/Y轴/Z轴缩放效果。 - 示例 ``` - import Matrix4 from '@ohos.matrix4' @Entry @Component struct Test { @@ -658,8 +642,8 @@ Matrix的缩放函数,可以为当前矩阵增加x轴/Y轴/Z轴缩放效果。 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/s4-(1).png) + +![](/images/application-dev/reference/arkui-ts/figures/s4-(1).png) ### rotate @@ -670,83 +654,82 @@ Matrix的旋转函数,可以为当前矩阵增加x轴/Y轴/Z轴旋转效果。 - 参数 - -

类型

说明

+

说明

Object

+

Object

增加好缩放效果后的矩阵对象。

+

增加好缩放效果后的矩阵对象。

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -755,16 +738,15 @@ Matrix的旋转函数,可以为当前矩阵增加x轴/Y轴/Z轴旋转效果。 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

x

+

x

number

+

number

+

1

+

1

旋转轴向量x坐标。

+

旋转轴向量x坐标。

y

+

y

number

+

number

+

1

+

1

旋转轴向量y坐标。

+

旋转轴向量y坐标。

z

+

z

number

+

number

+

1

+

1

旋转轴向量z坐标。

+

旋转轴向量z坐标。

angle

+

angle

number

+

number

+

0

+

0

旋转角度。

+

旋转角度。

centerX

+

centerX

number

+

number

+

0

+

0

变换中心点x轴坐标。

+

变换中心点x轴坐标。

centerY

+

centerY

number

+

number

+

0

+

0

变换中心点y轴坐标。

+

变换中心点y轴坐标。

类型

+ - - - @@ -773,7 +755,6 @@ Matrix的旋转函数,可以为当前矩阵增加x轴/Y轴/Z轴旋转效果。 - 示例 ``` - import Matrix4 from '@ohos.matrix4' @Entry @Component struct Test { @@ -787,8 +768,8 @@ Matrix的旋转函数,可以为当前矩阵增加x轴/Y轴/Z轴旋转效果。 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/1-19.png) + +![](/images/application-dev/reference/arkui-ts/figures/1.png) ### transformPoint @@ -799,28 +780,27 @@ Matrix的坐标点转换函数,可以将当前的变换效果作用到一个 - 参数 - -

类型

说明

+

说明

Object

+

Object

增加好旋转效果后的矩阵对象。

+

增加好旋转效果后的矩阵对象。

参数名

+ - - - - - - - - - @@ -829,16 +809,15 @@ Matrix的坐标点转换函数,可以将当前的变换效果作用到一个 - 返回值 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

point

+

point

Point

+

Point

+

-

+

-

需要转换的坐标点。

+

需要转换的坐标点。

类型

+ - - - @@ -847,7 +826,6 @@ Matrix的坐标点转换函数,可以将当前的变换效果作用到一个 - 示例 ``` - import Matrix4 from '@ohos.matrix4' import prompt from '@system.prompt' @Entry @@ -864,7 +842,6 @@ Matrix的坐标点转换函数,可以将当前的变换效果作用到一个 } } ``` - - ![](/images/application-dev/reference/arkui-ts/figures/222.gif) - + +![](/images/application-dev/reference/arkui-ts/figures/222.gif) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" similarity index 40% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" index ebc8308695ca749604842b9658a2670a7def1e74..3f6e791d2a9141861502ef0cfd41780e07b28099 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\212\250\347\224\273/06.\346\217\222\345\200\274\350\256\241\347\256\227.md" @@ -1,6 +1,6 @@ --- title: 插值计算 -permalink: /pages/000b01010305 +permalink: /pages/010c02020206 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 插值计算 +# 插值计算 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 导入模块 @@ -31,28 +34,27 @@ init\(curve?: Curve\): Object - 参数 - -

类型

说明

+

说明

Point

+

Point

返回矩阵变换后的Point对象。

+

返回矩阵变换后的Point对象。

参数名

+ - - - - - - - - - @@ -71,39 +73,38 @@ steps\(count: number, end: boolean\): Object - 参数: - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

curve

+

curve

Curve

+

Curve

+

Linear

+

Linear

曲线对象。

+

曲线对象。

参数名

+ - - - - - - - - - - - - - - @@ -122,51 +123,50 @@ cubicBezier\(x1: number, y1: number, x2: number, y2: number\): Object - 参数 - -

参数名

类型

+

类型

必填

+

必填

默认值

+

默认值

说明

+

说明

count

+

count

number

+

number

+

-

+

-

阶梯的数量,需要为正整数。

+

阶梯的数量,需要为正整数。

end

+

end

boolean

+

boolean

+

true

+

true

在每个间隔的起点或是终点发生阶跃变化 ,默认值为true,即在终点发生阶跃变化。

+

在每个间隔的起点或是终点发生阶跃变化 ,默认值为true,即在终点发生阶跃变化。

参数名

+ - - - - - - - - - - - - - - - - - - - @@ -185,51 +185,50 @@ spring\(velocity: number, mass: number, stiffness: number, damping: number\): Ob - 参数 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

x1

+

x1

number

+

number

+

确定贝塞尔曲线第一点横坐标。

+

确定贝塞尔曲线第一点横坐标。

y1

+

y1

number

+

number

+

确定贝塞尔曲线第一点纵坐标。

+

确定贝塞尔曲线第一点纵坐标。

x2

+

x2

number

+

number

+

确定贝塞尔曲线第二点横坐标。

+

确定贝塞尔曲线第二点横坐标。

y2

+

y2

number

+

number

+

确定贝塞尔曲线第二点纵坐标。

+

确定贝塞尔曲线第二点纵坐标。

参数名

+ - - - - - - - - - - - - - - - - - - - @@ -252,18 +251,17 @@ let curve3 = Curves.cubicBezier(0.1, 0.0, 0.1, 1.0) // 创建一个三阶贝塞 曲线对象只能通过上面的接口创建。 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

velocity

+

velocity

number

+

number

+

初始速度。

+

初始速度。

mass

+

mass

number

+

number

+

质量。

+

质量。

stiffness

+

stiffness

number

+

number

+

刚度。

+

刚度。

damping

+

damping

number

+

number

+

阻尼。

+

阻尼。

接口名称

+ - - - @@ -305,5 +303,5 @@ struct ImageComponent { } ``` -![](/images/application-dev/reference/arkui-ts/figures/5-20.gif) +![](/images/application-dev/reference/arkui-ts/figures/5.gif) diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..8b86e23499cc51d196a5997d2ad74b42b2a6f0c2 --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" @@ -0,0 +1,347 @@ +--- +title: 警告弹窗 +permalink: /pages/010c02020301 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 警告弹窗 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +显示警告弹窗组件,可设置文本内容与响应回调。 + +## 属性 + +

接口名称

功能描述

+

功能描述

interpolate(time: number): number

+

interpolate(time: number): number

插值曲线的插值计算函数,可以通过传入的归一化时间参数返回当前的插值。

-

time: 当前的归一化时间参数,有效值范围0到1。

-

返回归一化time时间点对应的曲线插值。

+

插值曲线的插值计算函数,可以通过传入的归一化时间参数返回当前的插值。

+

time: 当前的归一化时间参数,有效值范围0到1。

+

返回归一化time时间点对应的曲线插值。

+ + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

参数描述

+

show

+

options: { paramObject1| paramObject2}

+

-

+

定义并显示AlertDialog组件。

+
+ +- paramObject1参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

title

+

string | Resource

+

+

-

+

弹窗标题。

+

message

+

string | Resource

+

+

-

+

弹窗内容。

+

autoCancel

+

boolean

+

+

true

+

点击遮障层时,是否关闭弹窗。

+

confirm

+

{

+

value: string | Resource,

+

fontColor?: Color | number | string | Resource,

+

backgroundColor?: Color | number | string | Resource,

+

action: () => void

+

}

+

+

-

+

确认按钮的文本内容、文本色、按钮背景色和点击回调。

+

cancel

+

() => void

+

+

-

+

点击遮障层关闭dialog时的回调。

+

alignment

+

DialogAlignment

+

+

DialogAlignment.Default

+

弹窗在竖直方向上的对齐方式。

+

offset

+

{

+

dx: Length | Resource,

+

dy: Length | Resource

+

}

+

+

-

+

弹窗相对alignment所在位置的偏移量。

+

gridCount

+

number

+

+

-

+

弹窗容器宽度所占用栅格数。

+
+ + +- paramObject2参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

title

+

string | Resource

+

+

-

+

弹窗标题。

+

message

+

string | Resource

+

+

-

+

弹窗内容。

+

autoCancel

+

boolean

+

+

true

+

点击遮障层时,是否关闭弹窗。

+

primaryButton

+

{

+

value: string | Resource,

+

fontColor?: Color | number | string | Resource,

+

backgroundColor?: Color | number | string | Resource,

+

action: () => void;

+

}

+

+

-

+

按钮的文本内容、文本色、按钮背景色和点击回调。

+

secondaryButton

+

+

{

+

value: string | Resource,

+

fontColor?: Color | number | string | Resource,

+

backgroundColor?: Color | number | string | Resource,

+

action: () => void;

+

}

+

+

-

+

按钮的文本内容、文本色、按钮背景色和点击回调。

+

cancel

+

() => void

+

+

-

+

点击遮障层关闭dialog时的回调。

+

alignment

+

DialogAlignment

+

+

DialogAlignment.Default

+

弹窗在竖直方向上的对齐方式。

+

offset

+

{

+

dx: Length | Resource,

+

dy: Length | Resource

+

}

+

+

-

+

弹窗相对alignment所在位置的偏移量。

+

gridCount

+

number

+

+

-

+

弹窗容器宽度所占用栅格数。

+
+ + +## 示例 + +``` +@Entry +@Component +struct AlertDialogExample { + build() { + Column({ space: 5 }) { + Button('one button dialog') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + confirm: { + value: 'button', + action: () => { + console.info('Button-clicking callback') + } + }, + cancel: () => { + console.info('Closed callbacks') + } + } + ) + }) + .backgroundColor(0x317aff) + Button('two button dialog') + .onClick(() => { + AlertDialog.show( + { + title: 'title', + message: 'text', + primaryButton: { + value: 'cancel', + action: () => { + console.info('Callback when the first button is clicked') + } + }, + secondaryButton: { + value: 'ok', + action: () => { + console.info('Callback when the second button is clicked') + } + }, + cancel: () => { + console.info('Closed callbacks') + } + } + ) + }).backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/AlertDialog.gif) + diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" similarity index 42% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" index 02eec38e3eb93d1e264198a353e03b3dbb2cd538..eab67de3a6bff117ef519731e50496c83f69cc6f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/02.\350\207\252\345\256\232\344\271\211\345\274\271\347\252\227.md" @@ -1,6 +1,6 @@ --- title: 自定义弹窗 -permalink: /pages/000b01010401 +permalink: /pages/010c02020302 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 自定义弹窗 +# 自定义弹窗 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 通过CustomDialogController类显示自定义弹窗。 @@ -21,86 +24,85 @@ CustomDialogController\(value:\{builder: CustomDialog, cancel?: \(\) =\> void, a - 参数 - -

参数名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108,31 +110,30 @@ CustomDialogController\(value:\{builder: CustomDialog, cancel?: \(\) =\> void, a - DialogAlignment枚举说明 - -

参数名

参数类型

+

参数类型

必填

+

必填

默认值

+

默认值

参数描述

+

参数描述

builder

+

builder

CustomDialog

+

+

-

+

-

自定义弹窗内容构造器。

+

自定义弹窗内容构造器。

cancel

+

cancel

() => void

+

() => void

+

-

+

-

点击遮障层退出时的回调。

+

点击遮障层退出时的回调。

autoCancel

+

autoCancel

boolean

+

boolean

+

true

+

true

是否允许点击遮障层退出。

+

是否允许点击遮障层退出。

alignment

+

alignment

DialogAlignment

+

DialogAlignment

+

DialogAlignment.Default

+

DialogAlignment.Default

弹窗在竖直方向上的对齐方式。

+

弹窗在竖直方向上的对齐方式。

offset

+

offset

{

-

dx: Length | Resource,

-

dy: Length | Resource

-

}

+

{

+

dx: Length | Resource,

+

dy: Length | Resource

+

}

+

-

+

-

弹窗相对alignment所在位置的偏移量。

+

弹窗相对alignment所在位置的偏移量。

customStyle

+

customStyle

boolean

+

boolean

+

false

+

false

弹窗容器样式是否自定义。

+

弹窗容器样式是否自定义。

名称

+ - - - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" index bf87a6b1fe95f7b491ed4d0d920a6578ceb1d46e..f9dfefc02e738ff387d26246e87edfc27ec735b7 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/03.\345\233\276\347\211\207\347\274\223\345\255\230.md" @@ -1,6 +1,6 @@ --- title: 图片缓存 -permalink: /pages/000b01010402 +permalink: /pages/010c02020303 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 图片缓存 +# 图片缓存 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从 API Version 7 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 导入模块 @@ -31,24 +34,23 @@ setImageCacheCount\(value: number\): void - 参数 - -

名称

描述

+

描述

Top

+

Top

垂直顶部对齐。

+

垂直顶部对齐。

Center

+

Center

垂直居中对齐。

+

垂直居中对齐。

Bottom

+

Bottom

垂直底部对齐。

+

垂直底部对齐。

Default

+

Default

默认对齐。

+

默认对齐。

参数名

+ - - - - - - - @@ -59,7 +61,6 @@ setImageCacheCount\(value: number\): void ``` // app.ets import app from '@system.app'; - export default { onCreate() { app.setImageCacheCount(100) // 设置解码后图片内存缓存上限为100张 @@ -80,24 +81,23 @@ setImageRawDataCacheSize\(value: number\): void - 参数 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

value

+

value

number

+

number

+

内存中解码后图片的缓存数量。

+

内存中解码后图片的缓存数量。

参数名

+ - - - - - - - @@ -129,24 +129,23 @@ setImageFileCacheSize\(value: number\): void - 参数 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

value

+

value

number

+

number

+

内存中解码前图片数据的缓存大小,单位为字节。

+

内存中解码前图片数据的缓存大小,单位为字节。

参数名

+ - - - - - - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" similarity index 41% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" index b3969d330f3ce507f34cb21e7339b2538f89adf5..2c4259c2ba81812f07438d5fbf6492e60ba89df5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\345\205\250\345\261\200UI\346\226\271\346\263\225/04.\345\252\222\344\275\223\346\237\245\350\257\242.md" @@ -1,6 +1,6 @@ --- title: 媒体查询 -permalink: /pages/000b01010403 +permalink: /pages/010c02020304 navbar: true sidebar: true prev: true @@ -9,9 +9,12 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- -# 媒体查询 +# 媒体查询 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ## 导入模块 @@ -31,24 +34,23 @@ matchMediaSync\(condition: string\): MediaQueryListener - 参数 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

value

+

value

number

+

number

+

图片文件的缓存大小,单位为字节。

+

图片文件的缓存大小,单位为字节。

参数名

+ - - - - - - - @@ -56,16 +58,15 @@ matchMediaSync\(condition: string\): MediaQueryListener - 返回值 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

condition

+

condition

string

+

string

+

媒体事件的匹配条件。

+

类型

+ - - - @@ -84,39 +85,38 @@ matchMediaSync\(condition: string\): MediaQueryListener ### 属性 - -

类型

说明

+

说明

MediaQueryListener

+

MediaQueryListener

媒体事件监听句柄,用于注册和去注册监听回调。

+

媒体事件监听句柄,用于注册和去注册监听回调。

名称

+ - - - - - - - - - - - - - - @@ -130,33 +130,32 @@ on\(type: 'change', callback: Callback\): void - 参数 - -

名称

参数类型

+

参数类型

可读

+

可读

可写

+

可写

说明

+

说明

matches

+

matches

boolean

+

boolean

+

+

是否符合匹配条件。

+

是否符合匹配条件。

media

+

media

string

+

string

+

+

媒体事件的匹配条件。

+

媒体事件的匹配条件。

参数名

+ - - - - - - - - - - - @@ -175,33 +174,32 @@ off\(type: 'change', callback?: Callback\): void - 参数 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

type

+

type

boolean

+

string

+

必须填写字符串'change'。

+

必须填写字符串'change'。

callback

+

callback

Callback<MediaQueryResult>

+

Callback<MediaQueryResult>

+

向媒体查询注册的回调。

+

向媒体查询注册的回调

参数名

+ - - - - - - - - - - - @@ -227,39 +225,38 @@ off\(type: 'change', callback?: Callback\): void ### 属性 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

type

+

type

boolean

+

boolean

+

必须填写字符串'change'。

+

必须填写字符串'change'。

callback

+

callback

Callback<MediaQueryResult>

+

Callback<MediaQueryResult>

+

需要去注册的回调,如果参数缺省则去注册该句柄下所有的回调。

+

需要去注册的回调,如果参数缺省则去注册该句柄下所有的回调。

名称

+ - - - - - - - - - - - - - - diff --git "a/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..eb611b06e6235b97d51eeaed5c0934d5f3d2c90c --- /dev/null +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/04.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" @@ -0,0 +1,304 @@ +--- +title: 文档中涉及到的内置枚举值 +permalink: /pages/010c02020401 +navbar: true +sidebar: true +prev: true +next: true +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 文档中涉及到的内置枚举值 + +## Alignment枚举说明 + +

名称

参数类型

+

参数类型

可读

+

可读

可写

+

可写

说明

+

说明

matches

+

matches

boolean

+

boolean

+

+

是否符合匹配条件。

+

是否符合匹配条件。

media

+

media

string

+

string

+

+

媒体事件的匹配条件。

+

媒体事件的匹配条件。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

TopStart

+

顶部起始端。

+

Top

+

顶部横向居中。

+

TopEnd

+

顶部尾端。

+

Start

+

起始端纵向居中。

+

Center

+

横向和纵向居中。

+

End

+

尾端纵向居中。

+

BottomStart

+

底部起始端。

+

Bottom

+

底部横向居中。

+

BottomEnd

+

底部尾端。

+
+ +## Axis枚举说明 + + + + + + + + + + + + +

名称

+

描述

+

Vertical

+

方向为纵向。

+

Horizontal

+

方向为横向。

+
+ +## ItemAlign枚举说明 + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Auto

+

使用Flex容器中默认配置。

+

Start

+

元素在Flex容器中,交叉轴方向首部对齐。

+

Center

+

元素在Flex容器中,交叉轴方向居中对齐。

+

End

+

元素在Flex容器中,交叉轴方向底部对齐。

+

Stretch

+

元素在Flex容器中,交叉轴方向拉伸填充,在未设置尺寸时,拉伸到容器尺寸。

+

Baseline

+

元素在Flex容器中,交叉轴方向文本基线对齐。

+
+ +## LineCapStyle枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Butt

+

分割线两端为平行线。

+

Round

+

分割线两端为半圆。

+

Square

+

分割线两端为平行线。

+
+ +## PlayMode枚举值说明 + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Normal

+

动画按正常播放。

+

Reverse

+

动画反向播放。

+

Alternate

+

动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。

+

AlternateReverse

+

动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。

+
+ +## ImageRepeat枚举说明 + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

X

+

只在水平轴上重复绘制图片。

+

Y

+

只在竖直轴上重复绘制图片。

+

XY

+

在两个轴上重复绘制图片。

+

NoRepeat

+

不重复绘制图片。

+
+ +## TextDecorationType枚举说明 + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

Underline

+

文字下划线修饰。

+

LineThrough

+

穿过文本的修饰线。

+

Overline

+

文字上划线修饰。

+

None

+

不使用文本装饰线。

+
+ +## TextCase枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Normal

+

保持文本原有大小写。

+

LowerCase

+

文本采用全小写。

+

UpperCase

+

文本采用全大写。

+
+ +## BarState枚举说明 + + + + + + + + + + + + + + + +

名称

+

描述

+

Off

+

不显示。

+

On

+

常驻显示。

+

Auto

+

按需显示(触摸时显示,2s后消失)。

+
+ diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" similarity index 97% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" index ff5cb72e7b98604c38eb22d8ced855e561af4ee0..4264ec159536e0a187b57ca41dcbd6def02bcfcb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/03.\345\272\224\347\224\250\345\274\200\345\217\221\345\214\205\347\273\223\346\236\204\350\257\264\346\230\216.md" @@ -1,6 +1,6 @@ --- title: 应用开发包结构说明 -permalink: /pages/000b02 +permalink: /pages/010c03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 包结构说明 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" similarity index 56% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" index 9a575dd5c61013ad5752e49fc51c492461998c18..9c6540690efb711067e69455472e11db7e0252f5 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/01.\345\270\270\350\247\201\351\227\256\351\242\230\346\246\202\350\277\260.md" @@ -1,6 +1,6 @@ --- title: 常见问题概述 -permalink: /pages/000b0300 +permalink: /pages/010c0401 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 常见问题概述 @@ -43,109 +43,109 @@ date: 2021-12-30 18:31:41 ### 轻量和小型系统 -- [安装hb过程中出现乱码、段错误](/pages/000b0301#section36351051193919) -- [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](/pages/000b0301#section48221013144011) -- [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](/pages/000b0301#section8692735427) -- [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](/pages/000b0301#section8692735427) -- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](/pages/000b0301#section870082884217) -- [安装python3过程中,提示“-bash: make: command not found”](/pages/000b0301#section198707170455) -- [安装python3过程中,提示“zlib not available”](/pages/000b0301#section85401445204518) -- [安装python3过程中,提示“No module named '\_ctypes'”](/pages/000b0301#section12202694460) -- [安装 kconfiglib时,遇到lsb\_release错误](/pages/000b0301#section5803174135115) -- [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](/pages/000b0301#section510820516515) +- [安装hb过程中出现乱码、段错误](/pages/010c0402#section36351051193919) +- [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](/pages/010c0402#section48221013144011) +- [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](/pages/010c0402#section8692735427) +- [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](/pages/010c0402#section8692735427) +- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](/pages/010c0402#section870082884217) +- [安装python3过程中,提示“-bash: make: command not found”](/pages/010c0402#section198707170455) +- [安装python3过程中,提示“zlib not available”](/pages/010c0402#section85401445204518) +- [安装python3过程中,提示“No module named '\_ctypes'”](/pages/010c0402#section12202694460) +- [安装 kconfiglib时,遇到lsb\_release错误](/pages/010c0402#section5803174135115) +- [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](/pages/010c0402#section510820516515) ## 编译构建子系统 ### 轻量和小型系统 -- [编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”](/pages/000b0302#section67961431372) -- [编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”](/pages/000b0302#section199631617371) -- [编译构建过程中,提示“line 77: mcopy: command not found”](/pages/000b0302#section937435175) -- [编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”](/pages/000b0302#section1115535018713) -- [编译构建过程中,提示“No module named 'Crypto'”](/pages/000b0302#section17982573813) -- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](/pages/000b0302#section1917790845) -- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](/pages/000b0302#section1917790845)” -- [编译构建过程中,提示找不到“-lgcc”](/pages/000b0302#section141771701647) -- [编译构建过程中,提示找不到“python”](/pages/000b0302#section51781202415) -- [编译构建过程中,提示找不到“python3”](/pages/000b0302#section1917950148) +- [编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”](/pages/010c0403#section67961431372) +- [编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”](/pages/010c0403#section199631617371) +- [编译构建过程中,提示“line 77: mcopy: command not found”](/pages/010c0403#section937435175) +- [编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”](/pages/010c0403#section1115535018713) +- [编译构建过程中,提示“No module named 'Crypto'”](/pages/010c0403#section17982573813) +- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](/pages/010c0403#section1917790845) +- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](/pages/010c0403#section1917790845)” +- [编译构建过程中,提示找不到“-lgcc”](/pages/010c0403#section141771701647) +- [编译构建过程中,提示找不到“python”](/pages/010c0403#section51781202415) +- [编译构建过程中,提示找不到“python3”](/pages/010c0403#section1917950148) ## 烧录 ### 轻量和小型系统 -- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](/pages/000b0303#section18988185615914) +- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](/pages/010c0404#section18988185615914) -- [烧写失败](/pages/000b0303#section1370982513317) -- [串口无回显](/pages/000b0303#section183421944953) -- [Windows电脑与单板网络连接失败](/pages/000b0303#section1215410450215) +- [烧写失败](/pages/010c0404#section1370982513317) +- [串口无回显](/pages/010c0404#section183421944953) +- [Windows电脑与单板网络连接失败](/pages/010c0404#section1215410450215) ## 内核 ### 基础内核 -- [LiteOS-A和LiteOS-M内核对外API的差异](/pages/000b0304#section447571122918) -- [如何分析线程栈溢出](/pages/000b0304#section8623141711293) +- [LiteOS-A和LiteOS-M内核对外API的差异](/pages/010c0405#section447571122918) +- [如何分析线程栈溢出](/pages/010c0405#section8623141711293) ### 文件系统 -- [Hi3516开源板以写的模式打开同一个文件失败(LiteOS-A)](/pages/000b0304#section517972255311) +- [Hi3516开源板以写的模式打开同一个文件失败(LiteOS-A)](/pages/010c0405#section517972255311) ### 芯片适配 -- [LiteOS内核已支持哪些硬件平台](/pages/000b0304#section868413518533) -- [LiteOS内核已支持哪几款芯片架构](/pages/000b0304#section1131661465417) +- [LiteOS内核已支持哪些硬件平台](/pages/010c0405#section868413518533) +- [LiteOS内核已支持哪几款芯片架构](/pages/010c0405#section1131661465417) ### 三方组件 -- [OpenHarmony已支持哪些三方组件](/pages/000b0304#section74138185411) -- [在OpenHarmony上使用OpenSSL,出现秘钥长度校验不正确](/pages/000b0304#section10564614135516) -- [setsockopt是否支持SO\_RCVBUF和SO\_SNDBUF选项](/pages/000b0304#section2093373215556) +- [OpenHarmony已支持哪些三方组件](/pages/010c0405#section74138185411) +- [在OpenHarmony上使用OpenSSL,出现秘钥长度校验不正确](/pages/010c0405#section10564614135516) +- [setsockopt是否支持SO\_RCVBUF和SO\_SNDBUF选项](/pages/010c0405#section2093373215556) ### 编译链接 -- [Arm Linux开发的应用程序,如何在LiteOS-A上运行](/pages/000b0304#section1164175713557) -- [OpenHarmony在什么系统下编译,使用什么编译器](/pages/000b0304#section132287223567) -- [LiteOS-M上使用单独编译成静态库的三方组件,出现三方组件中的全局变量值不正确,或调用三方组件的函数后系统卡死](/pages/000b0304#section15189154225619) -- [LiteOS-A生成目标可执行文件,提示 use VFP register arguments,xxx.o does not](/pages/000b0304#section193571012578) -- [clock\_gettime接口获取的时间打印不对](/pages/000b0304#section8973152015717) +- [Arm Linux开发的应用程序,如何在LiteOS-A上运行](/pages/010c0405#section1164175713557) +- [OpenHarmony在什么系统下编译,使用什么编译器](/pages/010c0405#section132287223567) +- [LiteOS-M上使用单独编译成静态库的三方组件,出现三方组件中的全局变量值不正确,或调用三方组件的函数后系统卡死](/pages/010c0405#section15189154225619) +- [LiteOS-A生成目标可执行文件,提示 use VFP register arguments,xxx.o does not](/pages/010c0405#section193571012578) +- [clock\_gettime接口获取的时间打印不对](/pages/010c0405#section8973152015717) ## 移植 -- [如何将用户的堆内存挂载进内核](/pages/000b0305#section21471536184914) +- [如何将用户的堆内存挂载进内核](/pages/010c0406#section21471536184914) ## 启动恢复 -- [系统启动过程中打印“parse failed!”错误后停止启动](/pages/000b0306#section835662214302) -- [系统启动过程未结束就自动重启,如此反复持续](/pages/000b0306#section3857921143117) -- [参数正确的情况下调用SetParameter/GetParameter返回失败](/pages/000b0306#section548818116328) +- [系统启动过程中打印“parse failed!”错误后停止启动](/pages/010c0407#section835662214302) +- [系统启动过程未结束就自动重启,如此反复持续](/pages/010c0407#section3857921143117) +- [参数正确的情况下调用SetParameter/GetParameter返回失败](/pages/010c0407#section548818116328) ## 系统服务 ### 公共基础库 -- [LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败](/pages/000b0307#section16520347131511) +- [LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败](/pages/010c0408#section16520347131511) ### 视觉应用常见问题 -- [是否存在一个全局变量,所有的页面都可以访问?](/pages/000b0307#section187297991718) -- [如何获取dom中的元素](/pages/000b0307#section1833493719175) -- [如何在页面间传值?](/pages/000b0307#section184283812183) -- [list如何滚动到某个item?](/pages/000b0307#section11897734131811) -- [text支持多行吗?](/pages/000b0307#section5872656121814) -- [为什么控件不显示?](/pages/000b0307#section7397125317107) -- [如何实现页面滑动?](/pages/000b0307#section338794422010) -- [Left、Top为什么不生效?](/pages/000b0307#section2597193611217) -- [动态绑定为什么不生效?](/pages/000b0307#section6939050172115) -- [如何实现相对定位和绝对定位?](/pages/000b0307#section5547311192215) -- [如何控制控件的显示与隐藏?](/pages/000b0307#section16107113352213) -- [使用Margin时,有什么注意事项?](/pages/000b0307#section1524910142314) -- [使用事件订阅时,有什么注意事项?](/pages/000b0307#section1537132012231) -- [使用动态绑定时,有什么注意事项?](/pages/000b0307#section96561452236) -- [swiper loop属性如何生效?](/pages/000b0307#section690166112414) -- [使用数组时,有什么注意事项?](/pages/000b0307#section1554552822414) +- [是否存在一个全局变量,所有的页面都可以访问?](/pages/010c0408#section187297991718) +- [如何获取dom中的元素](/pages/010c0408#section1833493719175) +- [如何在页面间传值?](/pages/010c0408#section184283812183) +- [list如何滚动到某个item?](/pages/010c0408#section11897734131811) +- [text支持多行吗?](/pages/010c0408#section5872656121814) +- [为什么控件不显示?](/pages/010c0408#section7397125317107) +- [如何实现页面滑动?](/pages/010c0408#section338794422010) +- [Left、Top为什么不生效?](/pages/010c0408#section2597193611217) +- [动态绑定为什么不生效?](/pages/010c0408#section6939050172115) +- [如何实现相对定位和绝对定位?](/pages/010c0408#section5547311192215) +- [如何控制控件的显示与隐藏?](/pages/010c0408#section16107113352213) +- [使用Margin时,有什么注意事项?](/pages/010c0408#section1524910142314) +- [使用事件订阅时,有什么注意事项?](/pages/010c0408#section1537132012231) +- [使用动态绑定时,有什么注意事项?](/pages/010c0408#section96561452236) +- [swiper loop属性如何生效?](/pages/010c0408#section690166112414) +- [使用数组时,有什么注意事项?](/pages/010c0408#section1554552822414) ### hdc -- [hdc\_std连接不到设备](/pages/000b0307#section1965012223257) -- [hdc\_std运行不了](/pages/000b0307#section1157575212515) +- [hdc\_std连接不到设备](/pages/010c0408#section1965012223257) +- [hdc\_std运行不了](/pages/010c0408#section1157575212515) diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" index c8d027797d18fc38a9fe827e4ee403a26799ebcc..1b811a57b0a7f1d57bf4146a86bb15df180fcd4e 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/02.\347\216\257\345\242\203\346\220\255\345\273\272\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 环境搭建常见问题 -permalink: /pages/000b0301 +permalink: /pages/010c0402 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 环境搭建常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" index ebe77f849585a87af5d4229e47b85c1870329867..3460ecd511073d4d6103eeaa27fe67b04abe3bcb 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/03.\347\274\226\350\257\221\346\236\204\345\273\272\345\255\220\347\263\273\347\273\237\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 编译构建子系统常见问题 -permalink: /pages/000b0302 +permalink: /pages/010c0403 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 编译构建子系统常见问题 @@ -40,7 +40,7 @@ date: 2021-12-30 18:31:41 - **解决办法:** - 卸载环境中ninja和gn,按照[获取工具](/pages/000a01)。 + 卸载环境中ninja和gn,按照[获取工具](/pages/010b02)。 ### 编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses” @@ -218,15 +218,19 @@ date: 2021-12-30 18:31:41 - **解决办法** - 请按照[安装Python环境](/pages/0001000102) + 请使用如下命令安装Python,下方以Python3.8为例。 + ``` + sudo apt-get install python3.8 + ``` - **可能原因2** + usr/bin目录下没有python软链接 ![](/images/device-dev/faqs/figures/reason-no-python-soft-link.png) - **解决办法** - usr/bin目录下没有python软链接,请运行以下命令添加软链接: + 请运行以下命令添加软链接: ``` # cd /usr/bin/ @@ -244,15 +248,17 @@ date: 2021-12-30 18:31:41 - **现象描述** - ![](/images/device-dev/faqs/figures/11.png) - + 安装python3过程中出现以下错误: + ``` + configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details + ``` - **可能原因** - 没有装python3。 + 环境中未安装“gcc”。 - **解决办法** - 请按照[安装python](/pages/0001000102)。 - + 1. 通过命令“apt-get install gcc”在线安装。 + 2. 完成后,重新安装python3。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" index 39c73a63a669748149da50af9da6a2f395c5c215..d1e713e9276e93ad5f0cac6e8957245d7bfead7b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/04.\347\203\247\345\275\225\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 烧录常见问题 -permalink: /pages/000b0303 +permalink: /pages/010c0404 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 烧录常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" index 7eb8094b816de45e3774e17c6f72a149097ce591..db3eeac915b1fe7c998bf20668973a92bb96ffb3 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/05.\345\206\205\346\240\270\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 内核常见问题 -permalink: /pages/000b0304 +permalink: /pages/010c0405 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 内核常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" index a23df13443eca49b0241183d68a025120571f1e8..26c5c428ff2bc6e9a7173b1d8199406f0bd29437 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/06.\347\247\273\346\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 移植常见问题 -permalink: /pages/000b0305 +permalink: /pages/010c0406 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 移植常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" index e8264a9b69b1392299d73e94812f1802bbff5e4c..2ff10b251beba94011149f37bb87c86fd3ba2767 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/07.\345\220\257\345\212\250\346\201\242\345\244\215\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 启动恢复常见问题 -permalink: /pages/000b0306 +permalink: /pages/010c0407 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 启动恢复常见问题 @@ -42,7 +42,7 @@ date: 2021-12-30 18:31:41 **可能原因** -被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](/pages/00040d01)描述)。 +被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](/pages/01050e02)描述)。 - 当该属性为0时,表示若当前服务进程退出,init不需要重启单板。 - 当该属性为1时,表示若当前服务进程退出,init需要重启单板。 diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" rename to "website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" index 9b7a229b3c7d9afadb6a885cff099a33a9070e3c..1f3711b30823daed1984cad368b31a4fe0806997 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/website/docs/01.OpenHarmony/12.\345\217\202\350\200\203/04.\345\270\270\350\247\201\351\227\256\351\242\230-\350\256\276\345\244\207\345\274\200\345\217\221/08.\347\263\273\347\273\237\345\272\224\347\224\250\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -1,6 +1,6 @@ --- title: 系统应用常见问题 -permalink: /pages/000b0307 +permalink: /pages/010c0408 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 系统应用常见问题 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" similarity index 80% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" index d2bc5330704dfa4495865244a29e518aefacc2d6..42cd9e8549cc9a38bd2c325334527025decf6d5a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/01.\345\217\202\344\270\216\350\264\241\347\214\256.md" @@ -1,6 +1,6 @@ --- title: 参与贡献 -permalink: /pages/000c00 +permalink: /pages/010d01 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 参与贡献 @@ -25,7 +25,7 @@ date: 2021-12-30 18:31:41 #### 行为准则 -OpenHarmony是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守OpenHarmony社区的[行为守则](/pages/000c01)。 +OpenHarmony是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守OpenHarmony社区的[行为守则](/pages/010d02)。 ### 找到感兴趣的SIG @@ -33,17 +33,17 @@ OpenHarmony是一个开源社区。它完全依赖于社区提供友好的开发 ### 开始贡献 -如何贡献代码,请参考[贡献代码](/pages/000c02)。 +如何贡献代码,请参考[贡献代码](/pages/010d03)。 ## 自测试验证 -如何根据测试需求开发相关测试用例,请参考[测试子系统](/pages/00000117)。 +如何根据测试需求开发相关测试用例,请参考[测试子系统](/pages/01010218)。 ## 贡献文档 -如何贡献文档,请参考[贡献文档](/pages/extra/7cdb15/)。 +如何贡献文档,请参考[贡献文档](/pages/extra/20a162/)。 ## 社区沟通与交流 -有关详细信息,请参考[社区沟通与交流](/pages/000c05)。 +有关详细信息,请参考[社区沟通与交流](/pages/010d06)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" index 6bb139f606a4fbcbe009a6db18ca6dbf91fecdfa..67861e0f46c78795647806f07276edc899a9d05d 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/02.\350\241\214\344\270\272\345\207\206\345\210\231.md" @@ -1,6 +1,6 @@ --- title: 行为准则 -permalink: /pages/000c01 +permalink: /pages/010d02 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 行为准则 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" similarity index 65% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" index e35359954fb5cbac8d0c775b7a6ebe8dd70897d9..d186eb39be9077a2e5f949546bd73033bcc2cb32 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/03.\350\264\241\347\214\256\344\273\243\347\240\201.md" @@ -1,6 +1,6 @@ --- title: 贡献代码 -permalink: /pages/000c02 +permalink: /pages/010d03 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 贡献代码 @@ -19,9 +19,9 @@ date: 2021-12-30 18:31:41 [OpenHarmony架构设计原则](https://gitee.com/openharmony/community/blob/master/sig/sig-QA/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.md) -[OpenHarmony API治理章程](/pages/extra/8f1b70/) +[OpenHarmony API治理章程](/pages/extra/d4794e/) -[OpenHarmony安全设计规范](/pages/extra/9fd3db/) +[OpenHarmony安全设计规范](/pages/extra/c86b06/) [OpenHarmony编译规范](https://gitee.com/openharmony/community/blob/master/sig/sig-QA/%E7%BC%96%E8%AF%91%E8%A7%84%E8%8C%83.md) @@ -29,21 +29,23 @@ date: 2021-12-30 18:31:41 请遵循OpenHarmony编程规范,进行代码开发、检视、测试,务必保持代码风格统一。 -- [C++语言编程规范](/pages/extra/65d115/) -- [C语言编程规范](/pages/extra/02fad4/) -- [JavaScript语言编程规范](/pages/extra/af38fc/) +- [C++语言编程规范](/pages/extra/fe3631/) +- [C语言编程规范](/pages/extra/3e68b2/) +- [JavaScript语言编程规范](/pages/extra/00dfbe/) - [Python语言编程规范](https://pep8.org/) -- [C&C++语言安全编程指南](/pages/extra/e48a5b/) -- [Java语言安全编程指南](/pages/extra/c4548f/) -- [Log打印规范](/pages/extra/b7c90f/) +- [C&C++语言安全编程指南](/pages/extra/c441f3/) +- [Java语言安全编程指南](/pages/extra/ce48a8/) +- [32/64位可移植编程规范](/pages/extra/4c0e99/) +- [HDF驱动编程规范](/pages/extra/94914e/) +- [Log打印规范](/pages/extra/779fcf/) ### 开源软件引入 -若要引入新的第三方开源软件到OpenHarmony项目中,请参考[第三方开源软件引入指导](/pages/extra/651de8/) +若要引入新的第三方开源软件到OpenHarmony项目中,请参考[第三方开源软件引入指导](/pages/extra/c986a5/) ## 贡献工作流 -有关详细信息,请参考[贡献流程](/pages/000c03)。 +有关详细信息,请参考[贡献流程](/pages/010d04)。 [代码门禁详细质量要求](https://gitee.com/openharmony/community/blob/master/sig/sig-QA/%E4%BB%A3%E7%A0%81%E9%97%A8%E7%A6%81%E8%A6%81%E6%B1%82.md)。 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" similarity index 95% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" index b52599adc9dbba9a2df436a05b1ee10df68a0108..4870b2983a406fce91caa6b37fea6bd361aa46c1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/04.\350\264\241\347\214\256\346\265\201\347\250\213.md" @@ -1,6 +1,6 @@ --- title: 贡献流程 -permalink: /pages/000c03 +permalink: /pages/010d04 navbar: true sidebar: true prev: true @@ -9,18 +9,10 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 贡献流程 -- [环境准备](#section124971410183614) -- [代码下载](#section6125202333611) -- [代码提交](#section338918220422) -- [创建Pull Request(如已通过repo工具自动创建PR,则此步忽略)](#section28261522124316) -- [门禁构建](#section981124754415) -- [CI门户](#section8563257123985) -- [代码审查](#section17823849145014) - ## 环境准备 - 针对Git的安装、环境配置及使用方法,请参考码云帮助中心的Git知识大全:[https://gitee.com/help/categories/43](https://gitee.com/help/categories/43) @@ -265,4 +257,4 @@ CI门户是为了便于开发者及时查看、分析每日构建和代码门禁 请参考码云帮助中心:[https://gitee.com/help/articles/4304](https://gitee.com/help/articles/4304) -**相关主题:[FAQ](/pages/000c06)** +**相关主题:[FAQ](/pages/010d07)** diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" index 27880856061f6d7e5fb11c761898369f52cca4fa..4b79f465e0b837b3c8632f019432d8fd9dfdf52f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/01.\345\206\231\344\275\234\350\247\204\350\214\203.md" @@ -1,6 +1,6 @@ --- title: 写作规范 -permalink: /pages/000c0400 +permalink: /pages/010d0501 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 写作规范 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" similarity index 96% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" index 45705c06e9a2600209b67c78afadc305fa533d47..98492e82682efb26a1edf7b6062cecc6daea7d7b 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/05.\350\264\241\347\214\256\346\226\207\346\241\243/02.\344\270\272\345\217\221\350\241\214\347\211\210\346\234\254\346\222\260\345\206\231\351\205\215\345\245\227\346\226\207\346\241\243.md" @@ -1,6 +1,6 @@ --- title: 为发行版本撰写配套文档 -permalink: /pages/000c0401 +permalink: /pages/010d0502 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 为发行版本撰写配套文档 @@ -40,13 +40,13 @@ date: 2021-12-30 18:31:41 如果你需要文档组织方面的帮助,请在`#SIG-Docs` ZULIK频道中提问求助。 -1. 参考[评审人沟通表](/pages/extra/0c10ad/),联系SIG Docs资料作者,沟通文档设计建议。 +1. 参考[评审人沟通表](/pages/extra/ca9a08/),联系SIG Docs资料作者,沟通文档设计建议。 2. 获取[文档模板](template),了解文档写作规范。 3. 尽可能为功能特性提供详细的文档及使用说明,完成功能特性初稿后,提交PR并在PR描述中提供对应的需求Issue链接。 ### 提交PR评审 -所有新增内容的PR评审,为确保技术描述准确性需要指定相应业务SIG的技术专家参与技术评审,同时指定SIG Docs的资料专家评审文档规范性内容,请参考[评审人沟通表](/pages/extra/0c10ad/)在PR评论区@相关专家。也可以在`#SIG-Docs` ZULIK频道中反馈评审需求。 +所有新增内容的PR评审,为确保技术描述准确性需要指定相应业务SIG的技术专家参与技术评审,同时指定SIG Docs的资料专家评审文档规范性内容,请参考[评审人沟通表](/pages/extra/ca9a08/)在PR评论区@相关专家。也可以在`#SIG-Docs` ZULIK频道中反馈评审需求。 在评审周期内,所有评审意见闭环修改后,该PR通过审核可以合并入仓的必要条件: @@ -63,7 +63,7 @@ date: 2021-12-30 18:31:41 OpenHarmony社区为开发者提供中文、英文的官方文档,中文文档完成评审、测试定稿后,可提交翻译需求Issue,由SIG Docs团队的翻译专家完成英文文档。 -翻译专家通过PR提交英文文档,并在PR描述中提供对应的中文需求Issue链接。为确保技术翻译描述准确性需要指定相应业务SIG的技术专家参与技术评审,可以是中文文档作者,请参考[评审人沟通表](/pages/extra/0c10ad/)在PR评论区@相关专家。 +翻译专家通过PR提交英文文档,并在PR描述中提供对应的中文需求Issue链接。为确保技术翻译描述准确性需要指定相应业务SIG的技术专家参与技术评审,可以是中文文档作者,请参考[评审人沟通表](/pages/extra/ca9a08/)在PR评论区@相关专家。 在评审周期内,所有评审意见闭环修改后,该PR通过审核可以合并入仓的必要条件: @@ -125,7 +125,7 @@ SIG Docs团队成员或文档贡献者或,配合各业务SIG团队,评审、 - 该页面对社区其他内容链接未产生影响,建议本地运行链接检查 - 整本手册Readme导航中更新目录 -更多详细规范请参考OpenHarmony社区文档[写作规范](/pages/000c0400)。 +更多详细规范请参考OpenHarmony社区文档[写作规范](/pages/010d0501)。 ### 翻译英文文档 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" index 67e71b5157a62f638560efe526fbc797d6a7a31b..166af9a5770fd51ff3ca5615de460b592192d089 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/06.\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" @@ -1,6 +1,6 @@ --- title: 社区沟通与交流 -permalink: /pages/000c05 +permalink: /pages/010d06 navbar: true sidebar: true prev: true @@ -9,7 +9,7 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # 社区沟通与交流 diff --git "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/07.FAQ.md" "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/07.FAQ.md" similarity index 90% rename from "website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/07.FAQ.md" rename to "website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/07.FAQ.md" index f85180aa21b6d67d4f75ebaf737694096e554081..de0ee806ed633d8952a8257d774899f33013f685 100644 --- "a/website/docs/01.\346\226\207\346\241\243/13.\350\264\241\347\214\256/07.FAQ.md" +++ "b/website/docs/01.OpenHarmony/13.\350\264\241\347\214\256/07.FAQ.md" @@ -1,6 +1,6 @@ --- title: FAQ -permalink: /pages/000c06 +permalink: /pages/010d07 navbar: true sidebar: true prev: true @@ -9,20 +9,10 @@ search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:41 +date: 2022-02-12 09:01:56 --- # FAQ -[多个代码仓存在编译依赖时如何同时发起构建](#section169732563435) - -[ `Signed-off-by`相关操作](#section-signed-off) - -[DCO校验异常处理](#section-dco) - -[回退提交](#section479422315253) - -[处理冲突](#section94417232274) - ## 多个代码仓存在编译依赖时如何同时发起构建 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" "b/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" deleted file mode 100644 index 54b277d2cbdc9c996a4f09bb88014dde17645f3d..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/02.\344\272\206\350\247\243OpenHarmony\347\263\273\347\273\237/26.\347\224\265\346\272\220\347\256\241\347\220\206\345\255\220\347\263\273\347\273\237.md" +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: 电源管理子系统 -permalink: /pages/00000119 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:27 ---- -# 电源管理子系统 - -- [简介](#section11660541593) -- [目录](#section19472752217) -- [使用说明](#section19959125052315) -- [相关仓](#section63151229062) - -## 简介 - -电源管理子系统提供如下功能: - -1. 重启系统。 -2. 管理休眠运行锁。 -3. 系统电源状态查询。 -4. 充电和电池状态查询和上报。 -5. 亮灭屏管理和亮度调节。 - -**图 1** 电源管理子系统架构图 - - -![](/images/readme/figures/电源管理子系统架构图.png) - -## 目录 - -``` -/base/powermgr -├── battery_manager # 电池服务组件 -│ ├── hdi # HDI层 -│ ├── interfaces # 接口层 -│ ├── sa_profile # SA配置文件 -│ ├── services # 服务层 -│ └── utils # 工具和通用层 -├── display_manager # 显示控制组件 -│ ├── interfaces # 接口层 -│ └── sa_profile # SA配置文件 -│ └── services # 服务层 -│ └── utils # 工具和通用层 -├── powermgr_lite # 轻量级电源管理组件 -│ ├── interfaces # 接口层 -│ └── services # 服务层 -└── power_manager # 电源管理服务组件 - ├── interfaces # 接口层 - ├── sa_profile # SA配置文件 - └── services # 服务层 - └── utils # 工具和通用层 -``` - -## 使用说明 - -开发者通过电源管理子系统提供的接口可以进行申请和释放休眠运行锁RunningLock、获取电池信息、亮度调节、重启设备、关机等操作。 - -## 相关仓 - -**电源管理子系统** - -powermgr\_battery\_manager - -powermgr\_power\_manager - -powermgr\_display\_manager - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\246\202\350\277\260.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\246\202\350\277\260.md" deleted file mode 100644 index 4153feb7687b544a0167265d0b57343ea790c293..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/01.\346\246\202\350\277\260.md" +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: 概述 -permalink: /pages/00010000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:27 ---- -# 概述 - -OpenHarmony轻量和小型系统适用于内存较小的IOT设备,本文选取了三款典型开发板:Hi3861 WLAN模组、Hi3516DV300、Hi3518EV300,并基于上述三款开发板进行开发介绍。 - -通过本文,开发者可以快速熟悉OpenHarmony轻量和小型系统的环境搭建、编译、烧录、调测以及简单应用及驱动开发等。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/02.Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/02.Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" deleted file mode 100644 index 795b9f92bdfe52ffe51cc906485ae29a6882c76c..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/02.Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Windows开发环境准备 -permalink: /pages/0001000101 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:28 ---- -# Windows开发环境准备 - -- [安装DevEco Device Tool](#zh-cn_topic_0000001058091994_section10761564496) - -系统要求: - -- Windows 10 64位系统。 -- 系统的用户名不能含有中文字符。 - -## 安装DevEco Device Tool - -DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,同时DevEco Device Tool运行依赖Python,Node.js和hpm工具。 - -DevEco Device Tool支持一体化安装,即DevEco Device Tool安装向导会检测系统是否安装Visual Studio Code、Python、Node.js、hpm的适配版本,当安装向导未检测到这些软件时,会给出相应的提示,根据提示勾选要自动安装的软件,安装向导会自动下载相应的软件进行安装。 - -安装DevEco Device Tool,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用 - -1. 获取软件,请使用华为开发者帐号登录[https://device.harmonyos.com/cn/ide\#download\_beta](https://device.harmonyos.com/cn/ide#download_beta),下载DevEco Device Tool V3.0 Beta1及以上版本。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)。 -2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。 -3. 设置DevEco Device Tool的安装路径,点击Next。 -4. 根据安装向导提示,勾选要自动安装的软件,点击Next。 - - ![](/images/device-dev/quick-start/figures/Snap28.png) - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当安装向导检测到系统中已安装可兼容的Python版本,会提示用户可选择已安装的可兼容的Python版本,也可选择下载推荐的Python版本。 - -5. 在以下界面点击Next,进行软件下载和安装。 - - ![](/images/device-dev/quick-start/figures/Snap8.png) - -6. 在弹出的Python安装向导中,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装,等待安装完成后,点击**Close**。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装可兼容的Python版本,且用户选择了已安装的可兼容的Python版本,则Python安装向导不会弹出,用户不需要执行此步骤。 - >如果安装DevEco Device Tool 2.1 Release版本,Python版本只能为3.8.x版本,不能安装最新的Python3.9.x版本。如果安装DevEco Device Tool V3.0 Beta1及以上版本,Python版本只能为3.8.x或3.9.x版本。 - - ![](/images/device-dev/quick-start/figures/Snap34.png) - -7. 在弹出的Visual Studio Code安装向导中,根据向导提示安装Visual Studio Code,安装过程中,请勾选“添加到PATH(重启后生效)”。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的Visual Studio Code版本,则Visual Studio Code安装向导不会弹出,用户不需要执行此步骤。 - - ![](/images/device-dev/quick-start/figures/Snap33.png) - -8. 在弹出的Node.js安装向导中,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的Node.js版本,则Node.js安装向导不会弹出,用户不需要执行此步骤。 - -9. 等待DevEco Device Tool安装向导自动安装hpm和DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的hpm版本,则不会进行hpm软件的下载和安装。 - -10. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](/images/device-dev/quick-start/figures/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。 - - ![](/images/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png) - - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201\345\217\212Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201\345\217\212Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" deleted file mode 100644 index f26a34e2ae7c090effd8af5efecee35cfdcf1cbc..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/02.\346\220\255\345\273\272\347\263\273\347\273\237\347\216\257\345\242\203/03.\350\216\267\345\217\226\346\272\220\347\240\201\345\217\212Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ /dev/null @@ -1,272 +0,0 @@ ---- -title: 获取源码及Ubuntu编译环境准备 -permalink: /pages/0001000102 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:28 ---- -# 获取源码及Ubuntu编译环境准备 - -- [获取软件](#section1897711811517) -- [获取源码](#section1545225464016) -- [安装必要的库和工具](#section108201740181219) -- [安装Python3](#section1238412211211) -- [安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\)](#section12202192215415) -- [安装hb](#section15794154618411) - - [前提条件](#section1083283711515) - - [安装方法](#section11518484814) - - [卸载方法](#section3512551574) - - -系统要求:Ubuntu16.04及以上64位系统版本。 - -编译环境搭建包含如下几步: - -1. 获取源码 -2. 安装必要的库和工具 -3. 安装python3 -4. 安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\) -5. 安装hb - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- 针对Ubuntu编译环境我们提供了对应的Docker,该Docker封装了相关编译工具,选择使用Docker的开发者可跳过此章节。Docker使用可参考[Docker方式获取编译环境](/pages/000a00#section107932281315)。 ->- 通常系统默认安装samba、vim等常用软件,需要做适当适配以支持Linux服务器与Windows工作台之间的文件共享。 ->- 想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建使用指南](/pages/00040200)。 - -## 获取软件 - -Linux服务器通用环境配置需要的工具及其获取途径如下表所示: - -**表 1** Linux服务器开发工具及获取途径 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

开发工具

-

用途

-

获取途径

-

源码

-

功能开发

-

参考源码获取

-

必要的库和工具

-

编译所需的必要工具和库(如打包、镜像制作等)

-

通过互联网获取

-

Python3.7+

-

编译构建工具

-

通过互联网获取

-

LLVM(仅OpenHarmony_v1.x分支/标签需要)

-

编译工具链

-

通过互联网获取

-

hb

-

OpenHarmony编译构建命令行工具

-

通过互联网获取

-
- ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- 如果后续通过“HPM组件方式”或“HPM包管理器命令行工具方式”获取源码,不需要安装gn、ninja编译工具。 ->- (推荐)如果后续通过“镜像站点方式”或“代码仓库方式”获取源码,需要安装gn、ninja、LLVM编译工具。安装gn、ninja、LLVM编译工具时,请确保编译工具的环境变量路径唯一。 - -## 获取源码 - -开发者需要在Linux服务器上下载并解压一套源代码,请参见[源码获取](/pages/000102)。 - -## 安装必要的库和工具 - -使用如下apt-get命令安装编译所需的必要的库和工具: - -``` -sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils gcc-arm-linux-gnueabi cpio device-tree-compiler -``` - -## 安装Python3 - -1. 打开Linux编译服务器终端。 -2. 输入如下命令,查看python版本号: - - ``` - python3 --version - ``` - - 如果低于python3.7版本,不建议直接升级,请按照如下步骤重新安装。以python3.8为例,按照以下步骤安装python。 - - 1. 运行如下命令,查看Ubuntu版本: - - ``` - cat /etc/issue - ``` - - 2. 根据Ubuntu不同版本,安装python。 - - 如果Ubuntu 版本为18+,运行如下命令。 - - ``` - sudo apt-get install python3.8 - ``` - - - 如果Ubuntu版本为16。 - - a. 安装依赖包 - - ``` - sudo apt update && sudo apt install software-properties-common - ``` - - b. 添加deadsnakes PPA 源,然后按回车键确认安装。 - - ``` - sudo add-apt-repository ppa:deadsnakes/ppa - ``` - - c. 安装python3.8 - - ``` - sudo apt upgrade && sudo apt install python3.8 - ``` - - -3. 设置python和python3软链接为python3.8。 - - ``` - sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 - sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 - ``` - -4. 安装并升级Python包管理工具(pip3),任选如下一种方式。 - - **命令行方式:** - - ``` - sudo apt-get install python3-setuptools python3-pip -y - sudo pip3 install --upgrade pip - ``` - - - **安装包方式:** - - ``` - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python get-pip.py - ``` - - - -## 安装LLVM\(仅OpenHarmony\_v1.x分支/标签需要\) - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->如果下载的源码为OpenHarmony\_v1.x分支/标签, 请按下面的步骤安装9.0.0版本的llvm。 ->如果下载的源码为Master及OpenHarmony\_v2.x分支/标签,可直接跳过本小节,hb会自动下载最新的llvm。 - -1. 打开Linux编译服务器终端。 -2. [下载LLVM工具](https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-36191/linux/llvm-linux-9.0.0-36191.tar)。 -3. 解压LLVM安装包至\~/llvm路径下。 - - ``` - tar -zxvf llvm.tar -C ~/ - ``` - -4. 设置环境变量。 - - ``` - vim ~/.bashrc - ``` - - 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 - - ``` - export PATH=~/llvm/bin:$PATH - ``` - -5. 生效环境变量。 - - ``` - source ~/.bashrc - ``` - - -## 安装hb - -### 前提条件 - -请先安装Python 3.7.4及以上版本,请见[安装Python3](#section1238412211211)。 - -### 安装方法 - -1. 运行如下命令安装hb - - ``` - python3 -m pip install --user ohos-build - ``` - -2. 设置环境变量 - - ``` - vim ~/.bashrc - ``` - - 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 - - ``` - export PATH=~/.local/bin:$PATH - ``` - - 执行如下命令更新环境变量。 - - ``` - source ~/.bashrc - ``` - -3. 执行"hb -h",有打印以下信息即表示安装成功: - - ``` - usage: hb - - OHOS build system - - positional arguments: - {build,set,env,clean} - build Build source code - set OHOS build settings - env Show OHOS build env - clean Clean output - - optional arguments: - -h, --help show this help message and exit - ``` - - -### 卸载方法 - -``` -python3 -m pip uninstall ohos-build -``` - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->如果安装hb的过程中遇到问题,请参见下文[常见问题](/pages/0001000103)进行解决。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" deleted file mode 100644 index 22a255e68bb0e344b0708e1fd9f5322f99e5e86b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/01.\350\275\273\351\207\217\345\222\214\345\260\217\345\236\213\347\263\273\347\273\237\345\205\245\351\227\250/03.\350\277\220\350\241\214\342\200\234HelloWorld\342\200\235/02.Hi3516\345\274\200\345\217\221\346\235\277/01.\345\256\211\350\243\205\345\274\200\345\217\221\346\235\277\347\216\257\345\242\203.md" +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: 安装开发板环境 -permalink: /pages/000100020100 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:28 ---- -# 安装开发板环境 - -- [Hi3516工具要求](#section179175261196) - - [硬件要求](#section5840424125014) - - [软件要求](#section965634210501) - -- [安装Linux服务器工具](#section182916865219) - - [将Linux shell改为bash](#section1715027152617) - - [安装编译依赖基础软件(仅Ubuntu 20+需要)](#section45512412251) - - [安装文件打包工具及Java虚拟机环境](#section16199102083717) - - -## Hi3516工具要求 - -### 硬件要求 - -- Hi3516DV300 IoT Camera开发板 -- USB转串口线、网线(Windows工作台通过USB转串口线、网线与Hi3516DV300 开发板连接) - -各硬件连接关系如下图所示。 - -**图 1** Hi3516开发硬件连线图 -![](/images/device-dev/quick-start/figures/Hi3516开发硬件连线图.png "Hi3516开发硬件连线图") - -### 软件要求 - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->本节描述安装包方式搭建编译环境的操作步骤。如果是Docker方式安装编译环境,请跳过此章节以及下述[安装Linux服务器工具](#section182916865219)章节。 - -Hi3516开发板对Linux服务器通用环境配置需要的工具及其获取途径如下表所示。 - -**表 1** Linux服务器开发工具及获取途径 - - - - - - - - - - - - - - - - - - - - - - - - -

开发工具

-

用途

-

获取途径

-

bash

-

命令行处理工具

-

系统配置

-

编译基础软件包(仅ubuntu 20+需要)

-

编译依赖的基础软件包

-

通过互联网获取

-

dosfstools、mtools、mtd-utils

-

文件打包工具

-

通过apt-get install安装

-

Java虚拟机环境

-

编译、调试和运行Java程序

-

通过apt-get install安装

-
- -## 安装Linux服务器工具 - ->![](/images/device-dev/public_sys-resources/icon-notice.gif) **须知:** ->- 如果通过“HPM组件方式”或“HPM包管理器命令行工具方式”获取源码,不需要安装hc-gen编译工具。 ->- (推荐)如果通过“镜像站点方式”或“代码仓库方式”获取源码,需要安装hc-gen编译工具。安装hc-gen编译工具时,请确保编译工具的环境变量路径唯一。 - -### 将Linux shell改为bash - -查看shell是否为bash,在终端运行如下命令 - -``` -ls -l /bin/sh -``` - -如果显示为“/bin/sh -\> bash”则为正常,否则请按以下方式修改: - -**方法一**:在终端运行如下命令,然后选择no。 - -``` -sudo dpkg-reconfigure dash -``` - -**方法二**:先删除sh,再创建软链接。 - -``` -sudo rm -rf /bin/sh -sudo ln -s /bin/bash /bin/sh -``` - -### 安装编译依赖基础软件(仅Ubuntu 20+需要) - -执行以下命令进行安装: - -``` -sudo apt-get install build-essential gcc g++ make zlib* libffi-dev -``` - -### 安装文件打包工具及Java虚拟机环境 - -1. 打开Linux编译服务器终端 -2. 运行如下命令,安装dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。 - - ``` - sudo apt-get install dosfstools mtools mtd-utils default-jre default-jdk - ``` - - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\347\203\247\345\275\225.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\347\203\247\345\275\225.md" deleted file mode 100644 index 5f7dd3b145ed75950cfbdf3a626d651a3cc0f883..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/02.\346\240\207\345\207\206\347\263\273\347\273\237\345\205\245\351\227\250/02.\347\203\247\345\275\225.md" +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: 烧录 -permalink: /pages/00010101 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:29 ---- -# 镜像烧录 - -- [前提条件](#section18547185418328) -- [使用网口烧录](#section1965361953312) - -标准系统烧录,在V2.2 Beta1及以上版本支持。 - -Hi3516DV300支持烧录标准系统,其烧录方式包括USB烧录、网口烧录和串口烧录三种方式,其中: - -- **Windows系统:支持USB烧录、网口烧录和串口烧录**。 -- **Linux系统:支持串口烧录和网口烧录。** - -同一种烧录方式(如网口烧录),在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 - ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->当前Hi3516DV300开发板支持通过网口、USB、串口三种方式烧录OpenHarmony标准系统。本文以网口方式为例讲解烧录操作,其他两种烧录方式请参照[Hi3516DV300烧录指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)。 - -## 前提条件 - -在DevEco Device Tool中,选择**Import Project**打开待烧录文件所在文件夹,其中MCU选择**HiSilicon\_Arm\_Linux**下的Hi3516DV300,Framework选择“Ohos-sources”或“Hpm”。 - -![](/images/device-dev/quick-start/figures/hisilicon-arm-linux.png) - -## 使用网口烧录 - -Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 - -1. 请连接好电脑和待烧录开发板,需要同时连接串口、网口和电源,具体可参考[Hi3516DV300开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3516-0000001152041033)。 -2. 打开电脑的设备管理器,查看并记录对应的串口号。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 - - ![](/images/device-dev/quick-start/figures/hi3516-record-the-serial-port-number.png) - -3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 - - ![](/images/device-dev/quick-start/figures/hi3516-deveco-device-tool-setting.png) - -4. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 - - - upload\_port:选择步骤[2](#zh-cn_topic_0000001056443961_li1050616379507)中查询的串口号。 - - upload\_protocol:选择烧录协议,固定选择“hiburn-net”。 - - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、boot、updater、misc、system、vendor和userdata。 - - ![](/images/device-dev/quick-start/figures/upload-options-1.png) - -5. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075)。 -6. 设置网口烧录的IP地址信息,设置如下选项: - - - upload\_net\_server\_ip:选择步骤5中设置的IP地址信息。例如192.168.1.2 - - upload\_net\_client\_mask:设置开发板的子网掩码,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如255.255.255.0 - - upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1 - - upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3 - - ![](/images/device-dev/quick-start/figures/ip-address-information-2.png) - -7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 -8. 打开工程文件,点击![](/images/device-dev/quick-start/figures/2021-01-27_170334.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。 - - ![](/images/device-dev/quick-start/figures/zh-cn_image_0000001215342695.png) - -9. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 - - ![](/images/device-dev/quick-start/figures/hi3516-restart-the-development-board.png) - -10. 重新上电后,界面提示如下信息时,表示烧录成功。 - - ![](/images/device-dev/quick-start/figures/hi3516-burning-succeeded-net.png) - -11. 烧录完成后,请根据[标准系统镜像运行](https://device.harmonyos.com/cn/docs/start/introduce/quickstart-standard-running-0000001142160948)进行下一步操作,完成系统启动。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" "b/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" deleted file mode 100644 index 8bb787c77e462d1ae770df8294c56b2c060e0cc2..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/02.\345\277\253\351\200\237\345\274\200\345\247\213/03.\350\216\267\345\217\226\346\272\220\347\240\201.md" +++ /dev/null @@ -1,419 +0,0 @@ ---- -title: 获取源码 -permalink: /pages/000102 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:29 ---- -# 获取源码 - -- [OpenHarmony介绍](#section6370143622110) -- [获取源码概述](#section12763342204) -- [获取方式1:从码云仓库获取](#section537312010229) - - [适用场景](#section10881513459) - - [前提条件](#section102871547153314) - - [操作步骤](#section429012478331) - -- [获取方式2:从DevEco Marketplace获取](#section463013147412) - - [适用场景](#section26661067443) - - [前提条件](#section17544943123315) - - [操作步骤](#section954619433333) - -- [获取方式3:从镜像站点获取](#section1186691118430) -- [获取方式4:从github镜像仓库获取\(每天UTC时间23点同步\)](#section23448418360) -- [源码目录](#section1072115612811) - - -## OpenHarmony介绍 - -OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。 - -开源代码仓库地址:[https://openharmony.gitee.com](https://openharmony.gitee.com)。 - -## 获取源码概述 - -本文档将介绍如何获取OpenHarmony源码并说明OpenHarmony的源码目录结构。OpenHarmony的代码以[组件](/pages/00050000)的形式开放,开发者可以通过如下其中一种方式获取: - -- **获取方式1**:从码云代码仓库获取。通过repo或git工具从代码仓库中下载,此方式可获取最新代码。 -- **获取方式2**:通过[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站获取。访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站,查找满足需求的开源发行版,直接下载(或者定制后下载),再通过hpm-cli命令工具将所需的组件及工具链下载、安装到本地。 -- **获取方式3**:从镜像站点下载归档后的发行版压缩文件。如果要获取旧版本的源码,也可通过此方式获取,此方式下载速度较快。 -- **获取方式4**:从github代码仓库获取。通过repo或git工具从代码仓库中下载,此方式可获取最新代码。 - -## 获取方式1:从码云仓库获取 - -### 适用场景 - -- 基于OpenHarmony的稳定分支建立自己的基线,分发下游客户。 - -- 已经完成自身软件与OpenHarmony的对接,需要进行OpenHarmony官方认证。 - -- 芯片/模组/app通过OpenHarmony官方认证后,贡献代码到OpenHarmony社区。 - -- 修复OpenHarmony的问题。 - -- 学习OpenHarmony的源码。 - - -### 前提条件 - -1. 注册码云gitee账号。 -2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 - - ``` - git config --global user.name "yourname" - git config --global user.email "your-email-address" - git config --global credential.helper store - ``` - -4. 安装码云repo工具,可以执行如下命令。 - - ``` - curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo #如果没有权限,可下载至其他目录,并将其配置到环境变量中 - chmod a+x /usr/local/bin/repo - pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests - ``` - - -### 操作步骤 - -**获取轻量/小型/标准系统源码** - ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->Master主干为开发分支,开发者可通过Master主干获取最新特性。发布版本代码相对比较稳定,开发者可基于发布版本代码进行商用功能开发。 - -- **OpenHarmony主干代码获取** - - 方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 - - ``` - repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify - repo sync -c - repo forall -c 'git lfs pull' - ``` - - 方式二:通过repo + https 下载。 - - ``` - repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify - repo sync -c - repo forall -c 'git lfs pull' - ``` - - -- **OpenHarmony 发布版本代码获取** - - OpenHarmony发布版本源码获取方式请参考[Release-Notes](/pages/extra/24f459/)。 - - -## 获取方式2:从DevEco Marketplace获取 - -### 适用场景 - -对于刚接触OpenHarmony的新用户,希望能够参考一些示例解决方案从而进行快速开发。可以在[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站获取下载开源发行版,也可以在开源发行版的基础上定制(添加或删除组件)。然后通过包管理器命令行工具(hpm-cli)将需要的组件及相关的编译工具链全部下载、安装到本地。 - -### 前提条件 - -先要在本地安装Node.js和hpm命令行工具,安装步骤如下: - -1. 安装Node.js。 - - 官网下载并在本地安装Node.js. - - [Node.js](https://nodejs.org/) 版本需不低于12.x \(包含 npm 6.14.4\),推荐安装 LTS版本。 - -2. 通过Node.js自带的npm安装hpm命令行工具。 - - 打开CMD,执行以下命令: - - ``` - npm install -g @ohos/hpm-cli - ``` - -3. 安装完成后执行如下命令,显示hpm版本,即安装成功。 - - ``` - hpm -V 或 hpm --version - ``` - -4. 如果升级hpm的版本,请执行如下命令: - - ``` - npm update -g @ohos/hpm-cli - ``` - - -### 操作步骤 - -1. 查找发行版。 - 1. 访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home),设定搜索的对象为“设备组件“,并在左侧边栏选择“开源发行版“,如下图所示。 - 2. 在搜索框输入关键字搜索,如“摄像头”。 - 3. 结果中显示与关键字匹配的发行版,可以进一步根据组件类别等过滤条件(如:适配的开发板,内核)精确筛选。 - 4. 查找合适的发行版,点击查看发行版的详情介绍。 - - **图 1** 包管理 - ![](/images/device-dev/get-code/figure/包管理.png "包管理") - -2. 了解发行版详情。 - - 1. 仔细阅读发行版的说明信息,以了解使用场景、特性、组件构成、使用方法以及如何进行定制化,如下图所示。 - 2. 点击「直接下载」,将发行版下载到本地。 - 3. 点击「定制组件」,将对发行版包含的组件进行定制(添加/删除)。 - - **图 2** 发行版示例 - ![](/images/device-dev/get-code/figure/发行版示例.png "发行版示例") - -3. 定制组件。 - 1. 进入发行版的定制页面,如下图所示。 - 2. 通过关闭开关移除可选组件,或者通过“添加组件”增加新的组件。 - 3. 在右边填写您的项目基本信息,包括名称、版本、描述等信息。 - 4. 点击“下载“,系统会根据您的选择,生成相应的OpenHarmony代码结构文件\(如my\_cust\_dist.zip\),保存至本地文件。 - - **图 3** 组件定制 - ![](/images/device-dev/get-code/figure/组件定制.png "组件定制") - -4. 安装组件。 - 1. 解压下载的压缩文件,用命令行工具CMD(Linux下的Shell终端)。 - 2. 在解压后的文件目录下执行hpm install指令,系统会自动下载并安装组件。安装窗口显示“Install sucessful”表示组件下载及安装成功。 - 3. 下载的组件将保存在工程目录下的ohos\_bundles文件夹中(部分组件安装后会将源码复制到指定目录下)。 - - -## 获取方式3:从镜像站点获取 - -为了获得更好的下载性能,您可以选择从以下站点的镜像库获取源码或者对应的解决方案。 - -本部分只提供OpenHarmony Master最新版本和LTS最新版本的源码获取方式, 其他版本源码获取方式以及具体版本信息请参考[Release-Notes](/pages/extra/24f459/)。 - -**表 1** 源码获取路径 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

LTS版本源码

-

版本信息

-

下载站点

-

SHA256校验码

-

全量代码(标准、轻量和小型系统)

-

3.0

-

站点

-

SHA256校验码

-

标准系统解决方案(二进制)

-

3.0

-

站点

-

SHA256校验码

-

Hi3861解决方案(二进制)

-

3.0

-

站点

-

SHA256校验码

-

Hi3518解决方案(二进制)

-

3.0

-

站点

-

SHA256校验码

-

Hi3516解决方案-LiteOS(二进制)

-

3.0

-

站点

-

SHA256校验码

-

Hi3516解决方案-Linux(二进制)

-

3.0

-

站点

-

SHA256校验码

-

RELEASE-NOTES

-

3.0

-

站点

-

-

-

Master版本源码

-

版本信息

-

下载站点

-

SHA256校验码

-

Beta版本(标准系统)

-

2.2 Beta2

-

站点

-

SHA256校验码

-

RELEASE-NOTES

-

2.2 Beta2

-

站点

-

-

-

编译工具链

-

版本信息

-

下载站点

-

SHA256校验码

-

编译工具链获取清单

-

-

-

站点

-

-

-
- -## 获取方式4:从github镜像仓库获取\(每天UTC时间23点同步\) - -方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[GitHub帮助中心](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account))。 - -``` -repo init -u git@github.com:openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' -``` - -方式二:通过repo + https 下载。 - -``` -repo init -u https://github.com/openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' -``` - -## 源码目录 - -下表是OpenHarmony源码的目录及简单说明: - -**表 2** 源码目录 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

目录名

-

描述

-

applications

-

应用程序样例,包括camera等

-

base

-

基础软件服务子系统集&硬件服务子系统集

-

build

-

组件化编译、构建和配置脚本

-

docs

-

说明文档

-

domains

-

增强软件服务子系统集

-

drivers

-

驱动子系统

-

foundation

-

系统基础能力子系统集

-

kernel

-

内核子系统

-

prebuilts

-

编译器及工具链子系统

-

test

-

测试子系统

-

third_party

-

开源第三方组件

-

utils

-

常用的工具集

-

vendor

-

厂商提供的软件

-

build.py

-

编译脚本文件

-
- diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\274\200\345\217\221\350\257\264\346\230\216.md" "b/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\274\200\345\217\221\350\257\264\346\230\216.md" deleted file mode 100644 index bcbe094e80952e41f41f769c74cb80aede8a0ab7..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/02.\346\226\271\350\210\237\345\274\200\345\217\221\346\241\206\346\236\266\357\274\210ArkUI\357\274\211/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\274\200\345\217\221\350\257\264\346\230\216.md" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 开发说明 -permalink: /pages/0007010101 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:35 ---- -# 开发说明 - -本指导将从以下三个部分介绍构建健康饮食应用,其主要功能为查看食物的营养信息。具体信息如下: - - -1. Food Detail:[构建食物基本信息页面](/pages/000701010202)。 - -2. Food Category/List:[构建食物列表和分类展示页面](/pages/000701010300)。 - - - -从工程创建,构建普通视图开始,逐步学习学习组件、布局、动效和数据状态管理,在了解到这些知识后,开发者将有能力自主设计和开发应用。简单的学习成本,功能完备的UI开发,我们现在就开始吧。 - - -![zh-cn_image_0000001169852428](/images/application-dev/ui/figures/zh-cn_image_0000001169852428.png) diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" deleted file mode 100644 index 31585b30daee58ba9eb7f5e00cb39015d2bf5f6f..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/03.\351\237\263\351\242\221/02.\351\237\263\351\242\221\346\222\255\346\224\276\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: 音频播放开发指导 -permalink: /pages/00070201 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:35 ---- -# 音频播放开发指导 - -- [场景介绍](#场景介绍) -- [接口说明](#接口说明) - -## 场景介绍 - -音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。 - -**图1** 音频播放状态机 -![zh-cn_image_0000001182608857](/images/application-dev/media/figures/zh-cn_image_0000001182608857.png) - - -## 接口说明 - -**表1** media - -| 接口名 | 描述 | -| -------- | -------- | -| media.createAudioPlayer() | 创建AudioPlayer实例。 | -| AudioPlayer | 提供音频播放相关功能,具体见表 音频播放相关的interface AudioPlayer。 | - -**表2** 音频播放相关的interface **AudioPlayer** - -| 接口名 | 描述 | -| -------- | -------- | -| release() | 释放音频资源。 | -| play() | 开始播放音频源。 | -| pause() | 暂停播放。 | -| stop() | 停止播放。 | -| reset()7+ | 重置播放音频源。 | -| setVolume(vol: number) | 改变音频播放音量 | -| seek(timeMs: number) | 改变播放位置。 | -| src:string | 音频播放的媒体URI。 | -| state:AudioState | 播放的状态属性。 | -| currentTime:number | 音频的当前播放位置。 | -| duration:number | 音频播放的时长(当数据源不支持改变播放位置时返回-1, 比如实时流媒体场景)。 | -| loop:boolean | 音频的循环播放属性。 | -| on('play', function callback) | 订阅音频播放开始事件。 | -| on('pause', function callback) | 订阅音频播放暂停事件。 | -| on('stop', function callback) | 订阅音频播放停止事件。 | -| on('reset', function callback) | 订阅音频播放重置事件。 | -| on('finish',function callback) | 订阅音频播放结束事件。 | -| on('error', function callback) | 订阅音频播放错误事件。 | -| on('dataload', function callback) | 订阅音频播放加载数据事件。 | -| on('volumeChange', function callback) | 订阅音频播放音量变化事件。 | -| on('timeUpdate', function callback) | 订阅音频播放进度改变事件。 | - - -1. 创建音频播放器。 - ``` - import media from '@ohos.multimedia.media'; - var player = media.createAudioPlayer(); - ``` - -2. 设置消息订阅事件。 - ``` - player.on('play', (err, action) => { - if (err) { - console.error('Error returned in the play() callback.'); - return; - } - console.info('Current player duration: '+ player.duration); - console.info('Current player time: ' + player.currentTime); - console.info('Current player status: '+player.state); - console.info('Pause MP3'); - player.pause(); - }); - player.on('pause', (err, action) => { - if (err) { - console.error('Error returned in the pause() callback.'); - return; - } - console.info('Current player status: ' + player.state); - console.info('Current player time: ' + player.currentTime); - player.seek(30000); // Seek for 30 seconds. - }); - player.on('stop', (err, action) => { - if (err) { - console.error('Error returned in the stop() callback.'); - return; - } - console.info('stop callback invoked. State:' + player.state); - player.reset(); - }); - player.on('dataLoad', (err, action) => { - if (err) { - console.error('Error returned in the dataLoad() callback.'); - return; - } - console.info('dataLoad callback invoked. Current time: ' + player.currentTime); - console.info('Duration of the source:' + player.duration); - player.play(); - }); - player.on('reset', (err, action) => { - if (err) { - console.error('Error returned in the reset() callback.'); - return; - } - console.info('reset callback invoked.'); - player.release(); - }); - player.on('finish', (err, action) => { - if (err) { - console.error('Error returned in the finish() callback.'); - return; - } - console.info('finish callback invoked.'); - }); - player.on('timeUpdate', (seekTime, action) => { - console.info('Seek time: ' + seekTime); - console.info('Current player time: ' + player.currentTime); - var newTime = player.currentTime; - if(newTime == 30000) { - console.info('Seek succeeded. New time: ' + newTime); - } else { - console.error('Seek failed: ', + newTime); - } - player.stop(); - }); - player.on('error', (err) => { - console.error('Player error: ${err.message}'); - }); - ``` - -3. 启动播放。 - ``` - var audioSourceMp3 = 'file://test.mp3'; - player.src = audioSourceMp3; - player.loop = true; - ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" "b/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" deleted file mode 100644 index 3308e1fb6e3f9f18b9ee683e21136ba0b4da20a1..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/02.\347\211\210\346\234\254\345\217\230\346\233\264\350\257\264\346\230\216.md" +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: 版本变更说明 -permalink: /pages/00070501 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:35 ---- -# 版本变更说明 - -- [V3.0 Beta1(2021-09-29)](#v3-0-beta1-2021-09-29-) - -## V3.0 Beta1(2021-09-29) - -| | -| -------- | -|  **新增特性:**
- 新增支持OpenHarmony SDK的管理,开发者可通过DevEco Studio的SDK Manager功能来下载和管理OpenHarmony SDK。
- 在编译构建HAP包时,新增支持对单个Module进行编译,对于多Module工程中只需要编译其中一个Module的场景,可以提升编译构建速度;同时还新增支持一键重构建HAP包,即在编译构建HAP前,会自动执行Clean Project操作。
 **增强特性:**
- 编译构建插件更新至3.0.3.2版本。
- Json编辑器增强,资源索引错误支持快速修复,并支持快速查看资源的取值。
- 工程视图支持Ohos视图,默认视图为Project视图,开发者可手动切换。
- OpenHarmony工程支持ark方舟编译。
- OpenHarmony工程类型标识字段supportSystem "standard",由模块级build.gradle调整至工程级build.gradle。 | diff --git "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" "b/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" deleted file mode 100644 index 6e0608394ad5ba8b50800f5d31e38d5e609dd932..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/08.\345\272\224\347\224\250\345\274\200\345\217\221/06.DevEcoStudio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227/06.\345\256\211\350\243\205\350\277\220\350\241\214OpenHarmony\345\272\224\347\224\250.md" +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: 安装运行OpenHarmony应用 -permalink: /pages/00070505 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 安装运行OpenHarmony应用 - -安装OpenHarmony应用需要使用hdc工具,通过手动执行命令行完成应用的安装。 - - -hdc工具本身需要手动从开源仓中获取。然后使用工具将编译后的hap包发送至设备侧,然后通过hdc命令完成app的安装。 - - -相关命令如下: - - -- 文件发送命令 - **file send *localpath remotepath*** - - 命令示例: - - ``` - hdc_std file send E:\hwadmin.hap /data/local/tmp/hwadmin.hap - ``` - -- 安装命令 - **install [-r/-d/-g] *package*** - - 命令示例: - - ``` - hdc_std install hwadmin.hap - ``` - -- 日志抓取命令 - **hilog** - - 命令示例: - - ``` - hdc_std hilog - ``` - - -完整的hdc工具使用指导及命令格式请参见[hdc_std使用指导](/pages/00080101)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" deleted file mode 100644 index 0d793d84acd822c9782f6e227d12648c343406e0..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/01.FeatureAbility\346\250\241\345\235\227.md" +++ /dev/null @@ -1,976 +0,0 @@ ---- -title: FeatureAbility模块 -permalink: /pages/000b000000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# FeatureAbility模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | 智慧视觉设备 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | ------------ | -| FeatureAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.startAbility(parameter: StartAbilityParameter) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.acquireDataAbilityHelper(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.startAbilityForResult(parameter: StartAbilityParameter, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.startAbilityForResult(parameter: StartAbilityParameter) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.terminateSelfWithResult(parameter: AbilityResult, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.terminateSelfWithResult(parameter: AbilityResult) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.hasWindowFocus(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.hasWindowFocus() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.getWant(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.getWant() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.getContext() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.terminateSelf(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.terminateSelf() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| FeatureAbility.continueAbility(options: ContinueAbilityOptions, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | - -#### 权限列表 - -ohos.permission.RUNNING_LOCK permission - -#### 使用限制 - -FeatureAbility模块的接口只能在Page类型的Ability调用 - -#### 导入模块 - -``` -import featureAbility from '@ohos.ability.featureAbility' -``` - -#### FeatureAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\) - -* 接口说明 - - 启动新的ability(callback形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | --------------------- | ---- | ------------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 表示被启动的Ability | -| callback | 只读 | AsyncCallback | 是 | 被指定的回调方法 | - -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.startAbility( - { - want: - { - action: "", - entities: [""], - type: "", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.startability", - abilityName: "com.example.startability.MainAbility", - uri: "" - }, - }, - ); -) -``` - - - -#### FeatureAbility.startAbility(parameter: StartAbilityParameter) - -* 接口说明 - - 启动新的ability(Promise形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | --------------------- | ---- | ------------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 表示被启动的Ability | - -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.startAbility( - { - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.startability", - abilityName: "com.example.startability.MainAbility", - uri: "" - }, - } - ).then((void) => { - console.info("==========================>startAbility=======================>"); -}); -``` - - - -#### FeatureAbility.acquireDataAbilityHelper(uri: string) - -* 接口说明 - - 获取dataAbilityHelper - -* 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ---------------------- | - | uri | 只读 | string | 是 | 指示要打开的文件的路径 | - -* 返回值 - - 返回dataAbilityHelper - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.acquireDataAbilityHelper( - "dataability:///com.exmaple.DataAbility" -) -``` - - - -#### FeatureAbility.startAbilityForResult(parameter: StartAbilityParameter, callback: AsyncCallback\) - -* 接口说明 - - 启动一个ability,并在该ability被销毁时返回执行结果(callback形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | ---------------------- | ---- | ------------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 表示被启动的Ability | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - 返回{@link AbilityResult} - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.startAbilityForResult( - { - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.featureabilitytest", - abilityName: "com.example.startabilityforresulttest1.MainAbility", - uri:"" - }, - }, -) -``` - - - -#### FeatureAbility.startAbilityForResult(parameter: StartAbilityParameter) - -* 接口说明 - - 启动一个ability,并在该ability被销毁时返回执行结果(Promise形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | --------------------- | ---- | ------------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 表示被启动的Ability | - -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - 返回{@link AbilityResult} - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.startAbilityForResult( - { - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.featureabilitytest", - abilityName: "com.example.startabilityforresulttest2.MainAbility", - uri:"", - parameters: - { - mykey0: 1111, - mykey1: [1, 2, 3], - mykey2: "[1, 2, 3]", - mykey3: "xxxxxxxxxxxxxxxxxxxxxx", - mykey4: [1, 15], - mykey5: [false, true, false], - mykey6: ["aaaaaa", "bbbbb", "ccccccccccc"], - mykey7: true, - }, - }, - requestCode: 2, - }, -).then((void) => { - console.info("==========================>startAbilityForResult=======================>"); -}); -``` - - - -#### FeatureAbility.terminateSelfWithResult(parameter: AbilityResult, callback: AsyncCallback\) - -* 接口说明 - - 设置此page ability将返回给调用者的结果代码和数据并破坏此page ability(callback形式) - - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | ------------- | ---- | ------------------- | -| parameter | 只读 | AbilityResult | 是 | 表示被启动的Ability | -| callback | 只读 | AsyncCallback | 是 | 被指定的回调方法 | - - -* AbilityResult类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------ | ---- | ------------------------------------------------------------ | -| resultCode | 只读 | number | 是 | 指示销毁该能力后返回的结果代码。您可以定义结果代码来识别错误(暂不支持) | -| want | 只读 | Want | 否 | 指示销毁该能力后返回的数据。您可以定义返回的数据。此参数可以为null。 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.terminateSelfWithResult( - { - resultCode: 1, - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.featureabilitytest", - abilityName: "com.example.finishwithresulttest1.MainAbility", - uri:"", - parameters: { - mykey0: 2222, - mykey1: [1, 2, 3], - mykey2: "[1, 2, 3]", - mykey3: "ssssssssssssssssssssssssss", - mykey4: [1, 15], - mykey5: [false, true, false], - mykey6: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], - mykey7: true, - } - }, - }, -); -``` - - - -#### FeatureAbility.terminateSelfWithResult(parameter: AbilityResult) - -* 接口说明 - - 设置此page ability将返回给调用者的结果代码和数据并破坏此page ability(Promise形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | ------------- | ---- | ------------------- | -| parameter | 只读 | AbilityResult | 是 | 表示被启动的Ability | - - -* AbilityResult类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------ | ---- | ------------------------------------------------------------ | -| resultCode | 只读 | number | 是 | 指示销毁该能力后返回的结果代码。您可以定义结果代码来识别错误(暂不支持) | -| want | 只读 | Want | 否 | 指示销毁该能力后返回的数据。您可以定义返回的数据。此参数可以为null。 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -* flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.terminateSelfWithResult( - { - resultCode: 1, - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION, - deviceId: "", - bundleName: "com.example.featureabilitytest", - abilityName: "com.example.finishwithresulttest1.MainAbility", - uri:"", - parameters: { - mykey0: 2222, - mykey1: [1, 2, 3], - mykey2: "[1, 2, 3]", - mykey3: "ssssssssssssssssssssssssss", - mykey4: [1, 15], - mykey5: [false, true, false], - mykey6: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], - mykey7: true, - } - }, - } -).then((void) => { - console.info("==========================>terminateSelfWithResult=======================>"); -}); -``` - - - -#### FeatureAbility.hasWindowFocus(callback: AsyncCallback\) - -* 接口说明 - - 检查ability的主窗口是否具有窗口焦点(callback形式) - -* 参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | ----------------------- | ---- | ---------------- | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -* 返回值 - - 如果此异能当前具有视窗焦点,则返回{@code true};否则返回{@code false} - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.hasWindowFocus() -``` - - - -#### FeatureAbility.hasWindowFocus() - -* 接口说明 - - 检查ability的主窗口是否具有窗口焦点(Promise形式) - -* 参数描述 - - Null - -* 返回值 - - 如果此异能当前具有视窗焦点,则返回{@code true};否则返回{@code false} - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.hasWindowFocus().then((void) => { - console.info("==========================>hasWindowFocus=======================>"); -}); -``` - - - -#### FeatureAbility.getWant(callback: AsyncCallback\) - -* 接口说明 - - 获取从ability发送的want(callback形式) - -* 参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | -------------------- | ---- | ---------------- | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.getWant() -``` - - - -#### FeatureAbility.getWant() - -* 接口说明 - - 获取从ability发送的want(Promise形式) - -* 参数描述 - - Null - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.getWant().then((void) => { - console.info("==========================>getWantCallBack=======================>"); -}); -``` - - - -#### FeatureAbility.getContext() - -* 接口说明 - - 获取应用程序上下文 - -* 返回值 - - 返回应用程序上下文 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -var context = featureAbility.getContext() -context.getBundleName() -``` - - - -#### FeatureAbility.terminateSelf(callback: AsyncCallback\) - -* 接口说明 - - 设置page ability返回给被调用方的结果代码和数据,并销毁此page ability(callback形式) - -* 参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | -------------------- | ---- | ---------------- | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -* 返回值 - - void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.terminateSelf() -``` - - - -#### FeatureAbility.terminateSelf() - -* 接口说明 - - 设置page ability返回给被调用方的结果代码和数据,并销毁此page ability(Promise形式) - -* 参数描述 - - Null - -* 返回值 - -* void - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureability'; -featureAbility.terminateSelf().then((void) => { console.info("==========================>terminateSelfCallBack=======================>"); -}); -``` - -#### FeatureAbility.connectAbility(*request*: Want, *options*:ConnectOptions): number - -* 接口说明 - - 将当前ability连接到指定ServiceAbility(callback形式) - -* connectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------- | -------- | -------------- | ---- | -------------------------- | -| request | 只读 | Want | 是 | 表示被连接的ServiceAbility | -| options | 只读 | ConnectOptions | 是 | 被指定的回调方法 | - -* Want参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------ | -------- | -------- | ---- | ---------------------------------- | -| deviceId | 只读 | string | 否 | 表示被连接的ServiceAbility的设备id,缺省表示连接本地的ServiceAbility | -| bundleName | 只读 | string | 是 | 表示被连接的ServiceAbility的包名 | -| abilityName | 只读 | string | 是 | 表示被连接的ServiceAbility的类名 | - -- ConnectOptions类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------ | -------- | -------- | ---- | ---------------------------------- | -| onConnect | 只读 | function | 是 | 连接成功时的回调函数 | -| onDisconnect | 只读 | function | 是 | 连接失败时的回调函数 | -| onFailed | 只读 | function | 是 | ConnectAbility调用失败时的回调函数 | - -* 返回值 - - 连接的ServiceAbilityID。 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = featureAbility.connectAbility( - { - deviceId: deviceId, - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -``` - -#### FeatureAbility.disconnectAbility(connection: number, callback:AsyncCallback): void - -* 接口说明 - - 断开与指定ServiceAbility的连接(callback形式) - -* disconnectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------------- | ---- | ------------------------------ | -| connection | 只读 | number | 是 | 指定断开连接的ServiceAbilityID | -| callback | 只读 | AsyncCallback | 是 | 被指定的回调方法 | - -* 返回值 - - 无 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = featureAbility.connectAbility( - { - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -var result = featureAbility.disconnectAbility(connId, - (error,data) => { - console.log('featureAbilityTest DisConnectJsSameBundleName result errCode : ' + error.code + " data: " + data) - }, -); -``` - -#### FeatureAbility.disconnectAbility(connection: number): Promise; - -* 接口说明 - - 断开与指定ServiceAbility的连接(promise形式) - -* disconnectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------ | ---- | ------------------------------ | -| connection | 只读 | number | 是 | 指定断开连接的ServiceAbilityID | - -* 返回值 - - 无 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('featureAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = featureAbility.connectAbility( - { - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -var result = await featureAbility.disconnectAbility(connId); -``` - -#### FeatureAbility.continueAbility(options: ContinueAbilityOptions, callback: AsyncCallback); - -* 接口说明 - - 迁移一个ability到目标设备,并返回执行结果(callback形式) - -* startAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| -------- | -------- | ---------------------- | ---- | ------------------- | -| options | 只读 | ContinueAbilityOptions | 是 | 表示被启动的Ability | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -- ContinueAbilityOptions类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------- | ---- | ----------------------------------------------------------- | -| deviceId | 只读 | string | 是 | 表示需要包含有关目标启动能力的信息 | -| reversible | 只读 | boolean | 是 | 是否支持回迁的标志,目前不支持该功能,为保留字段,可填false | - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' - -async StartContinueAbility(deviceId) { - let continueAbilityOptions = { - reversible: false, - deviceId: deviceId, - } - function ContinueAbilityCallback(err, data) { - console.info("[Demo] ContinueAbilityCallback, result err = " + JSON.stringify(err)); - console.info("[Demo] ContinueAbilityCallback, result data= " + JSON.stringify(data)); - } - await featureAbility.continueAbility(continueAbilityOptions, ContinueAbilityCallback); - console.info('[Demo] featureAbility.StartContinueAbility end'); -} -this.StartContinueAbility(remoteDeviceId); //remoteDeviceId is acquired from DeviceManager -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" deleted file mode 100644 index 513c8ea8b68b86cef8d1175df4e607c6c7491ade..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/02.ParticleAbility\346\250\241\345\235\227.md" +++ /dev/null @@ -1,424 +0,0 @@ ---- -title: ParticleAbility模块 -permalink: /pages/000b000001 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# ParticleAbility模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | 智慧视觉设备 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | ------------ | -| ParticleAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\ | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| ParticleAbility.startAbility(parameter: StartAbilityParameter) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| ParticleAbility.terminateSelf(callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| ParticleAbility.terminateSelf() | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| ParticleAbility.acquireDataAbilityHelper(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | - -#### 权限列表 - -ohos.permission.RUNNING_LOCK permission - -#### 使用限制 - -ParticleAbility模块的接口只能在Ability为Data和Service类型的时候进行调用 - -#### 导入模块 - -``` -import featureAbility from '@ohos.ability.featureAbility' -``` - -#### ParticleAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback\ - -- 接口说明 - - 服务ability使用此方法启动特定ability(callback形式) - -- startAbility参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | --------------------- | ---- | ----------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 指示启动的ability | -| callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -- flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -- 返回值 - - void - -- 示例 - -```js -import particleAbility from '@ohos.ability.particleAbility' -particleAbility.startAbility( - { - want: - { - action: "action.system.home", - entities: ["entity.system.home"], - type: "MIMETYPE", - flags: FLAG_AUTH_READ_URI_PERMISSION; - deviceId: "", - bundleName: "com.example.Data", - abilityName: "com.jstest.startabilitytest5.MainAbility", - uri:"" - }, - }, -) -``` - - - -#### ParticleAbility.startAbility(parameter: StartAbilityParameter) - -- 接口说明 -服务ability使用此方法启动特定ability((Promise形式) -- startAbility参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| --------- | -------- | --------------------- | ---- | ----------------- | -| parameter | 只读 | StartAbilityParameter | 是 | 指示启动的ability | -- StartAbilityParameter类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------------- | -------- | ------ | ---- | ---------------------------------- | -| want | 只读 | want | 是 | 表示需要包含有关目标启动能力的信息 | -| abilityStartSetting | 只读 | string | 否 | 指示启动能力中使用的特殊启动设置 | - -- want类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ----------- | -------- | ------ | ---- | -------------------------- | -| deviceId | 只读 | string | 否 | 设备id | -| bundleName | 只读 | string | 否 | 捆绑包名称 | -| abilityName | 只读 | string | 否 | ability 名字 | -| uri | 只读 | string | 否 | 请求中URI的描述 | -| type | 只读 | string | 否 | 此文件中类型的说明 | -| flags | 只读 | number | 否 | 此文件中标志的选项是必需的 | -| action | 只读 | string | 否 | 需求中对操作的描述 | -| parameters | 只读 | string | 否 | Want中WantParams对象的描述 | -| entities | 只读 | string | 否 | 对象中实体的描述 | - -- flags类型说明 - - | 名称 | 参数 | 描述 | - | ------------------------------------ | ---------- | ------------------------------------------------------------ | - | FLAG_AUTH_READ_URI_PERMISSION | 0x00000001 | 指示对URI执行读取操作的授权 | - | FLAG_AUTH_WRITE_URI_PERMISSION | 0x00000002 | 指示对URI执行写入操作的授权 | - | FLAG_ABILITY_FORWARD_RESULT | 0x00000004 | 将结果返回给源异能 | - | FLAG_ABILITY_CONTINUATION | 0x00000008 | 确定是否可以将本地设备上的功能迁移到远程设备 | - | FLAG_NOT_OHOS_COMPONENT | 0x00000010 | 指定组件是否不属于OHOS | - | FLAG_ABILITY_FORM_ENABLED | 0x00000020 | 指定是否启动某个能力 | - | FLAG_AUTH_PERSISTABLE_URI_PERMISSION | 0x00000040 | 指示URI上可能持久化的授权 | - | FLAG_AUTH_PREFIX_URI_PERMISSION | 0x00000080 | 将结果返回到源能力片 | - | FLAG_ABILITYSLICE_MULTI_DEVICE | 0x00000100 | 支持分布式调度系统中的多设备启动 | - | FLAG_START_FOREGROUND_ABILITY | 0x00000200 | 指示无论主机应用程序是否已启动,都将启动使用服务模板的功能 | - | FLAG_ABILITY_CONTINUATION_REVERSIBLE | 0x00000400 | 表示延续是可逆的。 | - | FLAG_INSTALL_ON_DEMAND | 0x00000800 | 如果未安装指定的功能,请安装该功能 | - | FLAG_INSTALL_WITH_BACKGROUND_MODE | 0x80000000 | 如果未安装,请使用后台模式安装指定的DI功能。 | - | FLAG_ABILITY_CLEAR_MISSION | 0x00008000 | 指示清除其他任务的操作。可以为传递给{@link ohos.app.Context#startAbility}的{@code Intent}设置此标志,并且必须与{@link flag_ABILITY_NEW_MISSION}一起使用 | - | FLAG_ABILITY_NEW_MISSION | 0x10000000 | 指示在历史任务堆栈上创建任务的操作。 | - | FLAG_ABILITY_MISSION_TOP | 0x20000000 | 指示如果启动能力的现有实例已位于任务堆栈的顶部,则将重用该实例。否则,将创建一个新的能力实例。 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import particleAbility from '@ohos.ability.particleAbility' -var windowMode = featureAbility.AbilityStartSetting.WINDOW_MODE_KEY; -particleAbility.startAbility( - want: - { - bundleName: "com.jstest.featureabilitytest", - abilityName: "com.jstest.startabilitytest1.MainAbility", - }, - abilityStartSetting: - { - windowMode: featureAbility.AbilityWindowConfiguration.WINDOW_MODE_FLOATING, - }, - } - - ).then((void) => { - console.info("==========================>startAbilityCallback=======================>"); -}); -``` - - - -#### ParticleAbility.terminateSelf(callback: AsyncCallback\) - -- 接口说明 - - 摧毁服务ability(callback形式) - -- terminateSelf参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | -------------------- | ---- | -------------------- | - | callback | 只读 | AsyncCallback\ | 是 | 表示被指定的回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import particleAbility from '@ohos.ability.particleAbility' -ParticleAbility.terminateSelf() -``` - - - -#### ParticleAbility.terminateSelf() - -- 接口说明 - - 摧毁服务ability(Promise形式) - -- 返回值 - - void - -- 示例 - -```js -import particleAbility from '@ohos.ability.particleAbility' -particleAbility.terminateSelf().then((void) => { - console.info("==========================>terminateSelfCallback=======================>"); -}); -``` - - - -#### ParticleAbility.acquireDataAbilityHelper(uri: string) - -- 接口说明 - - 获取dataAbilityHelper - -- acquireDataAbilityHelper参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | :--- | -------- | ------ | ---- | ---------------------- | - | uri | 只读 | string | 是 | 指示要打开的文件的路径 | - -- 返回值 - - 返回dataAbilityHelper - -- 示例 - -```js -import particleAbility from '@ohos.ability.particleAbility' -var uri = ""; -ParticleAbility.acquireDataAbilityHelper(uri) -``` - -#### ParticleAbility.connectAbility(*request*: Want, *options*:ConnectOptions): number - -* 接口说明 - - 将当前ability连接到指定ServiceAbility(callback形式) - -* connectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------- | -------- | -------------- | ---- | -------------------------- | -| request | 只读 | Want | 是 | 表示被连接的ServiceAbility | -| options | 只读 | ConnectOptions | 是 | 被指定的回调方法 | - -- ConnectOptions类型说明 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ------------ | -------- | -------- | ---- | ---------------------------------- | -| onConnect | 只读 | function | 是 | 连接成功时的回调函数 | -| onDisconnect | 只读 | function | 是 | 连接失败时的回调函数 | -| onFailed | 只读 | function | 是 | ConnectAbility调用失败时的回调函数 | - -* 返回值 - - 连接的ServiceAbilityID。 - -* 示例 - -```javascript -import particleAbility from '@ohos.ability.particleAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = particleAbility.connectAbility( - { - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -``` - -#### ParticleAbility.disconnectAbility(connection: number, callback:AsyncCallback): void - -* 接口说明 - - 断开与指定ServiceAbility的连接(callback形式) - -* disconnectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------------- | ---- | ------------------------------ | -| connection | 只读 | number | 是 | 指定断开连接的ServiceAbilityID | -| callback | 只读 | AsyncCallback | 是 | 被指定的回调方法 | - -* 返回值 - - 无 - -* 示例 - -```javascript -import particleAbility from '@ohos.ability.particleAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = particleAbility.connectAbility( - { - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -var result = particleAbility.disconnectAbility(connId, - (error,data) => { - console.log('particleAbilityTest DisConnectJsSameBundleName result errCode : ' + error.code + " data: " + data) - }, -); -``` - -#### ParticleAbility.disconnectAbility(connection: number): Promise; - -* 接口说明 - - 断开与指定ServiceAbility的连接(promise形式) - -* disconnectAbility参数描述 - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---------- | -------- | ------ | ---- | ------------------------------ | -| connection | 只读 | number | 是 | 指定断开连接的ServiceAbilityID | - -* 返回值 - - 无 - -* 示例 - -```javascript -import particleAbility from '@ohos.ability.particleAbility' -var mRemote; -var connId; -function onConnectCallback(element, remote){ - mRemote = remote; - console.log('ConnectAbility onConnect remote is proxy:' + (remote instanceof rpc.RemoteProxy)); -} -function onDisconnectCallback(element){ - console.log('ConnectAbility onDisconnect element.deviceId : ' + element.deviceId) -} -function onFailedCallback(code){ - console.log('particleAbilityTest ConnectAbility onFailed errCode : ' + code) -} -var connId = particleAbility.connectAbility( - { - bundleName: "com.ix.ServiceAbility", - abilityName: "ServiceAbilityA", - }, - { - onConnect: onConnectCallback, - onDisconnect: onDisconnectCallback, - onFailed: onFailedCallback, - }, -); -var result = await particleAbility.disconnectAbility(connId); -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" deleted file mode 100644 index 7344ae4fc2be7b3735d700f98694e5922d51d90d..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/03.DataAbilityHelper\346\250\241\345\235\227.md" +++ /dev/null @@ -1,850 +0,0 @@ ---- -title: DataAbilityHelper模块 -permalink: /pages/000b000002 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -### DataAbilityHelper模块(JS端SDK接口) - -#### 支持设备 - -| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | 轻量级智能穿戴 | 智慧视觉设备 | -| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | -------------- | ------------ | -| DataAbilityHelper.openFile(uri: string, mode: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.openFile(uri: string, mode: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.on(type: 'dataChange', uri: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.off(type: 'dataChange', uri: string, callback?: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.getFileTypes(uri: string, mimeTypeFilter: string, callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.getFileTypes(uri: string, mimeTypeFilter: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.getType(uri: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.getType(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.normalizeUri(uri: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.normalizeUri(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.denormalizeUri(uri: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.denormalizeUri(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.notifyChange(uri: string, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.notifyChange(uri: string) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.insert(uri: string, valuesBucket: rdb.ValuesBucket, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.insert(uri: string, valuesBucket: rdb.ValuesBucket) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.batchInsert(uri: string, valuesBuckets: Array, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.batchInsert(uri: string, valuesBuckets: Array) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.delete(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.delete(uri: string, predicates: dataAbility.DataAbilityPredicates) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | -| DataAbilityHelper.query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates) | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | - -#### 权限列表 - -ohos.permission.RUNNING_LOCK permission - -#### 导入模块 - -``` -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -import ohos_data_rdb from '@ohos.data.rdb' -``` - -#### DataAbilityHelper.openFile(uri: string, mode: string, callback: AsyncCallback\) - -- 接口说明 - - 在指定的远程路径中打开文件(callback形式) - - -* 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | -------------------- | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要打开的文件的路径。 | - | mode | 只读 | string | 是 | 指示文件打开模式‘rwt’。 | - | callback | 只读 | AsyncCallback\ | 是 | 被指定的回调方法 | - -* 返回值 - - 返回文件描述符。 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var mode = "rwt"; -DAHelper.openFile( - "dataability:///com.example.DataAbility", - mode, -) -``` - -#### DataAbilityHelper.openFile(uri: string, mode: string) - -- 接口说明 - - 在指定的远程路径中打开文件(Promise形式) - -* 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要打开的文件的路径。 | - | mode | 只读 | string | 是 | 指示文件打开模式‘rwt’。 | - -* 返回值 - - 返回文件描述符。 - -* 示例 - -```javascript -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var mode = "rwt"; -DAHelper.openFile( - "dataability:///com.example.DataAbility", - mode).then((void) => { - console.info("==========================>openFileCallback=======================>"); -}); -``` - -#### DataAbilityHelper.on(type: 'dataChange', uri: string, callback: AsyncCallback\) - -- 接口说明 - - 注册观察者以观察给定uri指定的数据(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | -------------------- | ---- | ------------------------ | - | type | 只读 | string | 是 | 数据更改。 | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - | callback | 只读 | AsyncCallback\ | 是 | 指示数据更改时的回调。 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var helper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -helper.on( - "dataChange", - "dataability:///com.example.DataAbility", -) -``` - -#### DataAbilityHelper.off(type: 'dataChange', uri: string, callback?: AsyncCallback\) - -- 接口说明 - - 注册观察者以观察给定uri指定的数据(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | -------------------- | ---- | ------------------------ | - | type | 只读 | string | 是 | 数据更改。 | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - | callback | 只读 | AsyncCallback\ | 否 | 指示已注册的回调。 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var helper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -helper.off( - "dataChange", - "dataability:///com.example.DataAbility", -) -``` - -#### DataAbilityHelper.getType(uri: string, callback: AsyncCallback\) - -- 接口说明 - - 获取给定URI指定的日期的MIME类型(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回与uri指定的数据匹配的MIME类型。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.getType( - "dataability:///com.example.DataAbility" -) -``` - -#### DataAbilityHelper.getType(uri: string) - -- 接口说明 - - 获取给定URI指定的日期的MIME类型(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - -- 返回值 - - 返回与uri指定的数据匹配的MIME类型。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.getType( - "dataability:///com.example.DataAbility" - ).then((void) => { - console.info("==========================>getTypeCallback=======================>"); -}); -``` - -#### DataAbilityHelper.getFileTypes(uri: string, mimeTypeFilter: string, callback: AsyncCallback>) - -- 接口说明 - - 获取支持的文件的MIME类型(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------------- | -------- | ---------------------- | ---- | ---------------------------- | - | uri | 只读 | string | 是 | 指示要获取的文件的路径。 | - | mimeTypeFilter | 只读 | string | 是 | 指示要获取的文件的MIME类型。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回匹配的MIME类型数组。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.getFileTypes( - "dataability:///com.example.DataAbility", - "image/*" -) -``` - -#### DataAbilityHelper.getFileTypes(uri: string, mimeTypeFilter: string) - -- 接口说明 - - 获取支持的文件的MIME类型(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------------- | -------- | ------ | ---- | ---------------------------- | - | uri | 只读 | string | 是 | 指示要获取的文件的路径。 | - | mimeTypeFilter | 只读 | string | 是 | 指示要获取的文件的MIME类型。 | - -- 返回值 - - 返回匹配的MIME类型数组。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.getFileTypes( - "dataability:///com.example.DataAbility", - "image/*" - ).then((void) => { - console.info("==========================>getFileTypesCallback=======================>"); -}); -``` - -#### DataAbilityHelper.normalizeUri(uri: string, callback: AsyncCallback\) - -- 接口说明 - - 将引用数据功能的给定uri转换为规范化uri(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | ----------------------- | - | uri | 只读 | string | 是 | 指示要规范化的uri对象。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 如果数据功能支持uri规范化或null,则返回规范化uri对象。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.normalizeUri( - "dataability:///com.example.DataAbility", -) -``` - -#### DataAbilityHelper.normalizeUri(uri: string) - -- 接口说明 - - 将引用数据功能的给定uri转换为规范化uri(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ----------------------- | - | uri | 只读 | string | 是 | 指示要规范化的uri对象。 | - -- 返回值 - - 如果数据功能支持uri规范化或null,则返回规范化uri对象。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.normalizeUri( - "dataability:///com.example.DataAbility", - ).then((void) => { - console.info("==========================>normalizeUriCallback=======================>"); -}); -``` - -#### DataAbilityHelper.denormalizeUri(uri: string, callback: AsyncCallback\) - -- 接口说明 - - 将由normalizeUri(uri)生成的给定规范化uri转换为非规范化uri(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | ---------------------- | ---- | ----------------------- | - | uri | 只读 | string | 是 | 指示要规范化的uri对象。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 如果反规范化成功,则返回反规范化uri对象。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.denormalizeUri( - "dataability:///com.example.DataAbility", -) -``` - -#### DataAbilityHelper.denormalizeUri(uri: string) - -- 接口说明 - - 将由normalizeUri(uri)生成的给定规范化uri转换为非规范化uri(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ----------------------- | - | uri | 只读 | string | 是 | 指示要规范化的uri对象。 | - -- 返回值 - - 如果反规范化成功,则返回反规范化uri对象。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.denormalizeUri( - "dataability:///com.example.DataAbility", - ).then((void) => { - console.info("==========================>denormalizeUriCallback=======================>"); -}); -``` - -#### DataAbilityHelper.notifyChange(uri: string, callback: AsyncCallback\) - -- 接口说明 - - 通知已注册的观察者uri指定的数据资源的更改(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | -------- | -------- | -------------------- | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var helper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -helper.notifyChange( - "dataability:///com.example.DataAbility", -) -``` - -#### DataAbilityHelper.notifyChange(uri: string) - -- 接口说明 - - 通知已注册的观察者uri指定的数据资源的更改(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要操作的数据的路径。 | - -- 返回值 - - void - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -DAHelper.notifyChange( - "dataability:///com.example.DataAbility", - ).then((void) => { - console.info("==========================>notifyChangeCallback=======================>"); -}); -``` - -#### DataAbilityHelper.insert(uri: string, valuesBucket: rdb.ValuesBucket, callback: AsyncCallback\) - -- 接口说明 - - 将单个数据记录插入数据库(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | ---------------------- | ---- | ------------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要插入的数据的路径。 | - | valuesBucket | 只读 | rdb.ValuesBucket | 是 | 指示要插入的数据记录。如果此参数为空,将插入一个空行。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回插入数据记录的索引。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -const valueBucket = { - "name": "rose", - "age": 22, - "salary": 200.5, - "blobType": u8, -} -DAHelper.insert( - "dataability:///com.example.DataAbility", - valueBucket -) -``` - -#### DataAbilityHelper.insert(uri: string, valuesBucket: rdb.ValuesBucket) - -- 接口说明 - - 将单个数据记录插入数据库(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | ---------------- | ---- | ------------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要插入的数据的路径。 | - | valuesBucket | 只读 | rdb.ValuesBucket | 是 | 指示要插入的数据记录。如果此参数为空,将插入一个空行。 | - -- 返回值 - - 返回插入数据记录的索引。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -const valueBucket = { - "name": "rose1", - "age": 221, - "salary": 20.5, - "blobType": u8, -} -DAHelper.insert( - "dataability:///com.example.DataAbility", - valueBucket - ).then((void) => { - console.info("==========================>insertCallback=======================>"); -}); -``` - -#### DataAbilityHelper.batchInsert(uri: string, valuesBuckets: Array, callback: AsyncCallback\) - -- 接口说明 - - 将多个数据记录插入数据库(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | ----------------------- | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要插入的数据的路径。 | - | valuesBucket | 只读 | Array | 是 | 指示要插入的数据记录。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回插入的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var cars = new Array({"name": "roe11", "age": 21, "salary": 20.5, "blobType": u8,}, - {"name": "roe12", "age": 21, "salary": 20.5, "blobType": u8,}, - {"name": "roe13", "age": 21, "salary": 20.5, "blobType": u8,}) -DAHelper.batchInsert( - "dataability:///com.example.DataAbility", - cars -) -``` - -#### DataAbilityHelper.batchInsert(uri: string, valuesBuckets: Array) - -- 接口说明 - - 将多个数据记录插入数据库(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | ----------------------- | ---- | ------------------------ | - | uri | 只读 | string | 是 | 指示要插入的数据的路径。 | - | valuesBucket | 只读 | Array | 是 | 指示要插入的数据记录。 | - -- 返回值 - - 返回插入的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var cars = new Array({"name": "roe11", "age": 21, "salary": 20.5, "blobType": u8,}, - {"name": "roe12", "age": 21, "salary": 20.5, "blobType": u8,}, - {"name": "roe13", "age": 21, "salary": 20.5, "blobType": u8,}) -DAHelper.batchInsert( - "dataability:///com.example.DataAbility", - cars - ).then((void) => { - console.info("==========================>batchInsertCallback=======================>"); -}); -``` - -#### DataAbilityHelper.delete(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) - -- 接口说明 - - 从数据库中删除一个或多个数据记录(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要删除的数据的路径。 | - | valuesBucket | 只读 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回已删除的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.delete( - "dataability:///com.example.DataAbility", - da -) -``` - -#### DataAbilityHelper.delete(uri: string, predicates: dataAbility.DataAbilityPredicates) - -- 接口说明 - - 从数据库中删除一个或多个数据记录(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要删除的数据的路径。 | - | valuesBucket | 只读 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - -- 返回值 - - 返回已删除的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.delete( - "dataability:///com.example.DataAbility", - da - ).then((void) => { - console.info("==========================>deleteCallback=======================>"); -}); -``` - -#### DataAbilityHelper.update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) - -- 接口说明 - - 更新数据库中的数据记录(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要更新的数据的路径。 | - | valuesBucket | 只读 | rdb.ValuesBucket | 是 | 指示要更新的数据。 | - | predicates | 只读 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回更新的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -const va = { - "name": "roe1", - "age": 21, - "salary": 20.5, - "blobType": u8, -} -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.update( - "dataability:///com.example.DataAbility", - va, - da -) -``` - -#### DataAbilityHelper.update(uri: string, valuesBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates) - -- 接口说明 - - 更新数据库中的数据记录(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ------------ | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要更新的数据的路径。 | - | valuesBucket | 只读 | rdb.ValuesBucket | 是 | 指示要更新的数据。 | - | predicates | 只读 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - -- 返回值 - - 返回更新的数据记录数。 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -const va = { - "name": "roe1", - "age": 21, - "salary": 20.5, - "blobType": u8, -} -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.update( - "dataability:///com.example.DataAbility", - va, - da - ).then((void) => { - console.info("==========================>updateCallback=======================>"); -}); -``` - -#### DataAbilityHelper.query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback\) - -- 接口说明 - - 查询数据库中的数据(callback形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 只读 | string | 是 | 指示要查询的数据的路径。 | - | columns | 只读 | rdb.ValuesBucket | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 | - | predicates | 只读 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - | callback | 只读 | AsyncCallback\ | 是 | 回调方法 | - -- 返回值 - - 返回查询结果 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var cars=new Array({"value1"}, {"value2"}, {"value3"}, {"value4"}); -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.query( - "dataability:///com.example.DataAbility", - cars, - da -) -``` - - - -#### DataAbilityHelper.query(uri: string, columns: Array\, predicates: dataAbility.DataAbilityPredicates) - -- 接口说明 - - 查询数据库中的数据(Promise形式) - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---------- | -------- | --------------------------------- | ---- | ------------------------------------------------ | - | uri | 读写 | string | 是 | 指示要查询的数据的路径。 | - | columns | 读写 | rdb.ValuesBucket | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 | - | predicates | 读写 | dataAbility.DataAbilityPredicates | 是 | 指示筛选条件。当此参数为null时,应定义处理逻辑。 | - -- 返回值 - - 返回查询结果 - -- 示例 - -```js -import featureAbility from '@ohos.ability.featureAbility' -import ohos_data_ability from '@ohos.data.dataability' -var DAHelper = await featureAbility.getDataAbilityHelper( - "dataability:///com.example.DataAbility" -); -var cars=new Array({"value1"}, {"value2"}, {"value3"}, {"value4"}); -let da = new ohos_data_ability.DataAbilityPredicates() -DAHelper.query( - "dataability:///com.example.DataAbility", - cars, - da - ).then((void) => { - console.info("==========================>queryCallback=======================>"); -}); -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" deleted file mode 100644 index 523a2f2bba5977437335f8e61f8ad477141cf9ee..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/01.Ability\346\241\206\346\236\266/04.DataUriUtils\346\250\241\345\235\227.md" +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: DataUriUtils模块 -permalink: /pages/000b000003 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -### DataUriUtils模块(JS端SDK接口) - -#### 权限列表 - -ohos.permission.RUNNING_LOCK permission - -#### 导入模块 - -```js -import notify from '@ohos.ability.dataUriUtils'; -``` - -#### DataUriUtils.getId(uri: string) - -- 接口说明 - - 获取附加到给定uri的路径组件末尾的ID - -- 参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---- | -------- | ------ | ---- | ------------------------- | -| uri | 只读 | string | 是 | 指示要从中获取ID的uri对象 | - -- 返回值 - - 附加到路径组件末尾的ID - -- 示例 - -```js -import dataUriUtils from '@ohos.ability.datauriutils' -dataUriUtils.getIdSync("com.example.dataUriUtils/1221") -``` - - - -#### DataUriUtils.attachId(uri: string, id: number) - -- 接口说明 - - 将给定ID附加到给定uri的路径组件的末尾 - -- 参数描述 - - -| 名称 | 读写属性 | 类型 | 必填 | 描述 | -| ---- | -------- | ------ | ---- | ------------------------- | -| uri | 只读 | string | 是 | 指示要从中获取ID的uri对象 | -| id | 只读 | number | 是 | 指示要附加的ID | - -- 返回值 - - 附加给定ID的uri对象 - -- 示例 - -```js -import dataUriUtils from '@ohos.ability.datauriutils' -var idint = 1122; -dataUriUtils.attachId( - "com.example.dataUriUtils" - idint, -) -``` - - - -#### DataUriUtils.deleteId(uri: string) - -- 接口说明 - - 从给定uri的路径组件的末尾删除ID - -- 参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ------------------------- | - | uri | 只读 | string | 是 | 指示要从中删除ID的uri对象 | - -- 返回值 - - ID已删除的uri对象 - -- 示例 - -```js -import dataUriUtils from '@ohos.ability.datauriutils' -dataUriUtils.deleteId("com.example.dataUriUtils/1221") -``` - - - -#### DataUriUtils.updateId(uri: string, id: number) - -- 接口说明 - - 更新指定uri中的ID - -- updateId参数描述 - - | 名称 | 读写属性 | 类型 | 必填 | 描述 | - | ---- | -------- | ------ | ---- | ------------------- | - | uri | 只读 | string | 是 | 指示要更新的uri对象 | - | id | 只读 | number | 是 | 指示新ID | - -- 返回值 - - 更新的uri对象 - -- 示例 - -```js -import dataUriUtils from '@ohos.ability.datauriutils' -var idint = 1122; -dataUriUtils.updateId( - "com.example.dataUriUtils" - idint, -) -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" deleted file mode 100644 index 2661fac17f956edd693b7e16f5da167648e5962c..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/02.\345\233\275\351\231\205\345\214\226\357\274\210I18n\357\274\211.md" +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 国际化(I18n) -permalink: /pages/000b000101 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 国际化-I18n - -> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> -> - I18N模块包含国际化能力增强接口(未在ECMA 402中定义)。 - - -## 导入模块 - -``` -import i18n from '@ohos.i18n'; -``` - - -## 权限 - -无 - - -## i18n.getDisplayLanguage - -getDisplayLanguage(language: string, locale: string, sentenceCase?: boolean): string - -获取指定语言的本地化显示文本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | language | string | 是 | 指定语言 | - | locale | string | 是 | 显示指定语言的区域ID | - | sentenceCase | boolean | 否 | 本地化显示文本是否要首字母大写 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 指定语言的本地化显示文本 | - -- 示例: - ``` - i18n.getDisplayLanguage("zh", "en-GB", true); - i18n.getDisplayLanguage("zh", "en-GB"); - ``` - - -## i18n.getDisplayCountry - -getDisplayCountry(country: string, locale: string, sentenceCase?: boolean): string - -获取指定国家的本地化显示文本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | country | string | 是 | 指定国家 | - | locale | string | 是 | 显示指定国家的区域ID | - | sentenceCase | boolean | 否 | 本地化显示文本是否要首字母大写 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 指定国家的本地化显示文本 | - -- 示例: - ``` - i18n.getDisplayCountry("zh-CN", "en-GB", true); - i18n.getDisplayCountry("zh-CN", "en-GB"); - ``` - - -## i18n.getSystemLanguage - -getSystemLanguage(): string - -获取系统语言。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 系统语言ID | - -- 示例: - ``` - i18n.getSystemLanguage(); - ``` - - -## i18n.getSystemRegion - -getSystemRegion(): string - -获取系统地区。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 系统地区ID | - -- 示例: - ``` - i18n.getSystemRegion(); - ``` - - -## i18n.getSystemLocale - -getSystemLocale(): string - -获取系统区域。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 系统区域ID | - -- 示例: - ``` - i18n.getSystemLocale(); - ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" deleted file mode 100644 index a0f46a548f536b23ebcfeb4e426350355fdf5749..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/02.\350\265\204\346\272\220\347\256\241\347\220\206/03.\345\233\275\351\231\205\345\214\226\357\274\210Intl\357\274\211.md" +++ /dev/null @@ -1,370 +0,0 @@ ---- -title: 国际化(Intl) -permalink: /pages/000b000102 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 国际化-Intl - -> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> -> - Intl模块包含国际化能力基础接口(在ECMA 402中定义)。 - - -## 导入模块 - -``` -import Intl from '@ohos.intl'; -``` - - -## 权限 - -无 - - -## Locale - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| language | string | 是 | 否 | 与区域设置关联的语言 | -| script | string | 是 | 否 | 语言的书写方式 | -| region | string | 是 | 否 | 与区域设置相关的地区 | -| baseName | string | 是 | 否 | Locale的基本核心信息 | -| caseFirst | string | 是 | 否 | 区域的整理规则是否考虑大小写 | -| calendar | string | 是 | 否 | 区域的日历信息 | -| collation | string | 是 | 否 | 区域的排序规则 | -| hourCycle | string | 是 | 否 | 区域的时制信息 | -| numberingSystem | string | 是 | 否 | 区域使用的数字系统 | -| numeric | boolean | 是 | 否 | 是否对数字字符具有特殊的排序规则处理 | - - -### constructor - -constructor(locale: string, options?:options) - -创建区域对象 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | - | options | options | 否 | 用于创建区域对象的选项。 | - -- 示例: - ``` - var locale = new Intl.Locale("zh-CN"); - ``` - - -### toString - -toString(): string - -将区域信息转换为字符串 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 字符串形式的区域信息 | - - -- 示例: - ``` - var locale = new Intl.Locale("zh-CN"); - locale.toString(); - ``` - - -### maximize - -maximize(): Locale - -最大化区域信息,若缺少脚本与地区信息,则补齐。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Locale | 最大化后的区域对象 | - - -- 示例: - ``` - var locale = new Intl.Locale("zh-CN"); - locale.maximize(); - ``` - - -### minimize - -minimize(): Locale - -最小化区域信息,若包含脚本与地区信息,则去除。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Locale | 最小化后的区域对象 | - - -- 示例: - ``` - var locale = new Intl.Locale("zh-CN"); - locale.minimize(); - ``` - - -## DateTimeFormat - - -### constructor - -constructor(locale: string, options?:DateTimeOptions) - -创建时间日期格式化对象。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | - | options | [DateTimeOptions](#datetimeoptions) | 否 | 用于创建时间日期格式化的选项。 | - -- 示例: - ``` - var datefmt= new Intl.DateTimeFormat("zh-CN", { dateStyle: 'full', timeStyle: 'medium' }); - ``` - - -### constructor - -constructor(locales: Array<string>, options?:DateTimeOptions) - -创建时间日期格式化对象。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | locales | Array<string> | 是 | 包含区域设置信息的字符串的数组。 | - | options | [DateTimeOptions](#datetimeoptions) | 否 | 用于创建时间日期格式化的选项。 | - -- 示例: - ``` - var datefmt= new Intl.DateTimeFormat(["ban", "zh"], { dateStyle: 'full', timeStyle: 'medium' }); - ``` - - -### format - -format(date: Date): string; - -格式化时间日期字符串。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | date | Date | 是 | 时间日期对象。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 格式化后的时间日期字符串 | - - -- 示例: - ``` - var date = new Date(2021, 11, 17, 3, 24, 0); - var datefmt = new Intl.DateTimeFormat("en-GB"); - datefmt.format(date); - ``` - - -### formatRange - -formatRange(fromDate: Date, toDate: Date): string; - -格式化时间日期段字符串。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | startDate | Date | 是 | 起始的时间日期 | - | endDate | Date | 是 | 结束的时间日期 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 格式化后的时间日期段字符串 | - - -- 示例: - ``` - var startDate = new Date(2021, 11, 17, 3, 24, 0); - var endDate = new Date(2021, 11, 18, 3, 24, 0); - var datefmt = new Intl.DateTimeFormat("en-GB"); - datefmt.formatRange(startDate, endDate); - ``` - - -### resolvedOptions - -resolvedOptions(): DateTimeOptions - -获取DateTimeFormat 对象的格式化选项。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | [DateTimeOptions](#datetimeoptions) | DateTimeFormat 对象的格式化选项。 | - - -- 示例: - ``` - var datefmt = new Intl.DateTimeFormat("en-GB"); - datefmt.resolvedOptions(); - ``` - - -## NumberFormat - - -### constructor - -constructor(locale: string, options?:NumberOptions) - -创建数字格式化对象。 - -参数: -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| locale | string | 是 | 包含区域设置信息的字符串,包括语言以及可选的脚本和区域。 | -| options | [NumberOptions](#numberoptions) | 否 | 用于创建数字格式化的选项。 | - -- 示例: - ``` - var numfmt = new Intl.NumberFormat("en-GB", {style:'decimal', notation:"scientific"}); - ``` - - -### constructor - -constructor(locales: Array<string>, options?:NumberOptions) - -创建数字格式化对象。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | locales | Array<string> | 是 | 包含区域设置信息的字符串的数组。 | - | options | [NumberOptions](#numberoptions) | 否 | 用于创建数字格式化的选项。 | - -- 示例: - ``` - var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); - ``` - - -### format - -format(number: number): string; - -格式化数字字符串。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | number | number | 是 | 数字对象 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 格式化后的数字字符串 | - - -- 示例: - ``` - var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); - numfmt.format(1223); - ``` - - -### resolvedOptions - -resolvedOptions(): NumberOptions - -获取NumberFormat 对象的格式化选项。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | [NumberOptions](#numberoptions) | NumberFormat 对象的格式化选项。 | - - -- 示例: - ``` - var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); - numfmt.resolvedOptions(); - ``` - - -## DateTimeOptions - -表示时间日期格式化选项。 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| locale | string | 是 | 否 | 区域参数 | -| dateStyle | string | 是 | 是 | 日期显示格式,取值范围:"long", "short", "medium", "full" | -| timeStyle | string | 是 | 是 | 时间显示格式,取值范围:"long", "short", "medium", "full" | -| hourCycle | string | 是 | 是 | 时制格式,取值范围:"h11", "h12", "h23", "h24". | -| timeZone | string | 是 | 是 | 使用的时区(合法的IANA时区ID) | -| numberingSystem | string | 是 | 是 | 数字系统 | -| hour12 | boolean | 是 | 是 | 是否使用12小时制 | -| weekday | string | 是 | 是 | 工作日的显示格式,取值范围:"long", "short", "narrow" | -| era | string | 是 | 是 | 时代的显示格式,取值范围:"long", "short", "narrow" | -| year | string | 是 | 是 | 年份的显示格式,取值范围:"numeric", "2-digit" | -| month | string | 是 | 是 | 月份的显示格式,取值范围:"numeric", "2-digit", "long", "short", "narrow" | -| day | string | 是 | 是 | 日期的显示格式,取值范围:"numeric", "2-digit" | -| hour | string | 是 | 是 | 小时的显示格式,取值范围:"numeric", "2-digit" | -| minute | string | 是 | 是 | 分钟的显示格式,取值范围:"numeric", "2-digit" | -| second | string | 是 | 是 | 秒钟的显示格式,取值范围:"numeric", "2-digit" | -| timeZoneName | string | 是 | 是 | 时区名称的本地化表示 | -| dayPeriod | string | 是 | 是 | 时段的显示格式,取值范围:"long", "short", "narrow" | -| localeMatcher | string | 是 | 是 | 要使用的区域匹配算法,取值范围:"lookup", "best fit" | -| formatMatcher | string | 是 | 是 | 要使用的格式匹配算法,取值范围:"basic", "best fit" | - - -## NumberOptions - -表示设备支持的能力。 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| locale | string | 是 | 否 | 区域参数 | -| currency | string | 是 | 是 | 货币单位 | -| currencySign | string | 是 | 是 | 货币单位的符号显示 | -| currencyDisplay | string | 是 | 是 | 货币的显示方式,取值范围:"symbol", "narrowSymbol", "code", "name" | -| unit | string | 是 | 是 | 单位 | -| unitDisplay | string | 是 | 是 | 单位的显示格式,取值范围:"long", "short", "medium" | -| signDisplay | string | 是 | 是 | 数字符号的显示格式,取值范围:"auto", "never", "always", "expectZero" | -| compactDisplay | string | 是 | 是 | 紧凑型的显示格式,取值范围:"long", "short" | -| notation | string | 是 | 是 | 数字的格式化规格,取值范围:"standard", "scientific", "engineering", "compact" | -| localeMatcher | string | 是 | 是 | 要使用的区域匹配算法,取值范围:"lookup", "best fit" | -| style | string | 是 | 是 | 数字的显示格式,取值范围:"decimal", "currency", "percent", "unit" | -| numberingSystem | string | 是 | 是 | 数字系统 | -| useGrouping | boolean | 是 | 是 | 是否分组显示 | -| miniumumIntegerDigits | number | 是 | 是 | 最少整数个数 | -| miniumumFractionDigits | number | 是 | 是 | 最少小数个数 | -| maxiumumFractionDigits | number | 是 | 是 | 最多小数个数 | -| miniumumSignificantDigits | number | 是 | 是 | 最少有效位个数 | -| maxiumumSignificantDigits | number | 是 | 是 | 最多有效位个数 | diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\351\237\263\351\242\221\346\222\255\346\224\276.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\351\237\263\351\242\221\346\222\255\346\224\276.md" deleted file mode 100644 index 16e9f3113d7195cc96d285e7489498e23f459dbe..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/03.\345\252\222\344\275\223/02.\351\237\263\351\242\221\346\222\255\346\224\276.md" +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: 音频播放 -permalink: /pages/000b000201 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 音频播放和录制 - -## 导入模块 - -``` -import media from '@ohos.multimedia.media'; -``` - - -## 权限 - -无 - - -## media.createAudioPlayer - -createAudioPlayer(): AudioPlayer - -创建音频播放的实例。 - -**返回值:** - -| 类型 | 说明 | -| -------- | -------- | -| [AudioPlayer](#audioplayer) | 返回AudioPlayer类实例,失败时返回null。 | - -**示例:** - -``` -var audioplayer = media.createAudioPlayer(); -``` -## media.createAudioRecorder -createAudioRecorder(): AudioRecorder - -创建音频录制的实例来控制音频的录制。 - -**返回值:** - -| 类型 | 说明 | -| ------------------------------- | ----------------------------------------- | -| [AudioRecorder](#audiorecorder) | 返回AudioRecorder类实例,失败时返回null。 | - -**示例:** -``` -var audiorecorder = media.createAudioRecorder(); -``` - -## AudioPlayer - -音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#createaudioplayer-)构建一个AudioPlayer实例。 - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(mp4、aac、mp3、ogg),支持本地绝对路径(file://) | -| loop | boolean | 是 | 是 | 音频循环播放属性,设置为'true'表示循环播放。 | -| currentTime | number | 是 | 否 | 音频的当前播放阶段。 | -| duration | number | 是 | 否 | 音频时长。 | -| state | [AudioState](#audiostate) | 是 | 否 | 音频播放的状态。 | - -### play - -play(): void - -开始播放音频资源。 - -**示例:** - -``` -audioplayer.src = 'file:///data/media/sounds.mp4'; -audioplayer.on('play', () => { - console.log('Playback starts.'); -}); -audioplayer.play(); -``` - -### pause - -pause(): void - -暂停播放音频资源。 - -**示例:** - -``` -audioplayer.src = 'file:///data/media/sounds.mp4'; -audioplayer.on('pause', () => { - console.log('Playback paused.'); -}); -audioplayer.pause(); -``` - -### stop - -stop(): void - -停止播放音频资源。 - -**示例:** - -``` -audioplayer.src = 'file:///data/media/sounds.mp4'; -audioplayer.on('stop',() => { - console.log('Playback stopped.'); -}); -audioplayer.stop(); -``` - -### seek - -seek(timeMs: number): void - -跳转到指定播放位置。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| timeMs | number | 是 | 指定的跳转时间节点。 | - -**示例:** - -``` -audioplayer.src = 'file:///data/media/sounds.mp4'; -audioplayer.on('timeupdate', (action) => { - var newTime = audioplayer.currenTime; - if(newTime >= 30000) { - console.info('Seek succeeded. New time: ' + newTime); - } else { - console.info('Seek failed.'); - } -}); -audioplayer.seek(30000); -``` - -### setVolume - -setVolume(vol: number): void - -设置音量。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | - -**示例:** - -``` -audioplayer.src = 'file:///data/media/sounds.mp4'; -audioplayer.on('volumeChange', () => { - console.log('Playback volume changed.'); -}); -audioplayer.setVolume(1); -``` - -### reset7+ - -reset(): void - -切换播放音频资源。 - -**示例:** - -``` -audioplay.reset(); -``` - -### release7+ - -release(): void - -释放音频资源。 - -**示例:** - -``` -audioplay.release(); -``` - -### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange') - -on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void) - -开始监听音频播放事件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| type | string | 是 | 播放事件回调类型,支持的事件包括:'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange'。
- 'play' :完成play方法调用,音频开始播放,触发该事件。
- 'pause':完成pause方法调用,音频暂停播放,触发该事件。
- 'stop':完成stop方法调用,音频停止播放,触发该事件。
- 'reset':完成reset方法调用,播放器重置,触发该事件。
- 'dataLoad':完成音频数据加载后触发该事件。
- 'finish':完成音频播放后触发该事件。
- 'volumeChange':播放音量改变后触发该事件。播放事件回调方法。 | -| callback | function | 是 | 播放事件回调方法。 | - -**示例:** - -``` -audioplayer.src = 'file://xxx/sounds.mp4'; -audioplayer.on('play', () => { - console.log('Playback starts.'); -}); -audioplayer.play(); -``` - -### on('timeUpdate') - -on(type: 'timeUpdate', callback: Callback\): void - -开始监听音频播放时间戳更新事件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| type | string | 是 | 播放事件回调类型,支持的事件为:'timeUpdate'。
'timeUpdate':音频播放时间戳更新,触发该事件。seek方法调用时也会触发该事件。 | -| callback | Callback<number> | 是 | 播放事件回调方法。 | - -**示例:** - -``` -audioplayer.src = 'file://xxx/sounds.mp4'; -audioplayer.on('timeupdate', (newTime ) => { - if(newTime >= 30000) { - console.info('Seek succeeded. New time: ' + newTime); - } else { - console.info('Seek failed.'); - } -}); -audioplayer.seek(30000); -``` - -### on('error') - -on(type: 'error', callback: ErrorCallback): void - -开始监听音频播放错误事件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| type | string | 是 | 播放错误事件回调类型'error'。
'error':音频播放中发生错误,触发该事件。 | -| callback | ErrorCallback | 是 | 播放错误事件回调方法。 | - -**示例:** - -``` -audioplayer.src = 'file:///data/sounds.mp4'; -audioplayer.on('error', (err) => { - console.info('error callback info: ' + err); -}); -audioplayer.setVolume(30000); -``` - - -## AudioState - -音频播放的状态机。 - -| 名称 | 描述 | -| -------- | -------- | -| idle | 音频播放空闲。 | -| playing | 音频正在播放。 | -| paused | 音频暂停播放。 | -| stopped | 音频播放停止。 | - -## AudioRecorder - -音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#createaudiorecorder-audiorecorder)构建一个AudioRecorder实例。 - -### prepare - -prepare(config: AudioRecorderConfig): void - -录音准备。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ | -| config | [AudioRecorderConfig](#audiorecorderconfig) | 是 | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数等。 | - -**示例:** - -``` -let audioRecorderConfig = { - audioEncoder : AAC_LC , - audioEncodeBitRate : 22050, - audioSampleRate : 22050, - numberOfChannels : 2, - format : AAC_ADTS, - uri : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.m4a', -} -audiorecorder.prepare(audioRecorderConfig) -``` - - -### start - -start(): void - -开始录音。 - -**示例:** - -``` -audiorecorder.start(); -``` - -### stop - -stop(): void - -停止录音。 - -**示例:** - -``` -audiorecorder.stop(); -``` - -### release - -release(): void - -释放录音资源。 - -**示例:** - -``` -audiorecorder.release(); -``` - -### reset - -reset(): void - -重置录音。 - -进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音配置项,才能再次进行录音。 - -**示例:** - -``` -audiorecorder.reset(); -``` - -### on('prepare' | 'start' | 'stop' | 'release' | 'reset') - -on(type: 'prepare' | 'start' | 'stop' | 'release' | 'reset', callback: () => void): void - -开始订阅音频录制事件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | ---- | ------------------------------------------------------------ | -| type | string | 是 | 录制事件回调类型,支持的事件包括:'prepare' \| 'start' \| 'stop' \| 'release' \| 'reset'。
- 'prepare' :音频录制准备完成后,触发该事件。
- 'start' :音频录制开始后,触发该事件。
- 'stop' :音频录制停止后,触发该事件。
- 'release' :音频录制相关资源释放后,触发该事件。
- 'reset':音频录制重置后,触发该事件。 | -| callback | function | 是 | 录制事件回调方法。 | - -**示例:** - -``` -audiorecorder.on('prepare', () => { - console.log('Preparation succeeded.'); - audiorecorder.start(); -}); -``` - -### on('error') - -on(type: 'error', callback: ErrorCallback): void - -开始订阅音频录制错误事件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ------------- | ---- | ------------------------------------------------------------ | -| type | string | 是 | 录制错误事件回调类型'error'。
- 'error':音频录制过程中发生错误,触发该事件。 | -| callback | ErrorCallback | 是 | 录制错误事件回调方法。 | - - -## AudioRecorderConfig - -表示音频的录音配置。 - -| 名称 | 参数类型 | 必填 | 说明 | -| ------------------ | --------------------------------------- | ---- | ------------------------------------------------------------ | -| audioEncoder | [AudioEncoder](#audioencoder) | 否 | 音频编码格式,默认设置为AAC_LC。 | -| audioEncodeBitRate | number | 否 | 音频编码比特率,默认值为48000。 | -| audioSampleRate | number | 否 | 音频采集采样率,默认值为48000。 | -| numberOfChannels | number | 否 | 音频采集声道数,默认值为2。 | -| format | [AudioOutputFormat](#audiooutputformat) | 否 | 音量输出封装格式,默认设置为MPEG_4。 | -| uri | string | 是 | 音频输出URI。支持:
1. 文件的绝对路径:file:///data/data/ohos.xxx.xxx/cache/test.mp4![zh-cn_image_0000001164217678](/images/application-dev/reference/apis/figures/zh-cn_image_0000001164217678.png)
2. 文件的fd路径:file://1 (fd number) | - - -## AudioEncoder - -表示音频编码格式的枚举。 - -| 名称 | 默认值 | 说明 | -| ------ | ------ | ------------------------------------------------------------ | -| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。 | - - -## AudioOutputFormat - -表示音频封装格式的枚举。 - -| 名称 | 默认值 | 说明 | -| -------- | ------ | ------------------------------------------------------------ | -| MPEG_4 | 2 | 封装为MPEG-4格式。 | -| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 | \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" deleted file mode 100644 index 6024540345d1f1b6e6132bd8f12e0b96abd0e6d0..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/04.\346\225\260\346\215\256\347\256\241\347\220\206/01.\346\226\207\344\273\266\347\256\241\347\220\206.md" +++ /dev/null @@ -1,891 +0,0 @@ ---- -title: 文件管理 -permalink: /pages/000b000300 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 文件管理 - -> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - -``` -import fileio from '@ohos.fileio'; -``` - - -## 权限列表 - -无 - - -## 使用说明 - -使用该功能模块对文件/目录进行操作前,需要先获取其绝对路径,获取方式及其接口用法请参考:[Context模块的接口getOrCreateLocalDir](/pages/000b000007)。 - -“文件/目录绝对路径”=“应用目录路径”+“文件/目录名” - -通过上述接口获取到应用目录路径dir,文件名为“xxx.txt”,文件所在绝对路径为: - -``` -let path = dir + "xxx.txt" -``` - - -文件描述符fd: - - -``` -let fd = fileio.openSync(path); -``` - - -## fileio.statSync - -statSync(path:string): Stat - -以同步方法获取文件的信息。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待获取文件的绝对路径。 | - - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | [Stat](#stat) | 表示文件的具体信息。 | - -- 示例: - ``` - let stat = fileio.statSync(path); - ``` - - -## fileio.opendirSync - -opendirSync(path: string): Dir - -以同步方法打开文件目录。 - - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待打开文件目录的绝对路径。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | [Dir](#dir) | 返回Dir对象。 | - -- 示例: - ``` - let dir = fileio.opendirSync(path); - ``` - - -## fileio.accessSync - -accessSync(path: string, mode?: number): void - -以同步方法检查当前进程是否可访问某文件。 - - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待访问文件的绝对路径。 | - | mode | number | 否 | 访问文件时的选项,可给定如下选项,以按位或的方式使用多个选项,默认给定0。
确认当前进程是否具有对应权限:
- 0:确认文件是否存在。
- 1:确认当前进程是否具有可执行权限。
- 2:确认当前进程是否具有写权限。
- 4:确认当前进程是否具有读权限。 | - -- 示例: - ``` - fileio.accessSync(path); - ``` - - -## fileio.closeSync - -closeSync(fd: number): void - -以同步方法关闭文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待关闭文件的文件描述符。 | - -- 示例: - ``` - fileio.closeSync(fd); - ``` - - -## fileio.copyFileSync - -fileio.copyFileSync(src: string, dest: string, mode?:number): void - -以同步方法复制文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | src | string | 是 | 待复制文件的路径。 | - | dest | string | 是 | 目标文件路径。 | - | mode | number | 否 | mode提供覆盖文件的选项,当前仅支持0,且默认为0。
0:完全覆盖目标文件,未覆盖部分将被裁切掉。 | - -- 示例: - ``` - fileio.copyFileSync(src, dest); - ``` - - -## fileio.mkdirSync - -fileio.mkdirSync(path: string, mode?: number): void - -以同步方法创建目录。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待创建目录的绝对路径。 | - | mode | number | 否 | 创建目录的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o775。
- 0o775:所有者具有读、写及可执行权限,其余用户具有读及可执行权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | - -- 示例: - ``` - fileio.mkdirSync(path); - ``` - - -## fileio.openSync - -openSync(path: string, flags?: number, mode?: number): number - -以同步方法打开文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待打开文件的绝对路径。 | - | flags | number | 否 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开:
- 0o0:只读打开。
- 0o1:只写打开。
- 0o2:读写打开。
同时,也可给定如下选项,以按位或的方式追加,默认不给定任何额外选项:
- 0o100:若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。
- 0o200:如果追加了0o100选项,且文件已经存在,则出错。
- 0o1000:如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。
- 0o2000:以追加方式打开,后续写将追加到文件末尾。
- 0o4000:如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续 IO 进行非阻塞操作。
- 0o200000:如果path指向目录,则出错。
- 0o400000:如果path指向符号链接,则出错。
- 0o4010000:以同步IO的方式打开文件。 | - | mode | number | 否 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o666。
- 0o666:所有者具有读、写权限,所有用户组具有读、写权限,其余用户具有读、写权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | number | 打开文件的文件描述符。 | - -- 示例: - ``` - fileio.openSync(path); - ``` - - -## fileio.readSync - -readSync(fd: number, buffer: ArrayBuffer, options?: Object): number - -以同步方法从文件读取数据。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待读取文件的文件描述符。 | - | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | - | options | Object | 否 | 支持如下选项:
- offset,number 类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number 类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number 类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | number | 实际读取的长度。 | - -- 示例: - ``` - let fd = fileio.openSync(path, 0o2); - let buf = new ArrayBuffer(4096); - fileio.readSync(fd, buf); - console.log(String.fromCharCode.apply(null, new Uint8Array(buf))); - ``` - - -## fileio.rmdirSync - -rmdirSync(path: string): void - -以同步方法删除目录。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待删除目录的绝对路径。 | - -- 示例: - ``` - fileio.rmdirSync(path); - ``` - - -## fileio.unlinkSync - -unlinkSync(path: string): void - -以同步方法删除文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待删除文件的绝对路径。 | - -- 示例: - ``` - fileio.unlinkSync(path); - ``` - - -## fileio.writeSync - -writeSync(fd: number, buffer: ArrayBuffer | string, options?:Object): number - -以同步方法将数据写入文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待写入文件的文件描述符。 | - | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | - | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | number | 实际写入的长度。 | - -- 示例: - ``` - let fd = fileio.openSync(path, 0o102, 0o666); - fileio.writeSync(fd, "hello, world"); - ``` - - -## fileio.chmodSync7+ - -chmodSync(path: string, mode: number): void - -以同步方法基于文件路径改变文件权限。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待改变文件权限的绝对路径。 | - | mode | number | 是 | 改变文件权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | - -- 示例: - ``` - fileio.chmodSync(fpath, mode); - ``` - - -## fileio.fstatSync7+ - -fstatSync(fd: number): Stat - -以同步方法基于文件描述符获取文件状态信息。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待获取文件的文件描述符。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Promise<Stat> | 表示文件的具体信息。 | - -- 示例: - ``` - let fd = fileio.openSync(path); - let stat = fileio.fstatSync(fd); - ``` - - -## fileio.ftruncateSync7+ - -ftruncateSync(fd: number, len?: number): void - -以同步方法基于文件描述符截断文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待截断文件的文件描述符。 | - | len | number | 否 | 文件截断后的长度,以字节为单位。 | - -- 示例: - ``` - fileio.ftruncate(fd, len); - ``` - - -## fileio.fchmodSync7+ - -fchmodSync(existingPath: string, newPath: string): void - -以同步方法基于文件描述符改变文件权限。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待改变文件的文件描述符。 | - | mode | number | 是 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限。
- 0o700:所有者具有读、写及可执行权限。
- 0o400:所有者具有读权限。
- 0o200:所有者具有写权限。
- 0o100:所有者具有可执行权限。
- 0o070:所有用户组具有读、写及可执行权限。
- 0o040:所有用户组具有读权限。
- 0o020:所有用户组具有写权限。
- 0o010:所有用户组具有可执行权限。
- 0o007:其余用户具有读、写及可执行权限。
- 0o004:其余用户具有读权限。
- 0o002:其余用户具有写权限。
- 0o001:其余用户具有可执行权限。 | - -- 示例: - ``` - fileio.fchmodSync(fd, mode); - ``` - - -## fileio.truncateSync7+ - -truncateSync(fpath: string, len?: number): void - -以同步方法基于文件路径截断文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待截断文件的绝对路径。 | - | len | number | 否 | 文件截断后的长度,以字节为单位。 | - -- 示例: - ``` - fileio.ftruncate(path, len); - ``` - - -## fileio.renameSync7+ - -renameSync(oldPath: string, newPath: string): void - -以同步方法重命名文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | oldPath | string | 是 | 目标文件的当前绝对路径。 | - | Newpath | String | 是 | 目标文件的新绝对路径。 | - -- 示例: - ``` - fileio.renameSync(oldpath, newpath); - ``` - - -## fileio.fsyncSync7+ - -fsyncSync(fd: number): void - -以同步方法同步文件数据。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待同步文件的文件描述符。 | - -- 示例: - ``` - fileio.fyncsSync)(fd); - ``` - - -## fileio.chownSync7+ - -chownSync(path: string, uid: number, gid: number): void - -以同步的方法基于文件路径改变文件所有者。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待改变文件的绝对路径。 | - | uid | number | 是 | 新的UID。 | - | gid | number | 是 | 新的GID。 | - -- 示例: - ``` - let stat = fileio.statSync(fpath) - fileio.chownSync(path, stat.uid, stat.gid); - ``` - - -## fileio.createStreamSync7+ - -createStreamSync(path: string, mode: string): Stream - -以同步方法基于文件路径打开文件流。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | path | string | 是 | 待打开文件的绝对路径。 | - | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | - -- 返回值: - | 参数名 | 说明 | - | -------- | -------- | - | [Stream](#stream7-) | 返回文件流的结果。 | - -- 示例: - ``` - let ss = fileio.createStream(path, "r+"); - ``` - - -## fileio.fdopenStreamSync7+ - -fdopenStreamSync(fd: number, mode: string): Stream - -以同步方法基于文件描述符打开文件流。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待打开文件的文件描述符。 | - | mode | string | 是 | - r:打开只读文件,该文件必须存在。
- r+:打开可读写的文件,该文件必须存在。
- w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 | - -- 返回值: - | 参数名 | 说明 | - | -------- | -------- | - | [Stream](#stream7-) | 返回文件流的结果。 | - -- 示例: - ``` - let ss = fileio.fdopenStreamSync(fd, "r+"); - ``` - - -## fileio.fchownSync7+ - -fchownSync(fd: number, uid: number, gid: number): void - -以同步方法基于文件描述符改变文件所有者。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fd | number | 是 | 待改变文件的文件描述符。 | - | uid | number | 是 | 文件所有者的UID。 | - | gid | number | 是 | 文件所有组的GID。 | - -- 示例: - ``` - let stat = fileio.statSync(fpath); - fileio.fchownSync(fd, stat.uid, stat.gid); - ``` - - -## Stat - -文件具体信息,在调用Stat的方法前,需要先通过[fileio.statSync](#fileio.statsync)来构建一个Stat实例。 - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| dev | number | 是 | 否 | 标识包含该文件的主设备号。 | -| ino | number | 是 | 否 | 标识该文件。通常同设备上的不同文件的INO不同。 | -| mode | number | 是 | 否 | 表示文件类型及权限,其首 4 位表示文件类型,后 12 位表示权限。各特征位的含义如下:
- 0o170000:可用于获取文件类型的掩码。
- 0o140000:文件是套接字。
- 0o120000:文件是符号链接。
- 0o100000:文件是一般文件。
- 0o060000:文件属于块设备。
- 0o040000:文件是目录。
- 0o020000:文件是字符设备。
- 0o010000:文件是具名管道,即FIFO。
- 0o0700:可用于获取用户权限的掩码。
- 0o0400:用户读,对于普通文件,所有者可读取文件;对于目录,所有者可读取目录项。
- 0o0200:用户写,对于普通文件,所有者可写入文件;对于目录,所有者可创建/删除目录项。
- 0o0100:用户执行,对于普通文件,所有者可执行文件;对于目录,所有者可在目录中搜索给定路径名。
- 0o0070:可用于获取用户组权限的掩码。
- 0o0040:用户组读,对于普通文件,所有用户组可读取文件;对于目录,所有用户组可读取目录项。
- 0o0020:用户组写,对于普通文件,所有用户组可写入文件;对于目录,所有用户组可创建/删除目录项。
- 0o0010:用户组执行,对于普通文件,所有用户组可执行文件;对于目录,所有用户组是否可在目录中搜索给定路径名。
- 0o0007:可用于获取其他用户权限的掩码。
- 0o0004:其他读,对于普通文件,其余用户可读取文件;对于目录,其他用户组可读取目录项。
- 0o0002:其他写,对于普通文件,其余用户可写入文件;对于目录,其他用户组可创建/删除目录项。
- 0o0001:其他执行,对于普通文件,其余用户可执行文件;对于目录,其他用户组可在目录中搜索给定路径名。 | -| nlink | number | 是 | 否 | 文件的硬链接数。 | -| uid | number | 是 | 否 | 文件所有者的ID。 | -| gid | number | 是 | 否 | 文件所有组的ID。 | -| rdev | number | 是 | 否 | 标识包含该文件的从设备号。 | -| size | number | 是 | 否 | 文件的大小,以字节为单位。仅对普通文件有效。 | -| blocks | number | 是 | 否 | 文件占用的块数,计算时块大小按512B计算。 | -| atime | number | 是 | 否 | 上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | -| mtime | number | 是 | 否 | 上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | -| ctime | number | 是 | 否 | 最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。 | - - -### isBlockDevice - -isBlockDevice(): boolean - -用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是块特殊设备。 | - -- 示例: - ``` - let isBLockDevice = fileio.statSync(path).isBlockDevice(); - ``` - - -### isCharacterDevice - -isCharacterDevice(): boolean - -用于判断当前目录项是否是字符特殊文件。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是字符特殊设备。 | - -- 示例: - ``` - let isCharacterDevice = fileio.statSync(path).isCharacterDevice(); - ``` - - -### isDirectory - -isDirectory(): boolean - -用于判断当前目录项是否是目录。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是目录。 | - -- 示例: - ``` - let isDirectory= fileio.statSync(path).isDirectory(); - ``` - - -### isFIFO - -isFIFO(): boolean - -用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是 FIFO。 | - -- 示例: - ``` - let isFIFO= fileio.statSync(path).isFIFO(); - ``` - - -### isFile - -isFile(): boolean - -用于判断当前目录项是否是普通文件。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是普通文件。 | - -- 示例: - ``` - let isFile= fileio.statSync(fpath).isFile(); - ``` - - -### isSocket - -isSocket(): boolean - -用于判断当前目录项是否是套接字。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是套接字。 | - -- 示例: - ``` - let isSocket = fileio.statSync(path).isSocket(); - ``` - - -### isSymbolicLink - -isSymbolicLink(): boolean - -用于判断当前目录项是否是符号链接。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是符号链接。 | - -- 示例: - ``` - let isSymbolicLink = fileio.statSync(path).isSymbolicLink(); - ``` - - -## Stream7+ - -文件流,在调用Stream的方法前,需要先通过[fileio.createStreamSync](#fileio.createstreamsync)方法来构建一个Stream实例。 - - -### closeSync7+ - -closeSync(): void - -同步关闭文件流。 - -- 示例: - ``` - let ss= fileio.createStreamSync(path); - ss.closeSync(); - ``` - - -### flushSync7+ - -flushSync(): void - -同步刷新文件流。 - -- 示例: - ``` - let ss= fileio.createStreamSync(path); - ss.flushSync(); - ``` - - -### writeSync7+ - -writeSync(buffer: ArrayBuffer | string, options?:Object): number - -以同步方法将数据写入流文件。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | - | options | Object | 否 | 支持如下选项:
- offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
- length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
- encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | number | 实际写入的长度。 | - -- 示例: - ``` - let ss= fileio.createStreamSync(fpath,"r+"); - ss.writeSync("hello, world",{offset: 1,length: 5,position: 5,encoding :'utf-8'}); - ``` - - -### readSync7+ - -readSync(buffer: ArrayBuffer, options?: Object): number - -以同步方法从流文件读取数据。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | - | options | Object | 否 | 支持如下选项:
- offset,number 类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
- length,number 类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
- position,number 类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | number | 实际读取的长度。 | - -- 示例: - ``` - let ss = fileio.createStreamSync(fpath, "r+"); - ss.readSync(new ArrayBuffer(4096),{offset: 1,length: FILE_CONTENT.length,position: 5}); - ``` - - -## Dir - -管理目录,在调用Dir的方法前,需要先通过[fileio.opendirSync](#fileio.opendirsync)方法来构建一个Dir实例。 - - -### readSync - -readSync(): Dirent - -同步读取下一个目录项。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | [Dirent](#dirent) | 表示一个目录项。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let dirent = dir.readSync(); - console.log(dirent.name); - ``` - - -### closeSync - -closeSync(): void - -用于关闭目录。目录被关闭后,Dir中持有的文件描述将被释放,后续将无法从Dir中读取目录项。 - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - dir.closeSync(); - ``` - - -## Dirent - -在调用Dirent的方法前,需要先通过[readSync](#readsync)方法来构建一个Dirent实例。 - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| name | string | 是 | 否 | 目录项的名称。 | - - -### isBlockDevice - -isBlockDevice(): boolean - -用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是块特殊设备。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isBLockDevice = dir.readSync().isBlockDevice(); - ``` - - -### isCharacterDevice - -isCharacterDevice(): boolean - -用于判断当前目录项是否是字符特殊设备。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是字符特殊设备。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isCharacterDevice = dir.readSync().isCharacterDevice(); - ``` - - -### isDirectory - -isDirectory(): boolean - -用于判断当前目录项是否是目录。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是目录。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isDirectory = dir.readSync().isDirectory(); - ``` - - -### isFIFO - -isFIFO(): boolean - -用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是FIFO。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isFIFO = dir.readSync().isFIFO(); - ``` - - -### isFile - -isFile(): boolean - -用于判断当前目录项是否是普通文件。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是普通文件。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isFile = dir.readSync().isFile(); - ``` - - -### isSocket - -isSocket(): boolean - -用于判断当前目录项是否是套接字。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是套接字。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isSocket = dir.readSync().isSocket(); - ``` - - -### isSymbolicLink - -isSymbolicLink(): boolean - -用于判断当前目录项是否是符号链接。 - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | boolean | 表示当前目录项是否是符号链接。 | - -- 示例: - ``` - let dir = fileio.opendirSync(dpath); - let isSymbolicLink = dir.readSync().isSymbolicLink(); - ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" deleted file mode 100644 index 241a809d42c8b62b55431f03c770ae67e7d87812..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/07.\347\275\221\347\273\234\344\270\216\350\277\236\346\216\245/01.WLAN.md" +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: WLAN -permalink: /pages/000b000600 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# WLAN - -> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - -## 导入模块 - -``` -import wifi from '@ohos.wifi_native_js'; -``` - -## wifi.isWifiActive - -isWifiActive(): boolean - -查询WLAN是否已激活。 - -**返回值:** - -| **类型** | **说明** | -| -------- | ---------------------------- | -| boolean | true:已激活, false:未激活。 | - -## wifi.getSignalLevel - -getSignalLevel(rssi: number, band: number): number - -查询WLAN信号强度。 - -**参数:** - -| **参数名** | **类型** | **必填** | **说明** | -| ---------- | -------- | -------- | --------------------- | -| rssi | number | 是 | 热点的信号强度(dBm)。 | -| band | number | 是 | WLAN接入点的频段。 | - -**返回值:** - -| **类型** | **说明** | -| -------- | ---------------------------- | -| number | 信号强度,取值范围为[0, 4]。 | - -## wifi.scan - -scan(): boolean - -启动WLAN扫描。 - -**返回值:** - -| **类型** | **说明** | -| -------- | -------------------------------------------- | -| boolean | true:扫描操作成功, false:扫描操作执行失败。 | - -## wifi.getScanInfos - -getScanInfos(): Promise> - -获取扫描结果,使用promise方式作为异步方法。 - -**返回值:** - -| **类型** | **说明** | -| ------------------------------------------------ | ---------------------- | -| Promise< Array\<[WifiScanInfo](#wifiscaninfo)> > | 返回扫描到的热点列表。 | - -## wifi.getScanInfos - -getScanInfos(callback: AsyncCallback>): void - -获取扫描结果,使用callback方式作为异步方法。 - -| **参数名** | **类型** | **必填** | **说明** | -| ---------- | ----------------------------------------------------- | -------- | ------------------------------ | -| callback | AsyncCallback< Array\<[WifiScanInfo](#wifiscaninfo)>> | 是 | 扫描到的热点列表结果回调函数。 | - -**示例:** - -``` -import wifi from '@ohos.wifi_native_js'; - - -wifi.getScanInfos(result => { - var len = Object.keys(result).length; - console.log("received scan info size: " + len); - for (var i = 0; i < len; ++j) { - console.info("ssid: " + result[i].ssid); - console.info("bssid: " + result[i].bssid); - console.info("securityType: " + result[i].securityType); - console.info("rssi: " + result[i].rssi); - console.info("band: " + result[i].band); - console.info("frequency: " + result[i].frequency); - console.info("timestamp: " + result[i].timestamp); - } -}); - -wifi.getScanInfos().then(result => { - var len = Object.keys(result).length; - console.log("received scan info size: " + len); - for (var i = 0; i < len; ++i) { - console.info("ssid: " + result[i].ssid); - console.info("bssid: " + result[i].bssid); - console.info("securityType: " + result[i].securityType); - console.info("rssi: " + result[i].rssi); - console.info("band: " + result[i].band); - console.info("frequency: " + result[i].frequency); - console.info("timestamp: " + result[i].timestamp); - } -}); -``` - -## WifiScanInfo - -WLAN热点信息。 - -| **参数名** | **类型** | **读写属性** | **说明** | -| ------------ | ---------------- | ------------ | ----------------------------- | -| ssid | string | 只读 | 热点的SSID,编码格式为UTF-8。 | -| bssid | string | 只读 | 热点的BSSID。 | -| securityType | WifiSecurityType | 只读 | WLAN加密类型。 | -| rssi | number | 只读 | 热点的信号强度(dBm)。 | -| band | number | 只读 | WLAN接入点的频段。 | -| frequency | number | 只读 | WLAN接入点的频率。 | -| timestamp | number | 只读 | 时间戳。 | \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.\345\255\227\347\254\246\344\270\262\347\274\226\350\247\243\347\240\201.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.\345\255\227\347\254\246\344\270\262\347\274\226\350\247\243\347\240\201.md" deleted file mode 100644 index 554ffec1b987a028c8fdc84b1e2610e6179f8952..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/01.JSAPI\345\217\202\350\200\203/10.\350\257\255\350\250\200\345\237\272\347\241\200\347\261\273\345\272\223/03.\345\255\227\347\254\246\344\270\262\347\274\226\350\247\243\347\240\201.md" +++ /dev/null @@ -1,289 +0,0 @@ ---- -title: 字符串编解码 -permalink: /pages/000b000902 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 字符串编解码 - -> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - -``` -import util from '@ohos.util'; -``` - - -## 权限 - -无 - - -## util.printf - -printf(format: string, ...args: Object[]): string - -通过式样化字符串对输入的内容按特定格式输出。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | format | string | 是 | 式样化字符串。 | - | ...args | Object[] | 否 | 待式样化数据。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 按特定格式式样化后的字符串。 | - -- 示例: - ``` - var res = util.printf("%s", "hello world!"); - console.log(res); - ``` - - -## util.getErrorString - -getErrorString(errno: number): string - -获取系统错误码对应的详细信息。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | errno | number | 是 | 系统发生错误产生的错误码。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 错误码对应的详细信息。 | - -- 示例: - ``` - var errnum = 10; // 10:a system error number - var result = util.getErrorString(errnum); - console.log("result = " + result); - ``` - - -## util.callbackWrapper - -callbackWrapper(original: Function): (err: Object, value: Object)=>void - -对异步函数进行回调化处理,回调中第一个参数将是拒绝原因(如果 Promise 已解决,则为 null),第二个参数将是已解决的值。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | original | Function | 是 | 异步函数。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Function | 返回一个第一个参数是拒绝原因(如果 Promise 已解决,则为 null),第二个参数是已解决的回调函数。 | - -- 示例: - ``` - async function promiseFn() { - return Promise.reject('value'); - } - var cb = util.callbackWrapper(promiseFn); - cb((err, ret) => { - expect(err).strictEqual('value'); - expect(ret).strictEqual(undefined); - }) - ``` - - -## util.promiseWrapper - -promiseWrapper(original: (err: Object, value: Object) => void): Object - -对异步函数处理并返回一个promise的版本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | original | Function | 是 | 异步函数。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Function | 采用遵循常见的错误优先的回调风格的函数(也就是将 (err, value) => ... 回调作为最后一个参数),并返回一个返回 promise 的版本。 | - -- 示例: - ``` - function aysnFun(str1, str2, callback) { - if (typeof str1 === 'string' && typeof str1 === 'string') { - callback(null, str1 + str2); - } else { - callback('type err'); - } - } - let newPromiseObj = util.promiseWrapper(aysnFun)("Hello", 'World'); - newPromiseObj.then(res => { - expect(res).strictEqual('HelloWorld'); - }) - ``` - - -## TextDecoder - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| encoding | string | 是 | 否 | 编码格式。
- 支持格式:utf-8、ibm866、iso-8859-2、iso-8859-3、iso-8859-4、iso-8859-5、iso-8859-6、iso-8859-7、iso-8859-8、iso-8859-8-i、iso-8859-10、iso-8859-13、iso-8859-14、iso-8859-15、koi8-r、koi8-u、macintosh、windows-874、windows-1250、windows-1251、windows-1252、windows-1253、windows-1254、windows-1255、windows-1256、windows-1257、windows-1258、x-mac-cyrilli、gbk、gb18030、big5、euc-jp、iso-2022-jp、shift_jis、euc-kr、utf-16be、utf-16le。 | -| fatal | boolean | 是 | 否 | 是否显示致命错误。 | -| ignoreBOM | boolean | 是 | 否 | 是否忽略BOM(byte order marker)标记,默认值是false。 | - - -### constructor - -constructor(encoding?: string, options?: { fatal?: boolean; ignoreBOM?: boolean },) - -TextDecoder的构造函数。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | encoding | string | 否 | 编码格式。 | - | options | Object | 否 | 编码相关选项参数,存在两个属性fatal和ignoreBOM。 | - - **表1** options - - | 名称 | 参数类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | fatal | boolean | 否 | 是否显示致命错误。 | - | ignoreBOM | boolean | 否 | 是否忽略BOM标记。 | - -- 示例: - ``` - var textDecoder = new util.TextDecoder("utf-8",{ignoreBOM:true}); - ``` - - -### decode - -decode(input: Uint8Array, options?:{stream?:false}): string - -通过输入参数解码后输出对应文本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | input | Uint8Array | 是 | 符合格式需要解码的数组。 | - | options | Object | 否 | 解码相关选项参数。 | - - **表2** options - - | 名称 | 参数类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | stream | boolean | 否 | 在随后的decode()调用中是否跟随附加数据块,如果以块的形式处理数据,则设置为true;如果处理最后的数据块或数据未分块,则设置为false。默认为false。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | string | 解码后的数据。 | - -- 示例: - ``` - var textDecoder = new util.TextDecoder("utf-8",{ignoreBOM:true}); - var result = new Uint8Array(6); - result[0] = 0xEF; - result[1] = 0xBB; - result[2] = 0xBF; - result[3] = 0x61; - result[4] = 0x62; - result[5] = 0x63; - console.log("input num:"); - for(var j= 0; j < 6; j++) { - console.log(result[j]); - } - var retStr = textDecoder.decode( result , {stream:false}); - console.log("retStr = " + retStr); - ``` - - -## TextEncoder - - -### 属性 - -| 名称 | 参数类型 | 可读 | 可写 | 说明 | -| -------- | -------- | -------- | -------- | -------- | -| encoding | string | 是 | 否 | 编码格式,默认值是utf-8。 | - - -### constructor - -constructor() - -TextEncoder的构造函数。 - -- 示例: - ``` - var textEncoder = new util.TextEncoder(); - ``` - - -### encode - -encode(input?: string): Uint8Array - -通过输入参数编码后输出对应文本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | input | string | 是 | 需要编码的字符串。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Uint8Array | 返回编码后的文本。 | - -- 示例: - ``` - var textEncoder = new util.TextEncoder(); - var result = new Uint8Array(buffer); - result = textEncoder.encode("\uD800¥¥"); - ``` - - -### encodeInto - -encodeInto(input: string, dest: Uint8Array,):{ read: number; written: number } - -放置生成的UTF-8编码文本。 - -- 参数: - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | input | string | 是 | 需要编码的字符串。 | - | dest | Uint8Array | 是 | Uint8Array对象实例,用于将生成的UTF-8编码文本放入其中。 | - -- 返回值: - | 类型 | 说明 | - | -------- | -------- | - | Uint8Array | 返回编码后的文本。 | - -- 示例: - ``` - var that = new util.TextEncoder(); - var buffer = new ArrayBuffer(4); - this.dest = new Uint8Array(buffer); - var result = that.encodeInto("abcd", this.dest); - ``` diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" deleted file mode 100644 index 75e354efb90dcf7ecaf7ec4510dd7094f4e3f47a..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207.md" +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: 文件组织 -permalink: /pages/000b01000000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# 文件组织 - -## 目录结构 - -JS FA应用的JS模块\(entry/src/main/js/module\)的典型开发目录结构如下: - -**图 1** 目录结构 - - -![](/images/application-dev/reference/arkui-js/figures/unnaming-(1).png) - -**图 2** 多实例资源共享目录结构5+ -![](/images/application-dev/reference/arkui-js/figures/多实例资源共享目录结构5+.png "多实例资源共享目录结构5+") - -目录结构中文件分类如下: - -- .hml结尾的HML模板文件,这个文件用来描述当前页面的文件布局结构。 -- .css结尾的CSS样式文件,这个文件用于描述页面样式。 -- .js结尾的JS文件,这个文件用于处理页面和用户的交互。 - -各个文件夹的作用: - -- app.js文件用于全局JavaScript逻辑和应用生命周期管理,详见[app.js](/pages/000b01000002)说明。 -- pages目录用于存放所有组件页面。 -- common目录用于存放公共资源文件,比如:媒体资源,自定义组件和JS文件。 -- resources目录用于存放资源配置文件,比如:多分辨率加载等配置文件,详见[资源限定与访问](/pages/000b01000005)章节。 -- share目录5+用于配置多个实例共享的资源内容,比如:share中的图片和JSON文件可被default1和default2实例共享。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- i18n和resources是开发保留文件夹,不可重命名。 ->- 如果share目录中的资源和实例\(default\)中的资源文件同名且目录一致时,实例中资源的优先级高于share中资源的优先级。 ->- share目录当前不支持i18n。 ->- 在使用DevEco Studio进行应用开发时,目录结构中的可选文件夹需要开发者根据实际情况自行创建。 - -## 文件访问规则 - -应用资源可通过绝对路径或相对路径的方式进行访问,本开发框架中绝对路径以"/"开头,相对路径以"./"或"../"。具体访问规则如下: - -- 引用代码文件,推荐使用相对路径,比如:../common/utils.js。 -- 引用资源文件,推荐使用绝对路径。比如:/common/xxx.png。 -- 公共代码文件和资源文件推荐放在common下,通过以上两条规则进行访问。 -- CSS样式文件中通过url\(\)函数创建数据类型,如:url\(/common/xxx.png\)。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->当代码文件A需要引用代码文件B时: ->- 如果代码文件A和文件B位于同一目录,则代码文件B引用资源文件时可使用相对路径,也可使用绝对路径。 ->- 如果代码文件A和文件B位于不同目录,则代码文件B引用资源文件时必须使用绝对路径。因为Webpack打包时,代码文件B的目录会发生变化。 ->- 在js文件中通过数据绑定的方式指定资源文件路径时,必须使用绝对路径。 - -## 媒体文件格式 - -**表 1** 支持的图片格式 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

格式

-

支持版本

-

支持的文件类型

-

BMP

-

API Version 3+

-

.bmp

-

GIF

-

API Version 3+

-

.gif

-

JPEG

-

API Version 3+

-

.jpg

-

PNG

-

API Version 3+

-

.png

-

WebP

-

API Version 3+

-

.webp

-
- -**表 2** 支持的视频格式 - - - - - - - - - - - - -

格式

-

支持版本

-

支持的文件类型

-

H.264 AVC

-

Baseline Profile (BP)

-

API Version 3+

-

.3gp

-

.mp4

-
- diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" deleted file mode 100644 index 4b4bdf8ed5117ef3883dadd22ed9e621b353fb52..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" +++ /dev/null @@ -1,187 +0,0 @@ ---- -title: js标签配置 -permalink: /pages/000b01000001 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:36 ---- -# js标签配置 - -js标签中包含了实例名称、页面路由和窗口样式信息。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

标签

-

类型

-

默认值

-

必填

-

描述

-

name

-

string

-

default

-

-

标识JS实例的名字。

-

pages

-

Array

-

-

-

-

路由信息,详见“pages”。

-

window

-

Object

-

-

-

-

窗口信息,详见“window”。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->name、pages和window等标签配置需在配置文件(config.json)中的“js”标签中完成设置。 - -## pages - -定义每个页面的路由信息,每个页面由页面路径和页面名组成,页面的文件名就是页面名。比如: - -``` -{ - ... - "pages": [ - "pages/index/index", - "pages/detail/detail" - ] - ... -} -``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- pages列表中第一个页面是应用的首页,即entry入口。 ->- 页面文件名不能使用组件名称,比如:text.hml、button.hml等。 - -## window - -window用于定义与显示窗口相关的配置。对于屏幕适配问题,有2种配置方法: - -- 指定designWidth(屏幕逻辑宽度),所有与大小相关的样式(例如width、font-size)均以designWidth和实际屏幕宽度的比例进行缩放,例如在designWidth为720时,如果设置width为100px时,在实际宽度为1440物理像素的屏幕上,width实际渲染像素为200物理像素。 -- 设置autoDesignWidth为true,此时designWidth字段将会被忽略,渲染组件和布局时按屏幕密度进行缩放。屏幕逻辑宽度由设备宽度和屏幕密度自动计算得出,在不同设备上可能不同,请使用相对布局来适配多种设备。例如:在466\*466分辨率,320dpi的设备上,屏幕密度为2(以160dpi为基准),1px等于渲染出的2物理像素。 - - >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** - >1. 组件样式中类型的默认值,按屏幕密度进行计算和绘制,如:在屏幕密度为2(以160dpi为基准)的设备上,默认为1px时,设备上实际渲染出2物理像素。 - >2. autoDesignWidth、designWidth的设置不影响默认值计算方式和绘制结果。 - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

必填

-

缺省值

-

描述

-

designWidth

-

number

-

-

720

-

页面显示设计时的参考值,实际显示效果基于设备宽度与参考值之间的比例进行缩放。

-

autoDesignWidth

-

boolean

-

-

false

-

页面设计基准宽度是否自动计算,当设为true时,designWidth将会被忽略,设计基准宽度由设备宽度与屏幕密度计算得出。

-
- -示例如下: - -``` -{ - ... - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - ... -} -``` - -## 示例 - -``` -{ - "app": { - "bundleName": "com.example.player", - "version": { - "code": 1, - "name": "1.0" - }, - "vendor": "example" - } - "module": { - ... - "js": [ - { - "name": "default", - "pages": [ - "pages/index/index", - "pages/detail/detail" - ], - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - } - ], - "abilities": [ - { - ... - } - ] - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" deleted file mode 100644 index faff3b6ebcf2eef6c5da2be129e7f500572e3f9d..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.app.js.md" +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: app.js -permalink: /pages/000b01000002 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false ---- -# app.js - -## 应用生命周期 - -每个应用可以在app.js自定义应用级[生命周期](/pages/000b01000004)的实现逻辑,以下示例仅在生命周期函数中打印对应日志: - -``` -// app.js -export default { - onCreate() { - console.info('Application onCreate'); - }, - - onDestroy() { - console.info('Application onDestroy'); - }, -} -``` - -## 应用对象6+ - - - - - - - - - - - - -

属性

-

类型

-

描述

-

getApp

-

Function

-

提供getApp()全局方法,可以在自定义js文件中获取app.js中暴露的对象。

-
- -示例如下: - -``` -// app.js -export default { - data: { - test: "by getAPP" - }, - onCreate() { - console.info('AceApplication onCreate'); - }, - onDestroy() { - console.info('AceApplication onDestroy'); - }, -}; -``` - -``` -// test.js 自定义逻辑代码 -export var appData = getApp().data; -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" deleted file mode 100644 index 8ce940f38c43077e35edf1e0e174fb34e1affdf4..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/02.CSS\350\257\255\346\263\225\345\217\202\350\200\203.md" +++ /dev/null @@ -1,288 +0,0 @@ ---- -title: CSS语法参考 -permalink: /pages/000b0100000301 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# CSS语法参考 - -CSS是描述HML页面结构的样式语言。所有组件均存在系统默认样式,也可在页面CSS样式文件中对组件、页面自定义不同的样式。 - -## 尺寸单位 - -1. 逻辑像素px(文档中以表示): - 1. 默认屏幕具有的逻辑宽度为720px(配置见[配置文件](/pages/000b01000001)中的window小节),实际显示时会将页面布局缩放至屏幕实际宽度,如100px在实际宽度为1440物理像素的屏幕上,实际渲染为200物理像素(从720px向1440物理像素,所有尺寸放大2倍)。 - 2. 额外配置autoDesignWidth为true时(配置见[配置文件](/pages/000b01000001)中的window小节),逻辑像素px将按照屏幕密度进行缩放,如100px在屏幕密度为3的设备上,实际渲染为300物理像素。应用需要适配多种设备时,建议采用此方法。 - -2. 百分比(文档中以表示):表示该组件占父组件尺寸的百分比,如组件的width设置为50%,代表其宽度为父组件的50%。 - -## 样式导入 - -为了模块化管理和代码复用,CSS样式文件支持 @import 语句,导入css文件。 - -## 声明样式 - -每个页面目录下存在一个与布局hml文件同名的css文件,用来描述该hml页面中组件的样式,决定组件应该如何显示。 - -1. 内部样式,支持使用style、class属性来控制组件的样式。例如: - - ``` - -
- Hello World -
- ``` - - ``` - /* index.css */ - .container { - justify-content: center; - } - ``` - -2. 文件导入,合并外部样式文件。例如,在common目录中定义样式文件style.css,并在index.css文件首行中进行导入: - - ``` - /* style.css */ - .title { - font-size: 50px; - } - ``` - - ``` - /* index.css */ - @import '../../common/style.css'; - .container { - justify-content: center; - } - ``` - - -## 选择器 - -css选择器用于选择需要添加样式的元素,支持的选择器如下表所示: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

选择器

-

样例

-

样例描述

-

.class

-

.container

-

用于选择class="container"的组件。

-

#id

-

#titleId

-

用于选择id="titleId"的组件。

-

tag

-

text

-

用于选择text组件。

-

,

-

.title, .content

-

用于选择class="title"和class="content"的组件。

-

#id .class tag

-

#containerId .content text

-

非严格父子关系的后代选择器,选择具有id="containerId"作为祖先元素,class="content"作为次级祖先元素的所有text组件。如需使用严格的父子关系,可以使用“>”代替空格,如:#containerId>.content。

-
- -示例: - -``` - -
- 标题 -
- 内容 -
-
-``` - -``` -/* 页面样式xxx.css */ -/* 对所有div组件设置样式 */ -div { - flex-direction: column; -} -/* 对class="title"的组件设置样式 */ -.title { - font-size: 30px; -} -/* 对id="contentId"的组件设置样式 */ -#contentId { - font-size: 20px; -} -/* 对所有class="title"以及class="content"的组件都设置padding为5px */ -.title, .content { - padding: 5px; -} -/* 对class="container"的组件下的所有text设置样式 */ -.container text { - color: #007dff; -} -/* 对class="container"的组件下的直接后代text设置样式 */ -.container > text { - color: #fa2a2d; -} -``` - -以上样式运行效果如下: - -![](/images/application-dev/reference/arkui-js/figures/sample_css.png) - -其中“.container text”将“标题”和“内容”设置为蓝色,而“.container \> text”直接后代选择器将“标题”设置为红色。2者优先级相同,但直接后代选择器声明顺序靠后,将前者样式覆盖(优先级计算见[选择器优先级](#section1460102134415))。 - -## 选择器优先级 - -选择器的优先级计算规则与w3c规则保持一致(只支持:内联样式,id,class,tag,后代和直接后代),其中内联样式为在元素style属性中声明的样式。 - -当多条选择器声明匹配到同一元素时,各类选择器优先级由高到低顺序为:内联样式 \> id \> class \> tag。 - -## 伪类 - -css伪类是选择器中的关键字,用于指定要选择元素的特殊状态。例如,:disabled状态可以用来设置元素的disabled属性变为true时的样式。 - -除了单个伪类之外,还支持伪类的组合,例如,:focus:checked状态可以用来设置元素的focus属性和checked属性同时为true时的样式。支持的单个伪类如下表所示,按照优先级降序排列: - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

支持组件

-

描述

-

:disabled

-

支持disabled属性的组件

-

表示disabled属性变为true时的元素(不支持动画样式的设置)。

-

:active

-

支持click事件的组件

-

表示被用户激活的元素,如:被用户按下的按钮、被激活的tab-bar页签(不支持动画样式的设置)

-

:waiting

-

button

-

表示waiting属性为true的元素(不支持动画样式的设置)

-

:checked

-

input[type="checkbox"、type="radio"]、 switch

-

表示checked属性为true的元素(不支持动画样式的设置)

-
- -伪类示例如下,设置按钮的:active伪类可以控制被用户按下时的样式: - -``` - -
- -
-``` - -``` -/* index.css */ -.button:active { - background-color: #888888;/*按钮被激活时,背景颜色变为#888888 */ -} -``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->针对弹窗类组件及其子元素不支持伪类效果,包括popup、dialog、menu、option、picker - -## 样式预编译 - -预编译提供了利用特有语法生成css的程序,可以提供变量、运算等功能,令开发者更便捷地定义组件样式,目前支持less、sass和scss的预编译。使用样式预编译时,需要将原css文件后缀改为less、sass或scss,如index.css改为index.less、index.sass或index.scss。 - -- 当前文件使用样式预编译,例如将原index.css改为index.less: - - ``` - /* index.less */ - /* 定义变量 */ - @colorBackground: #000000; - .container { - background-color: @colorBackground; /* 使用当前less文件中定义的变量 */ - } - ``` - - -- 引用预编译文件,例如common中存在style.scss文件,将原index.css改为index.scss,并引入style.scss: - - ``` - /* style.scss */ - /* 定义变量 */ - $colorBackground: #000000; - ``` - - 在index.scss中引用: - - ``` - /* index.scss */ - /* 引入外部scss文件 */ - @import '../../common/style.scss'; - .container { - background-color: $colorBackground; /* 使用style.scss中定义的变量 */ - } - ``` - - >![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** - >引用的预编译文件建议放在common目录进行管理。 - - -## CSS样式继承6+ - -css样式继承提供了子节点继承父节点样式的能力,继承下来的样式在多选择器样式匹配的场景下,优先级排最低,当前支持以下样式的继承: - -- font-family -- font-weight -- font-size -- font-style -- text-align -- line-height -- letter-spacing -- color -- visibility - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" deleted file mode 100644 index 2a40d52542e00d9a82deac6d5cc7fd413480e17b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\350\257\255\346\263\225/03.JS\350\257\255\346\263\225\345\217\202\350\200\203.md" +++ /dev/null @@ -1,535 +0,0 @@ ---- -title: JS语法参考 -permalink: /pages/000b0100000302 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# JS语法参考 - -JS文件用来定义HML页面的业务逻辑,支持ECMA规范的JavaScript语言。基于JavaScript语言的动态化能力,可以使应用更加富有表现力,具备更加灵活的设计能力。下面讲述JS文件的编译和运行的支持情况。 - -## 语法 - -支持ES6语法。 - -- 模块声明 - - 使用import方法引入功能模块: - - ``` - import router from '@system.router'; - ``` - -- 代码引用 - - 使用import方法导入js代码: - - ``` - import utils from '../../common/utils.js'; - ``` - - -## 对象 - -- 应用对象 - - - - - - - - - - - - -

属性

-

类型

-

描述

-

$def

-

Object

-

使用this.$app.$def获取在app.js中暴露的对象。

-
说明:

应用对象不支持数据绑定,需主动触发UI更新。

-
-
- - 示例代码 - - ``` - // app.js - export default { - onCreate() { - console.info('AceApplication onCreate'); - }, - onDestroy() { - console.info('AceApplication onDestroy'); - }, - globalData: { - appData: 'appData', - appVersion: '2.0', - }, - globalMethod() { - console.info('This is a global method!'); - this.globalData.appVersion = '3.0'; - } - }; - ``` - - ``` - // index.js页面逻辑代码 - export default { - data: { - appData: 'localData', - appVersion:'1.0', - }, - onInit() { - this.appData = this.$app.$def.globalData.appData; - this.appVersion = this.$app.$def.globalData.appVersion; - }, - invokeGlobalMethod() { - this.$app.$def.globalMethod(); - }, - getAppVersion() { - this.appVersion = this.$app.$def.globalData.appVersion; - } - } - ``` - -- 页面对象 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

描述

-

data

-

Object/Function

-

页面的数据模型,类型是对象或者函数,如果类型是函数,返回值必须是对象。属性名不能以$或_开头,不要使用保留字for, if, show, tid。

-

data与private和public不能重合使用。

-

$refs

-

Object

-

持有注册过ref 属性的DOM元素或子组件实例的对象。示例见获取DOM元素

-

private

-

Object

-

页面的数据模型,private下的数据属性只能由当前页面修改。

-

public

-

Object

-

页面的数据模型,public下的数据属性的行为与data保持一致。

-

props

-

Array/Object

-

props用于组件之间的通信,可以通过<tag xxxx='value'>方式传递给组件;props名称必须用小写,不能以$或_开头,不要使用保留字for, if, show, tid。目前props的数据类型不支持Function。示例见自定义组件

-

computed

-

Object

-

用于在读取或设置进行预先处理,计算属性的结果会被缓存。计算属性名不能以$或_开头,不要使用保留字。示例见自定义组件

-
- - -## 方法 - -- 数据方法 - - - - - - - - - - - - - - - - -

方法

-

参数

-

描述

-

$set

-

key: string, value: any

-

添加新的数据属性或者修改已有数据属性。

-

用法:

-

this.$set('key',value):添加数据属性。

-

$delete

-

key: string

-

删除数据属性。

-

用法:

-

this.$delete('key'):删除数据属性。

-
- - 示例代码 - - ``` - export default { - data: { - keyMap: { - OS: 'OpenHarmony', - Version: '2.0', - }, - }, - getAppVersion() { - this.$set('keyMap.Version', '3.0'); - console.info("keyMap.Version = " + this.keyMap.Version); // keyMap.Version = 3.0 - - this.$delete('keyMap'); - console.info("keyMap.Version = " + this.keyMap); // log print: keyMap.Version = undefined - } - } - ``` - -- 公共方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

方法

-

参数

-

描述

-

$element

-

id: string

-

获得指定id的组件对象,如果无指定id,则返回根组件对象。示例见获取DOM元素

-

用法:

-

<div id='xxx'></div>

-
  • this.$element('xxx'):获得id为xxx的组件对象。
  • this.$element():获得根组件对象。
-

$rootElement

-

-

获取根组件对象。

-

用法:this.$rootElement().scrollTo({ duration: 500, position: 300 }), 页面在500ms内滚动300px。

-

$root

-

-

获得顶级ViewModel实例。获取ViewModel示例。

-

$parent

-

-

获得父级ViewModel实例。获取ViewModel示例。

-

$child

-

id: string

-

获得指定id的子级自定义组件的ViewModel实例。获取ViewModel示例。

-

用法:

-

this.$child('xxx') :获取id为xxx的子级自定义组件的ViewModel实例。

-
- -- 事件方法 - - - - - - - - - - - - -

方法

-

参数

-

描述

-

$watch

-

data: string, callback: string | Function

-

观察data中的属性变化,如果属性值改变,触发绑定的事件。示例见自定义组件

-

用法:

-

this.$watch('key', callback)

-
- -- 页面方法 - - - - - - - - - - - - -

方法

-

参数

-

描述

-

scrollTo6+

-

scrollPageParam: ScrollPageParam

-

将页面滚动到目标位置,可以通过ID选择器指定或者滚动距离指定。

-
- - **表 1** ScrollPageParam6+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

position

-

number

-

-

-

指定滚动位置。

-

id

-

string

-

-

-

指定需要滚动到的元素id。

-

duration

-

number

-

300

-

指定滚动时长,单位为毫秒。

-

timingFunction

-

string

-

ease

-

指定滚动动画曲线,可选值参考

-

animation-timing-function

-

complete

-

() => void

-

-

-

指定滚动完成后需要执行的回调函数。

-
- - 示例: - - ``` - this.$rootElement.scrollTo({position: 0}) - this.$rootElement.scrollTo({id: 'id', duration: 200, timingFunction: 'ease-in', complete: ()=>void}) - ``` - - -## 获取DOM元素 - -1. 通过$refs获取DOM元素 - - ``` - -
- -
- ``` - - ``` - // index.js - export default { - data: { - images: [ - { src: '/common/frame1.png' }, - { src: '/common/frame2.png' }, - { src: '/common/frame3.png' }, - ], - }, - handleClick() { - const animator = this.$refs.animator; // 获取ref属性为animator的DOM元素 - const state = animator.getState(); - if (state === 'paused') { - animator.resume(); - } else if (state === 'stopped') { - animator.start(); - } else { - animator.pause(); - } - }, - }; - ``` - -2. 通过$element获取DOM元素 - - ``` - -
- -
- ``` - - ``` - // index.js - export default { - data: { - images: [ - { src: '/common/frame1.png' }, - { src: '/common/frame2.png' }, - { src: '/common/frame3.png' }, - ], - }, - handleClick() { - const animator = this.$element('animator'); // 获取id属性为animator的DOM元素 - const state = animator.getState(); - if (state === 'paused') { - animator.resume(); - } else if (state === 'stopped') { - animator.start(); - } else { - animator.pause(); - } - }, - }; - ``` - - -## 获取ViewModel - -根节点所在页面: - -``` - - -
-
- {{text}} - -
-
-``` - -``` -// root.js -export default { - data: { - text: 'I am root!', - }, -} -``` - -自定义parent组件: - -``` - - -
- parent component click - hello parent component! - -
-``` - -``` -// parent.js -export default { - data: { - show: false, - text: 'I am parent component!', - }, - parentClicked () { - this.show = !this.show; - console.info('parent component get parent text'); - console.info(`${this.$parent().text}`); - console.info("parent component get child function"); - console.info(`${this.$child('selfDefineChild').childClicked()}`); - }, -} -``` - -自定义child组件: - -``` - -
- child component clicked - hello child component -
-``` - -``` -// child.js -export default { - data: { - show: false, - text: 'I am child component!', - }, - childClicked () { - this.show = !this.show; - console.info('child component get parent text'); - console.info('${this.$parent().text}'); - console.info('child component get root text'); - console.info('${this.$root().text}'); - }, -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" deleted file mode 100644 index 40c69e42bfa708e6ca7610f8e652be3e33410cf0..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\224\237\345\221\275\345\221\250\346\234\237.md" +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 生命周期 -permalink: /pages/000b01000004 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 生命周期 - -## 应用生命周期 - -在app.js中可以定义如下应用生命周期函数: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

描述

-

触发时机

-

onCreate

-

() => void

-

应用创建

-

当应用创建时调用。

-

onShow6+

-

() => void

-

应用处于前台

-

当应用处于前台时触发。

-

onHide6+

-

() => void

-

应用处于后台

-

当应用处于后台时触发。

-

onDestroy

-

() => void

-

应用销毁

-

当应用退出时触发。

-
- -## 页面生命周期 - -在页面JS文件中可以定义如下页面生命周期函数: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

描述

-

触发时机

-

onInit

-

() => void

-

页面初始化

-

页面数据初始化完成时触发,只触发一次。

-

onReady

-

() => void

-

页面创建完成

-

页面创建完成时触发,只触发一次。

-

onShow

-

() => void

-

页面显示

-

页面显示时触发。

-

onHide

-

() => void

-

页面消失

-

页面消失时触发。

-

onDestroy

-

() => void

-

页面销毁

-

页面销毁时触发。

-

onBackPress

-

() => boolean

-

返回按钮动作

-

当用户点击返回按钮时触发。

-
  • 返回true表示页面自己处理返回逻辑。
  • 返回false表示使用默认的返回逻辑。
  • 不返回值会作为false处理。
-

onActive()5+

-

() => void

-

页面激活

-

页面激活时触发。

-

onInactive()5+

-

() => void

-

页面暂停

-

页面暂停时触发。

-

onNewRequest()5+

-

() => void

-

FA重新请求

-

FA已经启动时收到新的请求后触发。

-
- -页面A的生命周期接口的调用顺序 - -- 打开页面A:onInit\(\) -\> onReady\(\) -\> onShow\(\) -- 在页面A打开页面B:onHide\(\) -- 从页面B返回页面A:onShow\(\) -- 退出页面A:onBackPress\(\) -\> onHide\(\) -\> onDestroy\(\) -- 页面隐藏到后台运行:onInactive\(\) -\> onHide\(\) -- 页面从后台运行恢复到前台:onShow\(\) -\> onActive\(\) - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001147417424.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" deleted file mode 100644 index 68e30f0b0dd3aabea1a8a19cb4ff7c299e5d0294..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/06.\350\265\204\346\272\220\351\231\220\345\256\232\344\270\216\350\256\277\351\227\256.md" +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: 资源限定与访问 -permalink: /pages/000b01000005 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 资源限定与访问 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 屏幕密度从API Version 4 开始支持。 ->- 其余限定词从API Version 6 开始支持。 - -## 资源限定词 - -资源限定词可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括屏幕密度等维度,限定词之间通过中划线(-)连接。开发者在**resources**目录下创建限定词文件时,需要掌握限定词文件的命名要求以及与限定词文件与设备状态的匹配规则。 - -## 资源限定词的命名要求 - -- 限定词的组合顺序:屏幕密度。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称,顺序不可颠倒。其中MCC和MNC须同时存在。 -- 限定词的连接方式:限定词之间均采用中划线(-)连接。例如:res-dark-ldpi.json 。 -- 限定词的取值范围:每类限定词的取值必须符合下表的条件,否则,将无法匹配目录中的资源文件,限定词大小写敏感。 -- 限定词前缀:**resources**资源文件的资源限定词有前缀res,例如res-ldpi.json。 -- 默认资源限定文件:**resources**资源文件的默认资源限定文件为res-defaults.json。 -- 资源限定文件中不支持使用枚举格式的颜色来设置资源。 - -**表 1** 资源限定词 - - - - - - - - - - - - - - - - - - - -

类型

-

含义与取值说明

-

MCC和MNC6+

-

移动设备国家代码 (MCC),设备 SIM 卡中的移动设备网络代码 (MNC),如mcc460-mnc01,mcc460-mnc02。

-

横竖屏6+

-

表示设备的屏幕方向,取值如下:

-
  • vertical:竖屏
  • horizontal:横屏
-

设备类型6+

-

表示设备的类型,取值如下:

-
  • phone:手机
  • tablet:平板
  • tv:智慧屏
  • wearable:智能穿戴
-

屏幕密度

-

表示设备的屏幕密度(单位为dpi),取值如下:

-
  • ldpi:表示低密度屏幕(~120dpi)(0.75基准密度)
  • mdpi:表示中密度屏幕(~160dpi)(基准密度)
  • hdpi:表示高密度屏幕(~240dpi)(1.5基准密度)
  • xhdpi:表示加高密度屏幕(~320dpi)(2.0基准密度)
  • xxhdpi:表示超超高密度屏幕(~480dpi)(3.0基准密度)
  • xxxhdpi:表示超超超高密度屏幕(~640dpi)(4.0基准密度)
-
- -## 限定词与设备状态的匹配规则 - -- 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:MCC和MNC\> 横竖屏 \> 深色模式 \> 设备类型 \> 屏幕密度。在资源限定词目录均未匹配的情况下,则匹配默认资源限定文件。 -- 如果限定词目录中包含资源限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如:资源限定文件res-hdpi.json与当前设备密度xhdpi无法匹配。 - -## 引用JS模块内resources资源 - -在应用开发的hml和js文件中使用$r的语法,可以对JS模块内的resources目录下的json资源进行格式化,获取相应的资源内容。 - - - - - - - - - - - - -

属性

-

类型

-

描述

-

$r

-

(key: string) => string

-

获取资源限定下具体的资源内容。例如:this.$r('strings.hello')。

-

参数说明:

-
  • key:定义在资源限定文件中的键值,如strings.hello。
-

res-defaults.json示例:

-
{
-    strings: {
-        hello: 'hello world'
-    }
-}
-
- -## 示例 - -resources/res-dark.json: - -``` -{ - "image": { - "clockFace": "common/dark_face.png" - }, - "colors": { - "background": "#000000" - } -} -``` - -resources/res-defaults.json: - -``` -{ - "image": { - "clockFace": "common/face.png" - }, - "colors": { - "background": "#ffffff" - } -} -``` - -``` - -
- -
-``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->资源限定文件中不支持颜色枚举格式。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" deleted file mode 100644 index 5cf2f179a98e50f26bfbccf3cd4586aaa684d956..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/07.\345\244\232\350\257\255\350\250\200\346\224\257\346\214\201.md" +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: 多语言支持 -permalink: /pages/000b01000006 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 多语言支持 - -基于开发框架的应用会覆盖多个国家和地区,开发框架支持多语言能力后,可以让应用开发者无需开发多个不同语言的版本,就可以同时支持多种语言的切换,为项目维护带来便利。 - -开发者仅需要通过[定义资源文件](#section733935013515)和[引用资源](#section522111116527)两个步骤,就可以使用开发框架的多语言能力;如果需要在应用中获取当前系统语言,请参考[获取语言](#section2872192475310)。 - -## 定义资源文件 - -资源文件用于存放应用在多种语言场景下的资源内容,开发框架使用JSON文件保存资源定义。在[文件组织](/pages/000b01000000)中指定的i18n文件夹内放置语言资源文件,其中语言资源文件的命名是由语言、文字、国家或地区的限定词通过中划线连接组成,其中文字和国家或地区可以省略,如zh-Hant-HK(中国香港地区使用的繁体中文)、zh-CN(中国使用的简体中文)、zh(中文)。命名规则如下: - -``` -language[-script-region].json -``` - -限定词的取值需符合下表要求。 - -**表 1** 限定词取值要求 - - - - - - - - - - - - - - - - -

限定词类型

-

含义与取值说明

-

语言

-

表示设备使用的语言类型,由2~3个小写字母组成。例如:zh表示中文,en表示英语,mai表示迈蒂利语。

-

详细取值范围,请查阅ISO 639(ISO制定的语言编码标准)。

-

文字

-

表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。

-

详细取值范围,请查阅ISO 15924(ISO制定的文字编码标准)。

-

国家或地区

-

表示用户所在的国家或地区,由2~3个大写字母或者3个数字组成。例如:CN表示中国,GB表示英国。

-

详细取值范围,请查阅ISO 3166-1(ISO制定的国家和地区编码标准)。

-
- -当开发框架无法在应用中找到系统语言的资源文件时,默认使用en-US.json中的资源内容。 - -资源文件内容格式如下: - -en-US.json - -``` -{ - "strings": { - "hello": "Hello world!", - "object": "Object parameter substitution-{name}", - "array": "Array type parameter substitution-{0}", - "symbol": "@#$%^&*()_+-={}[]\\|:;\"'<>,./?" - }, - - "files": { - "image": "image/en_picture.PNG" - } -} -``` - -由于不同语言针对单复数有不同的匹配规则,在资源文件中使用“zero”“one”“two”“few”“many”“other”定义不同单复数场景下的词条内容。例如中文不区分单复数,仅存在“other”场景;英文存在“one”、“other”场景;阿拉伯语存在上述6种场景。 - -以en-US.json和ar-AE.json为例,资源文件内容格式如下: - -en-US.json - -``` -{ - "strings": { - "people": { - "one": "one person", - "other": "{count} people" - } - } -} -``` - -ar-AE.json - -``` -{ - "strings": { - "people": { - "zero": "لا أحد", - "one": "وحده", - "two": "اثنان", - "few": "ستة اشخاص", - "many": "خمسون شخص", - "other": "مائة شخص" - } - } -} -``` - -## 引用资源 - -在应用开发的页面中使用多语言的语法,包含简单格式化和单复数格式化两种,都可以在hml或js中使用。 - -- 简单格式化方法 - - 在应用中使用$t方法引用资源,$t既可以在hml中使用,也可以在js中使用。系统将根据当前语言环境和指定的资源路径(通过$t的path参数设置),显示对应语言的资源文件中的内容。 - - **表 2** 简单格式化 - - - - - - - - - - - - - - - - -

属性

-

类型

-

参数

-

必填

-

描述

-

$t

-

Function

-

请见表3

-

-

根据系统语言完成简单的替换:this.$t('strings.hello')

-
- - **表 3** $t参数说明 - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

必填

-

描述

-

path

-

string

-

-

资源路径

-

params

-

Array|Object

-

-

运行时用来替换占位符的实际内容,占位符分为两种:

-
  • 具名占位符,例如{name}。实际内容必须用Object类型指定,例如:$t('strings.object', { name: 'Hello world' })。
  • 数字占位符,例如{0}。实际内容必须用Array类型指定,例如:$t('strings.array', ['Hello world'])。
-
- -- 简单格式化示例代码 - - ``` - -
- - {{ $t('strings.hello') }} - - {{ $t('strings.object', { name: 'Hello world' }) }} - - {{ $t('strings.array', ['Hello world']) }} - - {{ hello }} - - {{ replaceObject }} - - {{ replaceArray }} - - - - - -
- ``` - - ``` - // xxx.js - // 下面为在js文件中的使用方法。 - export default { - data: { - hello: '', - replaceObject: '', - replaceArray: '', - replaceSrc: '', - }, - onInit() { - this.hello = this.$t('strings.hello'); - this.replaceObject = this.$t('strings.object', { name: 'Hello world' }); - this.replaceArray = this.$t('strings.array', ['Hello world']); - this.replaceSrc = this.$t('files.image'); - }, - } - ``` - -- 单复数格式化方法 - - **表 4** 单复数格式化 - - - - - - - - - - - - - - - - -

属性

-

类型

-

参数

-

必填

-

描述

-

$tc

-

Function

-

请见表5

-

-

根据系统语言完成单复数替换:this.$tc('strings.people')

-
说明:

定义资源的内容通过json格式的key为“zero”、“one”、“two”、“few”、“many”和“other”区分。

-
-
- - **表 5** $tc参数说明 - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

必填

-

描述

-

path

-

string

-

-

资源路径

-

count

-

number

-

-

要表达的值

-
- -- 单复数格式化示例代码 - - ``` - -
- - {{ $tc('strings.people', 0) }} - - {{ $tc('strings.people', 1) }} - - {{ $tc('strings.people', 2) }} - - {{ $tc('strings.people', 6) }} - - {{ $tc('strings.people', 50) }} - - {{ $tc('strings.people', 100) }} -
- ``` - - -## 获取语言 - -获取语言功能请参考[应用配置](/pages/000b000804)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" deleted file mode 100644 index debc5ff007247224739f2dbd43a27fcf048541f2..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: 通用属性 -permalink: /pages/000b0100010000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 通用属性 - -## 常规属性 - -常规属性指的是组件普遍支持的用来设置组件基本标识和外观显示特征的属性。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

id

-

string

-

-

-

-

组件的唯一标识。

-

style

-

string

-

-

-

-

组件的样式声明。

-

class

-

string

-

-

-

-

组件的样式类,用于引用样式表。

-

ref

-

string

-

-

-

-

用来指定指向子元素或子组件的引用信息,该引用将注册到父组件的$refs 属性对象上。

-

disabled

-

boolean

-

false

-

-

当前组件是否被禁用,在禁用场景下,组件将无法响应用户交互。

-

focusable

-

boolean

-

false

-

-

当前组件是否可以获取焦点。 当focusable设置为true时,组件可以响应焦点事件和按键事件。当组件额外设置了按键事件或者点击事件时,框架会设置该属性为true。

-

data

-

string

-

-

-

-

给当前组件设置data属性,进行相应的数据存储和读取。JS文件中:

-
  • 在事件回调中使用 e.target.attr.data 读取数据,e为事件回调函数入参。
  • 使用$element或者$refs获取DOM元素后,通过attr.data 进行访问。
-
说明:

从API Version 6 开始,建议使用data-*。

-
-

data-*6+

-

string

-

-

-

-

给当前组件设置data-*属性,进行相应的数据存储和读取。大小写不敏感,如data-A和data-a默认相同。JS文件中:

-
  • 在事件回调中使用 e.target.dataSet.a读取数据,e为事件回调函数入参。
  • 使用$element或者$refs获取DOM元素后,通过dataSet.a进行访问。
-

click-effect5+

-

string

-

-

-

-

通过这个属性可以设置组件的弹性点击效果,当前支持如下三种效果:

-
  • spring-small:建议小面积组件设置,缩放(90%)。
  • spring-medium:建议中面积组件设置,缩放(95%)。
  • spring-large:建议大面积组件设置,缩放(95%)。
-

dir6+

-

string

-

auto

-

-

设置元素布局模式,支持设置rtl、ltr和auto三种属性值:

-
  • rtl:使用从右往左布局模式。
  • ltr:使用从左往右布局模式。
  • auto:跟随系统语言环境。
-
- -## 渲染属性 - -组件普遍支持的用来设置组件是否渲染的属性。 - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

for

-

Array

-

-

-

根据设置的数据列表,展开当前元素。

-

if

-

boolean

-

-

-

根据设置的boolean值,添加或移除当前元素。

-

show

-

boolean

-

-

-

根据设置的boolean值,显示或隐藏当前元素。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->属性和样式不能混用,不能在属性字段中进行样式设置。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" deleted file mode 100644 index 572914001e3b730811484a2431eb34952c07eec5..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\346\240\267\345\274\217.md" +++ /dev/null @@ -1,640 +0,0 @@ ---- -title: 通用样式 -permalink: /pages/000b0100010001 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 通用样式 - -组件普遍支持的可以在style或css中设置组件外观样式。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

width

-

<length> | <percentage>

-

-

-

设置组件自身的宽度。

-

缺省时使用元素自身内容需要的宽度。

-

height

-

<length> | <percentage>

-

-

-

设置组件自身的高度。

-

缺省时使用元素自身内容需要的高度。

-

min-width5+

-

<length> | <percentage>6+

-

0

-

设置元素的最小宽度。

-

min-height5+

-

<length> | <percentage>6+

-

0

-

设置元素的最小高度。

-

max-width5+

-

<length> | <percentage>6+

-

-

-

设置元素的最大宽度。默认无限制。

-

max-height5+

-

<length> | <percentage>6+

-

-

-

设置元素的最大高度。默认无限制。

-

padding

-

<length> | <percentage>5+

-

0

-

使用简写属性设置所有的内边距属性。

-
该属性可以有1到4个值:
  • 指定一个值时,该值指定四个边的内边距。

    -
  • 指定两个值时,第一个值指定上下两边的内边距,第二个指定左右两边的内边距。

    -
  • 指定三个值时,第一个指定上边的内边距,第二个指定左右两边的内边距,第三个指定下边的内边距。

    -
  • 指定四个值时分别为上、右、下、左边的内边距(顺时针顺序)。

    -
-
-

padding-[left|top|right|bottom]

-

<length> | <percentage>5+

-

0

-

设置左、上、右、下内边距属性。

-

padding-[start|end]

-

<length> | <percentage>5+

-

0

-

设置起始和末端内边距属性。

-

margin

-

<length> | <percentage>5+

-

0

-

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

-
  • 只有一个值时,这个值会被指定给全部的四个边。

    -
  • 两个值时,第一个值被匹配给上和下,第二个值被匹配给左和右。

    -
  • 三个值时,第一个值被匹配给上, 第二个值被匹配给左和右,第三个值被匹配给下。

    -
  • 四个值时,会依次按上、右、下、左的顺序匹配 (即顺时针顺序)。

    -
-

margin-[left|top|right|bottom]

-

<length> | <percentage>5+

-

0

-

设置左、上、右、下外边距属性。

-

margin-[start|end]

-

<length> | <percentage>5+

-

0

-

设置起始和末端外边距属性。

-

border

-

-

-

0

-

使用简写属性设置所有的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置时,各属性值为默认值。

-

border-style

-

string

-

solid

-

使用简写属性设置所有边框的样式,可选值为:

-
  • dotted:显示为一系列圆点,圆点半径为border-width的一半。
  • dashed:显示为一系列短的方形虚线。
-
  • solid:显示为一条实线。
-

border-[left|top|right|bottom]-style

-

string

-

solid

-

分别设置左、上、右、下四个边框的样式,可选值为dotted、dashed、solid。

-

border-[left|top|right|bottom]

-

-

-

-

-

使用简写属性设置对应位置的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置的值为默认值。

-

border-width

-

<length>

-

0

-

使用简写属性设置元素的所有边框宽度,或者单独为各边边框设置宽度

-

border-[left|top|right|bottom]-width

-

<length>

-

0

-

分别设置左、上、右、下四个边框的宽度。

-

border-color

-

<color>

-

black

-

使用简写属性设置元素的所有边框颜色,或者单独为各边边框设置颜色

-

border-[left|top|right|bottom]-color

-

<color>

-

black

-

分别设置左、上、右、下四个边框的颜色。

-

border-radius

-

<length>

-

-

-

border-radius属性是设置元素的外边框圆角半径。设置border-radius时不能单独设置某一个方向的border-[left|top|right|bottom]-width,border-[left|top|right|bottom]-color ,border-[left|top|right|bottom]-style,如果要设置color、width和style,需要将四个方向一起设置(border-width、border-color、border-style)。

-

border-[top|bottom]-[left|right]-radius

-

<length>

-

-

-

分别设置左上,右上,右下和左下四个角的圆角半径。

-

background

-

<linear-gradient>

-

-

-

仅支持设置渐变样式,与background-color、background-image不兼容。

-

background-color

-

<color>

-

-

-

设置背景颜色。

-

background-image

-

string

-

-

-

设置背景图片。与background-color、background不兼容,支持网络图片资源和本地图片资源地址。

-

示例:

-
  • background-image: url("/common/background.png")
-

background-size

-
  • string
  • <length> <length>
  • <percentage> <percentage>
-

auto

-

设置背景图片的大小。

-
  • string可选值:
    • contain:把图片扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图片扩展至足够大,以使背景图片完全覆盖背景区域;背景图片的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    -
  • length值参数方式:

    设置背景图片的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
  • 百分比参数方式:

    以父元素的百分比来设置背景图片的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
-

background-repeat

-

string

-

repeat

-

针对重复背景图片样式进行设置,背景图片默认在水平和垂直方向上重复。

-
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
-

background-position

-
  • string string
  • <length> <length>
  • <percentage> <percentage>
-

0px 0px

-
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    -
-
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>。
-

box-shadow5+

-

string

-

0

-

语法:box-shadow: h-shadow v-shadow blur spread color

-

通过这个样式可以设置当前组件的阴影样式,包括水平位置(必填)、垂直位置(必填)、模糊半径(可选,默认值为0)、阴影延展距离(可选,默认值为0)、阴影颜色(可选,默认值为黑色)。

-

示例:

-
  • box-shadow :10px 20px 5px 10px #888888
  • box-shadow :100px 100px 30px red
  • box-shadow :-100px -100px 0px 40px
-

filter5+

-

string

-

-

-

语法:filter: blur(px)

-

通过这个样式可以设置当前组件布局范围的内容模糊,参数用于指定模糊半径,如果没有设置值,则默认是0(不模糊),不支持百分比。

-

示例:

-
  • filter: blur(10px)
-

backdrop-filter5+

-

string

-

-

-

语法:backdrop-filter: blur(px)

-

通过这个样式可以设置当前组件布局范围的背景模糊,参数用于指定模糊半径,如果没有设置值,则默认是0(不模糊),不支持百分比。

-

示例:

-
  • backdrop-filter: blur(10px)
-

window-filter5+

-

string

-

-

-

语法:window-filter: blur(percent), style5+

-

通过这个样式可以设置当前组件布局范围的窗口模糊程度和模糊样式,如果没有设置值,则默认是0%(不模糊),多块模糊区域时不支持设置不同的模糊值和模糊样式。style可选值:small_light(默认值), medium_light, large_light, xlarge_light, small_dark, medium_dark, large_dark, xlarge_dark。

-

示例:

-
  • window-filter: blur(50%)
  • window-filter: blur(10%), large_light
-
说明:

仅手机和平板设备支持。

-
-

opacity

-

number

-

1

-

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

-

display

-

string

-

-

flex

-

确定一个元素所产生的框的类型,可选值为:

-
  • flex:弹性布局。
  • none:不渲染此元素。
-

visibility

-

string

-

-

visible

-

是否显示元素所产生的框。不可见的框会占用布局(将'display'属性设置为'none'来完全去除框),可选值为:

-
  • visible:元素正常显示。
  • hidden:隐藏元素,但是其他元素的布局不改变,相当于此元素变成透明。
-
说明:

visibility和display样式都设置时,仅display生效。

-
-

flex

-

number | string

-

-

-

规定当前组件如何适应父组件中的可用空间。

-

flex可以指定1个、2个5+或3个5+值。

-

单值语法:

-
  • 一个无单位数:用来设置组件的flex-grow。
  • 一个有效的宽度值5+:用来设置组件的flex-basis。
-

双值语法5+

-

第一个值必须是无单位数,用来设置组件的flex-grow。第二个值是以下之一:

-
  • 一个无单位数:用来设置组件的flex-shrink。
  • 一个有效的宽度值:用来设置组件的flex-basis。
-

三值语法5+

-

第一个值必须是无单位数,用来设置组件的flex-grow;第二个值必须是无单位数,用来设置组件的flex-shrink;第三个值必须是一个有效的宽度值,用来设置组件的flex-basis。

-
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

-
-

flex-grow

-

number

-

0

-

设置组件的拉伸样式,指定父组件容器主轴方向上剩余空间(容器本身大小减去所有flex子元素占用的大小)的分配权重。0为不伸展。

-
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

-
-

flex-shrink

-

number

-

1

-

设置组件的收缩样式,元素仅在默认宽度之和大于容器的时候才会发生收缩,0为不收缩。

-
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

-
-

flex-basis

-

<length>

-

-

-

-

设置组件在主轴方向上的初始大小。

-
说明:

仅父容器为<div>、<list-item>、<tabs>、<refresh>、<stepper-item>5+时生效。

-
-

align-self6+

-

string

-

-

-

设置自身在父元素交叉轴上的对齐方式,该样式会覆盖父元素的align-items样式,仅在父容器为div、list。可选值为:

-
  • stretch 弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start 元素向交叉轴起点对齐。
  • flex-end 元素向交叉轴终点对齐。
  • center 元素在交叉轴居中。
  • baseline 元素在交叉轴基线对齐。
-

position

-

string

-

relative

-

设置元素的定位类型,不支持动态变更。

-
  • fixed:相对与整个界面进行定位。
  • absolute:相对于父元素进行定位。
  • relative:相对于其正常位置进行定位。
-
说明:

absolute属性仅在父容器为<div>、<stack>时生效。

-
-

[left|top|right|bottom]

-

<length> | <percentage>6+

-

-

-

left|top|right|bottom需要配合position样式使用,来确定元素的偏移位置。

-
  • left属性规定元素的左边缘。该属性定义了定位元素左外边距边界与其包含块左边界之间的偏移。
  • top属性规定元素的顶部边缘。该属性定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。
  • right属性规定元素的右边缘。该属性定义了定位元素右外边距边界与其包含块右边界之间的偏移。
  • bottom属性规定元素的底部边缘。该属性定义了一个定位元素的下外边距边界与其包含块下边界之间的偏移。
-

[start | end]6+

-

<length> | <percentage>

-

-

-

start | end需要配合position样式使用,来确定元素的偏移位置。

-
  • start属性规定元素的起始边缘。该属性定义了定位元素起始外边距边界与其包含块起始边界之间的偏移。
  • end属性规定元素的结尾边缘。该属性定义了一个定位元素的结尾边距边界与其包含块结尾边界之间的偏移。
-

z-index6+

-

number

-

-

-

表示对于同一父节点其子节点的渲染顺序。数值越大,渲染数据越靠后。

-
说明:

z-index不支持auto,并且opacity等其他样式不会影响z-index的渲染顺序。

-
-

image-fill6+

-

<color>

-

-

-

为svg图片填充颜色,支持组件范围(与设置图片资源的属性):button(icon属性)、piece(icon属性)、search(icon属性)、input(headericon属性)、textarea(headericon属性)、image(src属性)、toolbar-item(icon属性)。

-

svg图片文件内的fill属性颜色值在渲染时将被替换为image-fill所配的颜色值,且仅对svg图片内显示声明的fill属性生效。

-

clip-path6+

-

[ <geometry-box> || <basic-shape> ] | none

-

-

-

设置组件的裁剪区域。区域内的部分显示,区域外的不显示。

-

<geometry-box>:表示裁剪区域的作用范围,默认为border-box。可选值为:

-
  • margin-box:margin计算入长宽尺寸内。
  • border-box:border计算入长宽尺寸内。
  • padding-box:padding计算入长宽尺寸内。
  • content-box:margin/border/padding不计算入长宽尺寸内。
-

<basic-shape>:表示裁剪的形状。包含以下类型:

-
  • inset,格式为:inset( <percentage>{1,4} [ round <'border-radius'> ]? )。
  • circle,格式为:circle( [ <percentage> ]? [ at <percentage> <percentage> ]? )。
  • ellipse,格式为:ellipse( [ <percentage>{2} ]? [ at <percentage> <percentage> ]? )。
  • polygon,格式为:polygon( [ <percentage> <percentage> ]# )
  • path,格式为:path( <string> )。
-

mask-image6+

-
  • <linear-gradient>
  • string
-

-

-

设置渐变色遮罩或本地图片设置。

-

设置渐变色遮罩,示例:

-

linear-gradient(to left, black, white)

-

设置纯色遮罩,示例:

-

linear-gradient(to right, grey , grey)

-

设置本地svg图片为遮罩,示例:url(common/mask.svg)

-

mask-size6+

-
  • string
  • <length><length>
  • <percentage> <percentage>
-

auto

-

设置遮罩图片显示大小,仅当mask-image为图片资源时有效。

-

string可选值:

-
  • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
  • cover:把图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
  • auto:保持原图的比例不变。
-

length值参数方式:设置图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

-

百分比参数方式:以原图宽高的百分比来设置图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

-

mask-position6+

-
  • string string
  • <length> <length>
  • <percentage> <percentage>
-

0px 0px

-

设置遮罩图片显示位置,仅当mask-image为图片资源时有效。关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。

-

string可选值:

-
  • left:水平方向上最左侧。
  • right:水平方向上最右侧。
  • top:竖直方向上最顶部。
  • bottom:竖直方向上最底部。
  • center:水平方向或竖直方向上中间位置。
-

length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。

-

百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。

-

可以混合使用<percentage>和<length>。

-

border-image-source7+

-

string

-

-

-

指定元素的边框图片。

-

示例:

-

border-image-source: url("/common/images/border.png")

-

border-image-slice7+

-

<length> | <percentage>

-

0

-

指定图片的边界内向偏移。

-

该属性可以有1到4个值:

-

指定一个值时,该值指定四个边的内偏移。

-

指定两个值时,第一个值指定上下两边的内偏移,第二个指定左右两边的内偏移。

-

指定三个值时,第一个指定上边的内偏移,第二个指定左右两边的内偏移,第三个指定下边的内偏移。

-

指定四个值时分别为上、右、下、左边的内偏移(顺时针顺序)。

-

border-image-width7+

-

<length> | <percentage>

-

0

-

指定图片边界的宽度。

-

指定一个值时,该值指定四个边的宽度。

-

指定两个值时,第一个值指定上下两边的宽度 ,第二个指定左右两边的宽度。

-

指定三个值时,第一个指定上边的宽度 ,第二个指定左右两边的宽度 ,第三个指定下边的宽度。

-

指定四个值时分别为上、右、下、左边的宽度 (顺时针顺序)。

-

border-image-outset7+

-

<length> | <percentage>

-

0

-

指定边框图像可超出边框的大小。

-

指定一个值时,边框图像在四个方向超出边框的距离。

-

指定两个值时,第一个值指定上下两边的边框图像超出边框的距离,第二个指定左右两边的 。

-

指定三个值时,第一个指定上边的边框图像超出边框的距离 ,第二个指定左右两边的边框图像超出边框的距离 ,第三个指定下边的边框图像超出边框的距离 。

-

指定四个值时分别为上、右、下、左边的边框图像超出边框的距离 (顺时针顺序)。

-

border-image-repeat7+

-

string

-

stretch

-

定义图片如何填充边框。

-

stretch: 拉伸图片以填充边框。

-

repeat:平铺图片以填充边框。

-

round:平铺图像。当不能整数次平铺时,根据情况放大或缩小图像。

-

border-image7+

-

string

-

-

-

简写属性,可以选择以下两种设置方式:

- -
  • 渐变色边框

    示例:

    -

    border-image: linear-gradient(red, yellow) 10px

    -
-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->通用样式都不是必填项。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" deleted file mode 100644 index 96fcd3b6f991e59fcdb85b4b3369cbfd11702713..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\351\200\232\347\224\250\344\272\213\344\273\266.md" +++ /dev/null @@ -1,490 +0,0 @@ ---- -title: 通用事件 -permalink: /pages/000b0100010002 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 通用事件 - -## 事件说明 - -- 事件绑定在组件上,当组件达到事件触发条件时,会执行JS中对应的事件回调函数,实现页面UI视图和页面JS逻辑层的交互; -- 事件回调函数中通过参数可以携带额外的信息,如组件上的数据对象dataset,事件特有的回调参数。 - -相对于私有事件,大部分组件都可以绑定如下事件。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

是否支持冒泡

-

touchstart

-

TouchEvent

-

手指刚触摸屏幕时触发该事件。

-

5+

-

touchmove

-

TouchEvent

-

手指触摸屏幕后移动时触发该事件。

-

5+

-

touchcancel

-

TouchEvent

-

手指触摸屏幕中动作被打断时触发该事件。

-

5+

-

touchend

-

TouchEvent

-

手指触摸结束离开屏幕时触发该事件。

-

5+

-

click

-

-

-

点击动作触发该事件。

-

6+

-

doubleclick7+

-
  

双击动作触发该事件

-

-

longpress

-

-

-

长按动作触发该事件。

-

-

swipe5+

-

SwipeEvent

-

组件上快速滑动后触发该事件。

-

-

attached6+

-

-

-

当前组件节点挂载在渲染树后触发。

-

-

detached6+

-

-

-

当前组件节点从渲染树中移除后触发。

-

-

pinchstart7+

-

PinchEvent

-

手指开始执行捏合操作时触发该事件。

-

-

pinchupdate7+

-

PinchEvent

-

手指执行捏合操作过程中触发该事件。

-

-

pinchend7+

-

PinchEvent

-

手指捏合操作结束离开屏幕时触发该事件。

-

-

pinchcancel7+

-

PinchEvent

-

手指捏合操作被打断时触发该事件。

-

-

dragstart7+

-

DragEvent

-

用户开始拖拽时触发该事件。

-

-

drag7+

-

DragEvent

-

拖拽过程中触发该事件。

-

-

dragend7+

-

DragEvent

-

用户拖拽完成后触发。

-

-

dragenter7+

-

DragEvent

-

进入释放目标时触发该事件。

-

-

dragover7+

-

DragEvent

-

在释放目标内拖动时触发。

-

-

dragleave7+

-

DragEvent

-

离开释放目标区域时触发。

-

-

drop7+

-

DragEvent

-

在可释放目标区域内释放时触发。

-

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 除上述事件外,其他事件均为非冒泡事件,如[input的change事件](/pages/000b0100010205#section1721512551218),详见各个组件。 - -**表 1** BaseEvent对象属性列表 - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

type

-

string

-

当前事件的类型,比如click、longpress等。

-

timestamp

-

number

-

该事件触发时的时间戳。

-
- -**表 2** TouchEvent对象属性列表\(继承BaseEvent\) - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

touches

-

Array<TouchInfo>

-

触摸事件时的属性集合,包含屏幕触摸点的信息数组。

-

changedTouches

-

Array<TouchInfo>

-

触摸事件时的属性集合,包括产生变化的屏幕触摸点的信息数组。数据格式和touches一样。该属性表示有变化的触摸点,如从无变有,位置变化,从有变无。例如用户手指刚接触屏幕时,touches数组中有数据,但changedTouches无数据。

-
- -**表 3** TouchInfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

globalX

-

number

-

距离屏幕左上角(不包括状态栏)横向距离。屏幕的左上角为原点。

-

globalY

-

number

-

距离屏幕左上角(不包括状态栏)纵向距离。屏幕的左上角为原点。

-

localX

-

number

-

距离被触摸组件左上角横向距离。组件的左上角为原点。

-

localY

-

number

-

距离被触摸组件左上角纵向距离。组件的左上角为原点。

-

size

-

number

-

触摸接触面积。

-

force6+

-

number

-

接触力信息。

-
- -**表 4** SwipeEvent 基础事件对象属性列表(继承BaseEvent) - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

direction

-

string

-

滑动方向,可能值有:

-
  1. left:向左滑动;
  2. right:向右滑动;
  3. up:向上滑动;
  4. down:向下滑动。
-

distance6+

-

number

-

在滑动方向上的滑动距离。

-
- -**表 5** PinchEvent 对象属性列表7+ - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

scale

-

number

-

缩放比例

-

pinchCenterX

-

number

-

捏合中心点X轴坐标,单位px

-

pinchCenterY

-

number

-

捏合中心点Y轴坐标,单位px

-
- -**表 6** DragEvent对象属性列表\(继承BaseEvent\)7+ - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

type

-

string

-

事件名称。

-

globalX

-

number

-

距离屏幕左上角坐标原点横向距离。

-

globalY

-

number

-

距离屏幕左上角坐标原点纵向距离。

-

timestamp

-

number

-

时间戳。

-
- -## 事件对象 - -当组件触发事件后,事件回调函数默认会收到一个事件对象,通过该事件对象可以获取相应的信息。 - -**target对象:** - - - - - - - - - - - - -

属性

-

类型

-

说明

-

dataSet6+

-

Object

-

组件上通过通用属性设置的data-*的自定义属性组成的集合。

-
- -**示例:** - -``` - -
-
-
-``` - -``` -// xxx.js -export default { - touchstartfunc(msg) { - console.info(`on touch start, point is: ${msg.touches[0].globalX}`); - console.info(`on touch start, data is: ${msg.target.dataSet.a}`); - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" deleted file mode 100644 index 810baf44b8bb40f50dd668629736d82d1fc3c2a7..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/04.\351\200\232\347\224\250\346\226\271\346\263\225.md" +++ /dev/null @@ -1,679 +0,0 @@ ---- -title: 通用方法 -permalink: /pages/000b0100010003 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 通用方法 - -当组件通过id属性标识后,可以使用该id获取组件对象并调用相关组件方法。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

必填

-

返回值

-

描述

-

animate

-

-

keyframes: Keyframes, options: Options

-

-

-

-

在组件上创建和运行动画的快捷方式。输入动画所需的keyframes和options,返回animation对象实例。

-

getBoundingClientRect6+

-

-

-

-

-

Rect

-

获取元素的大小及其相对于窗口的位置。

-

createIntersectionObserver6+

-

ObserverParam

-
  

Observer

-

返回Observer对象,用于监听组件在当前页面的变化。

-
- -**表 1** Rect对象说明6+ - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

描述

-

width

-

number

-

该元素的宽度。

-

height

-

number

-

该元素的高度。

-

left

-

number

-

该元素左边界距离窗口的偏移。

-

top

-

number

-

该元素上边界距离窗口的偏移。

-
- -**表 2** ObserverParam对象说明6+ - - - - - - - - - - - - -

属性

-

类型

-

描述

-

ratios

-

Array<number>

-

组件超出或小于范围时触发observer的回调。

-
- -**表 3** Observer对象支持的方法6+ - - - - - - - - - - - - - - - - -

方法

-

参数

-

描述

-

observe

-

callback: function

-

开启observer的订阅方法。超出或小于阈值时触发callback。

-

unobserve

-
  

取消observer的订阅方法。

-
- -## this.$element\('_id_'\).animate\(Object, Object\) - -通过animate\(keyframes: Keyframes, options: Options\)方法获得animation对象。该对象支持动画属性,动画方法和动画事件。重复多次调用animate方法时,采用replace策略,最后一次调用时传入的参数生效。 - -**表 4** Keyframes - - - - - - - - - - - - -

参数

-

类型

-

说明

-

frames

-

Array<Style>

-

用于设置动画样式属性的对象列表。Style类型说明请见表1 Style类型说明

-
- -**表 5** Style类型说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

默认值

-

说明

-

width

-

number

-

-

-

动画执行过程中设置到组件上的宽度值。

-

height

-

number

-

-

-

动画执行过程中设置到组件上的高度值。

-

backgroundColor

-

<color>

-

none

-

动画执行过程中设置到组件上的背景颜色。

-

opacity

-

number

-

1

-

设置到组件上的透明度(介于0到1之间)。

-

backgroundPosition

-

string

-

-

-

格式为"x y",单位为百分号或者px。

-

第一个值是水平位置,第二个值是垂直位置。

-

如果仅规定了一个值,另一个值为 50%。

-

transformOrigin

-

string

-

'center center'

-

变换对象的中心点。

-

第一个参数表示x轴的值,可以设置为left、center、right、长度值或百分比值。

-

第二个参数表示y轴的值,可以设置为top、center、bottom、长度值或百分比值。

-

transform

-

Transform

-

-

-

设置到变换对象上的类型。

-

offset

-

number

-

-

-
  • offset值(如果提供)必须在0.0到1.0(含)之间,并以升序排列。
  • 若只有两帧,可以不填offset。
  • 若超过两帧,offset必填。
-
- -**表 6** Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

默认值

-

说明

-

duration

-

number

-

0

-

指定当前动画的运行时长(单位毫秒)。

-

easing

-

string

-

linear

-

描述动画的时间曲线,支持类型见表3 easing有效值说明

-

delay

-

number

-

0

-

设置动画执行的延迟时间(默认值表示无延迟)。

-

iterations

-

number | string

-

1

-

设置动画执行的次数。number表示固定次数,Infinity枚举表示无限次数播放。

-

direction6+

-

string

-

normal

-

指定动画的播放模式:

-

normal: 动画正向循环播放;

-

reverse: 动画反向循环播放;

-

alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放;

-

alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。

-

fill

-

string

-

none

-

指定动画开始和结束的状态:

-

none:在动画执行之前和之后都不会应用任何样式到目标上。

-

forwards:在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。

-

backwards6+:动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。

-

both6+:动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。

-
- -**表 7** easing有效值说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-

描述

-

linear

-

动画线性变化。

-

ease-in

-

动画速度先慢后快,cubic-bezier(0.42, 0.0, 1.0, 1.0)。

-

ease-out

-

动画速度先快后慢,cubic-bezier(0.0, 0.0, 0.58, 1.0)。

-

ease-in-out

-

动画先加速后减速,cubic-bezier(0.42, 0.0, 0.58, 1.0)。

-

friction

-

阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。

-

extreme-deceleration

-

急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。

-

sharp

-

锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。

-

rhythm

-

节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。

-

smooth

-

平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。

-

cubic-bezier(x1, y1, x2, y2)

-

在三次贝塞尔函数中定义动画变化过程,入参的x和y值必须处于0-1之间。

-

steps(number, step-position)6+

-

Step曲线。

-

number必须设置,支持的类型为int。

-

step-position参数可选,支持设置start或end,默认值为end。

-
- -- 返回值说明 - - animation对象支持的属性: - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

finished

-

boolean

-

只读,用于表示当前动画是否已播放完成。

-

pending

-

boolean

-

只读,用于表示当前动画是否处于等待其他异步操作完成的等待状态(例如启动一个延时播放的动画)。

-

playState

-

string

-

可读可写,动画的执行状态:

-
  • idle:未执行状态,包括已结束或未开始。
  • running:动画正在运行。
  • paused:动画暂停。
  • finished:动画播放完成。
-

startTime

-

number

-

可读可写,动画播放开始的预定时间,用途类似于options参数中的delay。

-
- - animation对象支持的方法: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

方法

-

参数

-

说明

-

play

-

-

-

组件播放动画。

-

finish

-

-

-

组件完成动画。

-

pause

-

-

-

组件暂停动画。

-

cancel

-

-

-

组件取消动画。

-

reverse

-

-

-

组件倒播动画。

-
- - animation对象支持的事件: - - - - - - - - - - - - - - - - - - - -

事件

-

说明

-

start6+

-

动画开始事件。

-

cancel

-

动画被强制取消。

-

finish

-

动画播放完成。

-

repeat

-

动画重播事件。

-
- - -- 示例代码: - - ``` - -
-
-
- - -
-
- ``` - - ``` - /* xxx.css */ - .container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - } - .box{ - width: 200px; - height: 200px; - background-color: #ff0000; - margin-top: 30px; - } - .buttonBox{ - margin-top: 30px; - width: 250px; - justify-content: space-between; - } - button{ - background-color: #8e8b89; - color: white; - width: 100px; - height: 40px; - font-size: 24px; - } - ``` - - ``` - // xxx.js - import prompt from '@system.prompt'; - export default{ - data:{ - animation:'', - }, - onInit(){ - }, - onShow(){ - var options = { - duration: 1500, - easing: 'friction', - delay: 500, - fill: 'forwards', - iterations: 2, - direction: 'normal', - }; - var frames = [ - {transform: {translate: '-120px -0px'}, opacity: 0.1, offset: 0.0}, - {transform: {translate: '120px 0px'}, opacity: 1.0, offset: 1.0} - ]; - this.animation = this.$element('idName').animate(frames, options); - // handle finish event - this.animation.onfinish = function(){ - prompt.showToast({ - message: "The animation is finished." - }); - }; - // handle cancel event - this.animation.oncancel = function(){ - prompt.showToast({ - message: "The animation is canceled." - }); - }; - // handle repeat event - this.animation.onrepeat = function(){ - prompt.showToast({ - message: "The animation is repeated." - }); - }; - }, - start(){ - this.animation.play(); - }, - cancel(){ - this.animation.cancel(); - } - } - ``` - - ![](/images/application-dev/reference/arkui-js/figures/AnimationAPI裁剪.gif) - - -## this.$element\('_id_'\).getBoundingClientRect\(\)6+ - -获取元素的大小及其相对于窗口的位置。 - -- 示例 - - ``` - // xxx.js - var rect = this.$element('id').getBoundingClientRect(); - console.info(`current element position is ${rect.left}, ${rect.top}`); - ``` - - -## this.$element\('_id_'\).createIntersectionObserver\(\)6+ - -监听元素在当前页面的可见范围。 - -- 示例 - - ``` - // xxx.js - let observer = this.$element('broad').createIntersectionObserver({ - ratios: [0.2, 0.5], // number - }); - - observer.observe((isVisible, ratio)=> { - console.info('this element is ' + isVisible + 'ratio is ' + ratio) - }) - - observer.unobserve() - ``` - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" deleted file mode 100644 index af0842f5da8655073fb0dbe3be2b347d55902b9e..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/05.\345\212\250\347\224\273\346\240\267\345\274\217.md" +++ /dev/null @@ -1,544 +0,0 @@ ---- -title: 动画样式 -permalink: /pages/000b0100010004 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 动画样式 - -组件支持动态的旋转、平移、缩放效果,可在style或css中设置。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

transform-origin

-

string6+ | <percentage> | <length> string6+ | <percentage> | <length>

-

center center

-

变换对象的原点位置,支持px和百分比(相对于动画目标组件),如果仅设置一个值,另一个值为50%,第一个string的可选值为:left | center | right ,第二个string的可选值为:top | center | bottom。

-

示例:

-

transform-origin: 200px 30%。

-

transform-origin: 100px top。

-

transform-origin: center center。

-

transform

-

string

-

-

-

支持同时设置平移/旋转/缩放的属性。

-

详见表1

-

animation6+

-

string

-

0s ease 0s 1 normal none running none

-

格式:duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name,每个字段不区分先后,但是 duration / delay 按照出现的先后顺序解析。

-

animation-name

-

string

-

-

-

指定@keyframes,详见表2

-

animation-delay

-

<time>

-

0

-

定义动画播放的延迟时间。支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,格式为:1000ms或1s。

-

animation-duration

-

<time>

-

0

-

定义一个动画周期。支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,格式为:1000ms或1s。

-
说明:

animation-duration 样式必须设置,否则时长为 0,则不会播放动画。

-
-

animation-iteration-count

-

number | infinite

-

1

-

定义动画播放的次数,默认播放一次,可通过设置为infinite无限次播放。

-

animation-timing-function

-

string

-

ease

-

描述动画执行的速度曲线,用于使动画更为平滑。

-

可选项有:

-
  • linear:表示动画从头到尾的速度都是相同的。
  • ease:表示动画以低速开始,然后加快,在结束前变慢,cubic-bezier(0.25, 0.1, 0.25, 1.0)。
  • ease-in:表示动画以低速开始,cubic-bezier(0.42, 0.0, 1.0, 1.0)。
  • ease-out:表示动画以低速结束,cubic-bezier(0.0, 0.0, 0.58, 1.0)。
  • ease-in-out:表示动画以低速开始和结束,cubic-bezier(0.42, 0.0, 0.58, 1.0)。
  • friction:阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。
  • extreme-deceleration:急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。
  • sharp:锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。
  • rhythm:节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。
  • smooth:平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。
  • cubic-bezier:在三次贝塞尔函数中定义动画变化过程,入参的x和y值必须处于0-1之间。
  • steps: 阶梯曲线6+。语法:steps(number[, end|start]);number必须设置,支持的类型为正整数。第二个参数可选,表示在每个间隔的起点或是终点发生阶跃变化,支持设置end或start,默认值为end。
-

animation-direction6+

-

string

-

normal

-

指定动画的播放模式:

-
  • normal: 动画正向循环播放。
  • reverse: 动画反向循环播放。
  • alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放。
  • alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。
-

animation-fill-mode

-

string

-

none

-

指定动画开始和结束的状态:

-
  • none:在动画执行之前和之后都不会应用任何样式到目标上。
  • forwards:在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。
  • backwards6+:动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。
  • both6+:动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。
-

animation-play-state6+

-

string

-

running

-

指定动画的当前状态:

-
  • paused:动画状态为暂停。
  • running:动画状态为播放。
-

transition6+

-

string

-

all 0 ease 0

-

指定组件状态切换时的过渡效果,可以通过transition属性设置如下四个属性:

-
  • transition-property:规定设置过渡效果的 CSS 属性的名称,目前支持宽、高、背景色。
  • transition-duration:规定完成过渡效果需要的时间,单位秒。
  • transition-timing-function:规定过渡效果的时间曲线,支持样式动画提供的曲线。
  • transition-delay:规定过渡效果延时启动时间,单位秒。
-
- -**表 1** transform操作说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

描述

-

none6+

-

-

-

不进行任何转换。

-

matrix6+

-

<number>

-

入参为六个值的矩阵,6个值分别代表:scaleX, skewY, skewX, scaleY, translateX, translateY。

-

matrix3d6+

-

<number>

-

入参为十六个值的4X4矩阵。

-

translate

-

<length>| <percent>

-

平移动画属性,支持设置x轴和y轴两个维度的平移参数。

-

translate3d6+

-

<length>| <percent>

-

三个入参,分别代表X轴、Y轴、Z轴的平移距离。

-

translateX

-

<length>| <percent>

-

X轴方向平移动画属性。

-

translateY

-

<length>| <percent>

-

Y轴方向平移动画属性。

-

translateZ6+

-

<length>| <percent>

-

Z轴的平移距离。

-

scale

-

<number>

-

缩放动画属性,支持设置x轴和y轴两个维度的缩放参数。

-

scale3d6+

-

<number>

-

三个入参,分别代表X轴、Y轴、Z轴的缩放参数。

-

scaleX

-

<number>

-

X轴方向缩放动画属性。

-

scaleY

-

<number>

-

Y轴方向缩放动画属性。

-

scaleZ6+

-

<number>

-

Z轴的缩放参数。

-

rotate

-

<deg> | <rad> | <grad>6+ | <turn>6+

-

旋转动画属性,支持设置x轴和y轴两个维度的选中参数。

-

rotate3d6+

-

<deg> | <rad> | <grad> | <turn>

-

四个入参,前三个分别为X轴、Y轴、Z轴的旋转向量,第四个是旋转角度。

-

rotateX

-

<deg> | <rad> | <grad>6+ | <turn>6+

-

X轴方向旋转动画属性。

-

rotateY

-

<deg> | <rad> | <grad>6+ | <turn>6+

-

Y轴方向旋转动画属性。

-

rotateZ6+

-

<deg> | <rad> | <grad> | <turn>

-

Z轴方向的旋转角度。

-

skew6+

-

<deg> | <rad> | <grad> | <turn>

-

两个入参,分别为X轴和Y轴的2D倾斜角度。

-

skewX6+

-

<deg> | <rad> | <grad> | <turn>

-

X轴的2D倾斜角度。

-

skewY6+

-

<deg> | <rad> | <grad> | <turn>

-

Y轴的2D倾斜角度。

-

perspective6+

-

<number>

-

3D透视场景下镜头距离元素表面的距离。

-
- -**表 2** @keyframes属性说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

background-color

-

<color>

-

-

-

动画执行后应用到组件上的背景颜色。

-

opacity

-

number

-

1

-

动画执行后应用到组件上的不透明度值,为介于0到1间的数值,默认为1。

-

width

-

<length>

-

-

-

动画执行后应用到组件上的宽度值。

-

height

-

<length>

-

-

-

动画执行后应用到组件上的高度值。

-

transform

-

string

-

-

-

定义应用在组件上的变换类型,见表1

-

background-position6+

-

string | <percentage> | <length> string | <percentage> | <length>

-

50% 50%

-

背景图位置。单位支持百分比和px,第一个值是水平位置,第二个值是垂直位置。如果仅设置一个值,另一个值为50%。第一个string的可选值为:left | center | right ,第二个string的可选值为:top | center | bottom。

-

示例:

-
  • background-position: 200px 30%
  • background-position: 100px top
  • background-position: center center
-
- -对于不支持起始值或终止值缺省的情况,可以通过from和to显示指定起始和结束。可以通过百分比指定动画运行的中间状态6+。示例: - -``` -
-
-
-
-``` - -``` -.container { - display: flex; - justify-content: center; - align-items: center; -} -.rect{ - width: 200px; - height: 200px; - background-color: #f76160; - animation: Go 3s infinite; -} -@keyframes Go -{ - from { - background-color: #f76160; - transform:translate(100px) rotate(0deg) scale(1.0); - } - /* 可以通过百分比指定动画运行的中间状态6+ */ - 50% { - background-color: #f76160; - transform:translate(100px) rotate(60deg) scale(1.3); - } - to { - background-color: #09ba07; - transform:translate(100px) rotate(180deg) scale(2.0); - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001173324797.gif) - -``` - -
-
- animation-play-state: {{playState}} -
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} -.simpleSize { - background-color: blue; - width: 100px; - height: 100px; -} -.simpleAnimation { - animation: simpleFrames 9s; -} -@keyframes simpleFrames { - from { transform: translateX(0px); } - to { transform: translateX(100px); } -} -``` - -``` -// xxx.js -export default { - data: { - title: "", - playState: "running" - }, - toggleState() { - if (this.playState === "running") { - this.playState = "paused"; - } else { - this.playState = "running"; - } - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127285034.gif) - -``` - -
-``` - -``` -/* xxx.css */ -.img { - width: 294px; - height: 233px; - background-image: url('common/heartBeat.jpg'); - background-repeat: no-repeat; - background-position: 0% 0%; - background-size: 900%; - animation-name: heartBeating; - animation-duration: 1s; - animation-delay: 0s; - animation-fill-mode: forwards; - animation-iteration-count: -1; - animation-timing-function: steps(8, end); -} - -@keyframes heartBeating { - from { background-position: 0% 0%;} - to { background-position: 100% 0%;} -} -``` - -``` - -
-
-
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} -.content { /* 组件状态1 */ - height: 200px; - width: 200px; - background-color: red; - transition: all 5s ease 0s; -} -.content:active { /* 组件状态2 */ - height: 400px; - width: 400px; - background-color: blue; - transition: all 5s linear 0s; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152833768.gif) - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->@keyframes的from/to不支持动态绑定。 ->steps函数的end和start含义如下图所示。 ->![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125220.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" deleted file mode 100644 index 1d460c7c01f42e9a8775e1ce626695b151d7884b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/06.\346\270\220\345\217\230\346\240\267\345\274\217.md" +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: 渐变样式 -permalink: /pages/000b0100010005 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 渐变样式 - -组件普遍支持的在style或css中设置的 可以平稳过渡两个或多个指定的颜色。 - -开发框架支持线性渐变 \(linear-gradient\)和重复线性渐变 \(repeating-linear-gradient\)两种渐变效果。 - -## 线性渐变/重复线性渐变 - -使用渐变样式,需要定义过渡方向和过渡颜色。 - -1. 过渡方向:通过direction或者angle指定: - - - direction:进行方向渐变。 - - angle:进行角度渐变。 - - ``` - background: linear-gradient(direction/angle, color, color, ...); - background: repeating-linear-gradient(direction/angle, color, color, ...); - ``` - -2. 过渡颜色:支持以下四种方式:\#ff0000、\#ffff0000、rgb\(255, 0, 0\)、rgba\(255, 0, 0, 1\)。需要指定至少两种颜色。 - -- 参数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

direction

-

to <side-or-corner> <side-or-corner> = [left | right] || [top | bottom]

-

to bottom (由上到下渐变)

-

-

指定过渡方向,如:to left (从右向左渐变) ;或者

-

to bottom right (从左上角到右下角)。

-

angle

-

<deg>

-

180deg

-

-

指定过渡方向,以元素几何中心为坐标原点,水平方向为X轴,angle指定了渐变线与Y轴的夹角(顺时针方向)。

-

color

-

<color> [<length>|<percentage>]

-

-

-

-

定义使用渐变样式区域内颜色的渐变效果。

-
- -- 示例 - - ``` - #gradient { - height: 300px; - width: 600px; - } - ``` - - **图 1** 默认渐变方向为从上向下渐变 - ![](/images/application-dev/reference/arkui-js/figures/默认渐变方向为从上向下渐变.png "默认渐变方向为从上向下渐变") - - ``` - /* 从顶部开始向底部由红色向绿色渐变 */ - background: linear-gradient(red, #00ff00); - ``` - - **图 2** 45度夹角渐变 - ![](/images/application-dev/reference/arkui-js/figures/45度夹角渐变.png "45度夹角渐变") - - ``` - /* 45度夹角,从红色渐变到绿色 */ - background: linear-gradient(45deg, rgb(255,0,0),rgb(0, 255, 0)); - ``` - - **图 3** 设置方向为to right为从左向右渐变 - ![](/images/application-dev/reference/arkui-js/figures/设置方向为to-right为从左向右渐变.png "设置方向为to-right为从左向右渐变") - - ``` - /* 从左向右渐变,在距离左边90px和距离左边360px (600*0.6) 之间270px宽度形成渐变 */ - background: linear-gradient(to right, rgb(255,0,0) 90px, rgb(0, 255, 0) 60%); - ``` - - **图 4** 从左向右渐变,重复渐变 - ![](/images/application-dev/reference/arkui-js/figures/从左向右渐变-重复渐变.png "从左向右渐变-重复渐变") - - ``` - /* 从左向右重复渐变,重复渐变区域30px(60-30)透明度0.5 */ - background: repeating-linear-gradient(to right, rgba(255, 255, 0, 1) 30px,rgba(0, 0, 255, .5) 60px); - ``` - - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" deleted file mode 100644 index 701889f2a1fdb30d97f43f3be24004d6e397998b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/01.\351\200\232\347\224\250/08.\345\252\222\344\275\223\346\237\245\350\257\242.md" +++ /dev/null @@ -1,316 +0,0 @@ ---- -title: 媒体查询 -permalink: /pages/000b0100010007 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# 媒体查询 - -媒体查询(Media Query)在移动设备上应用十分广泛,开发者经常需要根据设备的大致类型或者特定的特征和设备参数(例如屏幕分辨率)来修改应用的样式。为此媒体查询提供了如下功能: - -1. 针对设备和应用的属性信息,可以设计出相匹配的布局样式。 -2. 当屏幕发生动态改变时(比如分屏、横竖屏切换),应用页面布局同步更新。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->media属性值默认为设备的真实尺寸大小、物理像素和真实的屏幕分辨率。请勿与以720px为基准的项目配置宽度px混淆。 - -## CSS语法规则 - -使用@media来引入查询语句,具体规则如下: - -``` -@media [media-type] [and|not|only] [(media-feature)] { - CSS-Code; -} -``` - -例子: - -@media screen and \(round-screen: true\) \{ … \} // 当设备屏幕是圆形时条件成立 - -@media \(max-height: 800\) \{ … \} // 范围查询,CSS level 3 写法 - -@media \(height <= 800\) \{ … \} // 范围查询,CSS level 4 写法,与CSS level3写法等价 - -@media screen and \(device-type: tv\) or \(resolution < 2\) \{ … \} // 同时包含媒体类型和多个媒体特征的多条件复杂语句查询 - -## 页面中引用资源 - -通过@import方式引入媒体查询,具体使用方法如下: - -``` -@import url [media-type] [and|not|only] [(media-feature)]; -``` - -例如: - -``` -@import '../common/style.css' screen and (min-width: 600) and (max-width: 1200); -``` - -## 媒体类型 - - - - - - - - - - -

类型

-

说明

-

screen

-

按屏幕相关参数进行媒体查询。

-
- -## 媒体逻辑操作 - -媒体逻辑操作符:and、or、not、only用于构成复杂媒体查询,也可以通过comma(,)将其组合起来,详细解释说明如下表。 - -**表 1** 媒体逻辑操作符 - - - - - - - - - - - - - - - - - - - - - - -

类型

-

说明

-

and

-

将多个媒体特征(Media Feature)以“与”的方式连接成一个媒体查询,只有当所有媒体特征都为true,查询条件成立。另外,它还可以将媒体类型和媒体功能结合起来。

-

例如:screen and (device-type: wearable) and (max-height: 600) 表示当设备类型是智能穿戴同时应用的最大高度小于等于600个像素单位时成立。

-

not

-

取反媒体查询结果,媒体查询结果不成立时返回true,否则返回false。在媒体查询列表中应用not,则not仅取反应用它的媒体查询。

-

例如:not screen and (min-height: 50) and (max-height: 600) 表示当应用高度小于50个像素单位或者大于600个像素单位时成立。

-
说明:

使用not运算符时必须指定媒体类型。

-
-

only

-

当整个表达式都匹配时,才会应用选择的样式,可以应用在防止某些较早的版本的浏览器上产生歧义的场景。一些较早版本的浏览器对于同时包含了媒体类型和媒体特征的语句会产生歧义,比如:

-

screen and (min-height: 50)

-

老版本浏览器会将这句话理解成screen,从而导致仅仅匹配到媒体类型(screen),就应用了指定样式,使用only可以很好地规避这种情况。

-
说明:

使用only时必须指定媒体类型。

-
-

,(comma)

-

将多个媒体特征以“或”的方式连接成一个媒体查询,如果存在结果为true的媒体特征,则查询条件成立。其效果等同于or运算符。

-

例如:screen and (min-height: 1000), (round-screen:true) 表示当应用高度大于等于1000个像素单位或者设备屏幕是圆形时,条件成立。

-

or

-

将多个媒体特征以“或”的方式连接成一个媒体查询,如果存在结果为true的媒体特征,则查询条件成立。

-

例如:screen and (max-height: 1000) or (round-screen:true)表示当应用高度小于等于1000个像素单位或者设备屏幕是圆形时,条件成立。

-
- -在MediaQuery Level 4中引入了范围查询,使其能够使用max-,min-的同时,也支持了<=,\>=,<,\>操作符。 - -**表 2** 媒体逻辑范围操作符 - - - - - - - - - - - - - - - - - - - -

类型

-

说明

-

<=

-

小于等于,例如:screen and (50 <= height)。

-

>=

-

大于等于,例如:screen and (600 >= height)。

-

<

-

小于,例如:screen and (50 < height)。

-

>

-

大于,例如:screen and (600 > height)。

-
- -## 媒体特征 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

类型

-

说明

-

height

-

应用页面显示区域的高度。

-

min-height

-

应用页面显示区域的最小高度。

-

max-height

-

应用页面显示区域的最大高度。

-

width

-

应用页面显示区域的宽度。

-

min-width

-

应用页面显示区域的最小宽度。

-

max-width

-

应用页面显示区域的最大宽度。

-

resolution

-

设备的分辨率,支持dpi,dppx和dpcm单位。其中:

-
  • dpi表示每英寸中物理像素个数,1dpi≈0.39dpcm;
  • dpcm表示每厘米上的物理像素个数,1dpcm ≈ 2.54dpi;
  • dppx表示每个px中的物理像素数(此单位按96px=1英寸为基准,与页面中的px单位计算方式不同),1dppx = 96dpi。
-

min-resolution

-

设备的最小分辨率。

-

max-resolution

-

设备的最大分辨率。

-

orientation

-

屏幕的方向。

-

可选值:

-
  • orientation: portrait(设备竖屏)
  • orientation: landscape(设备横屏)
-

aspect-ratio

-

应用页面显示区域的宽度与高度的比值。

-

例如:aspect-ratio:1/2

-

min-aspect-ratio

-

应用页面显示区域的宽度与高度的最小比值。

-

max-aspect-ratio

-

应用页面显示区域的宽度与高度的最大比值。

-

device-height

-

设备的高度。

-

min-device-height

-

设备的最小高度。

-

max-device-height

-

设备的最大高度。

-

device-width

-

设备的宽度。

-

min-device-width

-

设备的最小宽度。

-

max-device-width

-

设备的最大宽度。

-

round-screen

-

屏幕类型,圆形屏幕为true, 非圆形屏幕为 false。

-

dark-mode6+

-

系统为深色模式时为true,否则为false。

-
- -## 示例代码 - -- 通用媒体特征示例代码: - -``` - -
-
- Hello World -
-
-``` - -``` -/* xxx.css */ -.container { - width: 300px; - height: 600px; - background-color: #008000; -} -@media (device-type: tv) { - .container { - width: 500px; - height: 500px; - background-color: #fa8072; - } -} -@media (device-type: wearable) { - .container { - width: 300px; - height: 300px; - background-color: #008b8b; - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" deleted file mode 100644 index 07cbad318d4e926ce0c8fca71f8365e94b2b962b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/05.list.md" +++ /dev/null @@ -1,729 +0,0 @@ ---- -title: list -permalink: /pages/000b0100010104 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# list - -列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 - -## 权限列表 - -无 - -## 子组件 - -仅支持<[list-item-group](/pages/000b0100010106)\>和<[list-item](/pages/000b0100010105)\>。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

scrollpage

-

boolean

-

false

-

-

设置为true时,将 list 顶部页面中非 list 部分随 list 一起滑出可视区域,当list方向为row时,不支持此属性。

-

cachedcount

-

number

-

0

-

-

长列表延迟加载时list-item最少缓存数量。

-

可视区域外缓存的list-item数量少于该值时,会触发requestitem事件。

-

scrollbar

-

string

-

off

-

-

侧边滑动栏的显示模式(当前只支持纵向):

-
  • off:不显示。
  • auto:按需显示(触摸时显示,2s后消失)。
  • on:常驻显示。
-

scrolleffect

-

string

-

spring

-

-

滑动效果,目前支持如下滑动效果:

-
  • spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。
  • fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化。
  • no:滑动到边缘后无效果。
-

indexer

-

boolean | Array<string>

-

false

-

-

是否展示侧边栏快速字母索引栏。设置为true或者自定义索引时,索引栏会显示在列表右边界处。示例:

-

"indexer" : "true"表示使用默认字母索引表。

-

"indexer" : "false"表示无索引。

-

"indexer" : ['#',‘1’,'2',‘3’,'4',‘5’,'6',‘7’,'8']表示自定义索引表。自定义时"#"必须要存在。

-
说明:
  • indexer属性生效需要flex-direction属性配合设置为column,且columns属性设置为1。
  • 点击索引条进行列表项索引需要list-item子组件配合设置相应的section属性
-
-

indexercircle5+

-

boolean

-

-

-

-

是否为环形索引。

-

穿戴设备默认为true,其他为false。indexer为false时不生效。

-

indexermulti5+

-

boolean

-

false

-

-

是否开启索引条多语言功能。

-

indexer为false时不生效。

-

indexerbubble5+

-

boolean

-

true

-

-

是否开启索引切换的气泡提示。

-

indexer为false时不生效。

-

divider5+

-

boolean

-

false

-

-

item是否自带分隔线。

-

其样式参考样式列表的divider-color、divider-height、divider-length、divider-origin。

-

shapemode

-

string

-

default

-

-

侧边滑动栏的形状类型。

-
  • default:不指定,跟随主题;
  • rect:矩形;
  • round:圆形。
-

itemscale

-

boolean

-

true

-

-

焦点处理时,可以通过这个属性取消焦点进出的放大缩小效果。该效果仅在智能穿戴和智慧屏上生效。

-
说明:

仅在columns样式为1的时候生效。

-
-

itemcenter

-

boolean

-

false

-

-

初始化页面和滑动后页面总是有一个item处于视口交叉轴的中心位置。该效果仅在智能穿戴上生效。

-

updateeffect

-

boolean

-

false

-

-

用于设置当list内部的item发生删除或新增时是否支持动效。

-
  • false:新增删除item时无过渡动效。
  • true:新增删除item时播放过程动效。
-

chainanimation5+

-

boolean

-

false

-

-

用于设置当前list是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。链式联动效果:list内的list-item间隔一定距离,在基本的滑动交互行为下,主动对象驱动从动对象进行联动,驱动效果遵循弹簧物理动效。

-
  • false:不启用链式联动
  • true:启用链式联动
    说明:
    • 不支持动态修改。
    • 如同时配置了indexer,链式动效不生效。
    • 如配置了链式动效,list-item的sticky不生效。
    -
    -
-

scrollvibrate

-

boolean

-

true

-

-

用于设置当list滑动时是否有振动效果,仅在智能穿戴场景生效,其他场景滑动无振动效果。

-
  • true:列表滑动时有振动效果。
  • false:列表滑动时无振动效果。
-

initialindex

-

number

-

0

-

-

用于设置当前List初次加载时视口起始位置显示的item,默认为0,即显示第一个item,如设置的序号超过了最后一个item的序号,则设置不生效,当同时设置了initialoffset属性时,当前属性不生效。当indexer为true或者scrollpage为true时,不生效。

-

initialoffset

-

<length>

-

0

-

-

用于设置当前List初次加载时视口的起始偏移量,偏移量无法超过当前List可滑动的范围,如果超过会被截断为可滑动范围的极限值。当indexer为true或者scrollpage为true时,不生效。

-

selected5+

-

string

-

-

-

-

指定当前列表中被选中激活的项,可选值为list-item的section属性值。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

divider-color5+

-

<color>

-

transparent

-

-

item分隔线颜色,仅当list的divider属性为true时生效。

-

divider-height5+

-

<length>

-

1

-

-

item分隔线高度,仅当list的divider属性为true时生效。

-

divider-length5+

-

<length>

-

主轴宽度

-

-

item分隔线长度,不设置时最大长度为主轴宽度,具体长度取决于divider-origin,仅当list的divider属性为true时生效。

-

divider-origin5+

-

<length>

-

0

-

-

item分隔线相对于item主轴起点位置的偏移量,仅当list的divider属性为true时生效。

-

flex-direction

-

string

-

-

column

-

-

设置flex容器主轴的方向,指定flex项如何放置在flex容器中,可选值为:

-
  • column:主轴为纵向。
  • row:主轴为横向。
-

其他组件默认值为row,在list组件中默认值为column。

-

columns

-

number

-

1

-

-

list交叉轴方向的显示列数,默认为1列。

-
说明:

设置多列时,在list交叉轴上进行均分,每一列大小相同。

-
-

align-items

-

string

-

stretch

-

-

list每一列交叉轴上的对齐格式,可选值为:

-
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
    说明:

    align-items样式作用在每一列的子元素上,列与列之间采用均分方式布局。

    -
    -
-

item-extent

-

<length> | <percentage>

-

-

-

-

设置内部item为固定大小,设置为百分比格式时,指相对于list的视口主轴方向长度的百分比。

-

fade-color

-

<color>

-

grey

-

-

设置渐隐物理动效的颜色。当滑动效果设置为渐隐物理动效时生效。

-

scrollbar-color6+

-

<color>

-

-

-

-

设置滚动条的颜色。

-

scrollbar-width6+

-

<length>

-

-

-

-

设置滚动条的宽度。

-

scrollbar-offset6+

-

<length>

-

0

-

-

设置滚动条距离List默认位置的偏移量,只支持正数,默认位置在List右边缘,可以通过这个偏移量调整滚动条的水平位置,如果滚动条绘制在list外部,而list父组件有裁剪,会导致滚动条被裁剪。

-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

indexerchange5+

-

{ local: booleanValue }

-

多语言索引条切换事件,仅当indexer属性为true,indexermulti为true时生效。booleanValue可能值为true或者false:

-
  • true: 当前展示本地索引。
  • false: 当前展示字母索引。
-

scroll

-

{ scrollX: scrollXValue, scrollY: scrollYValue, scrollState: stateValue }

-

列表滑动的偏移量和状态回调。

-

stateValue: 0表示列表滑动已经停止。

-

stateValue: 1表示列表正在用户触摸状态下滑动。

-

stateValue: 2表示列表正在用户松手状态下滑动。

-

scrollbottom

-

-

-

当前列表已滑动到底部位置。

-

scrolltop

-

-

-

当前列表已滑动到顶部位置。

-

scrollend

-

-

-

列表滑动已经结束。

-

scrolltouchup

-

-

-

手指已经抬起且列表仍在惯性滑动。

-

requestitem

-

-

-

请求创建新的list-item。

-

长列表延迟加载时,可视区域外缓存的list-item数量少于cachedcount时,会触发该事件。

-

rotate7+

-

{ rotateValue: number }

-

返回表冠旋转角度增量值,仅智能穿戴支持。

-
- -## 方法 - -支持[通用方法](/pages/000b0100010003)外,还支持如下方法: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

scrollTo

-

{ index: number(指定位置) }

-

list滑动到指定index的item位置。

-

scrollBy

-

ScrollParam

-

触发list滑动一段距离。

-

智慧屏特有方法。

-

scrollTop

-

{ smooth: boolean }

-

smooth缺省为false,表示直接滚动到顶部。

-

smooth为true,表示平滑滚动到顶部。

-

scrollBottom

-

{ smooth: boolean }

-

smooth缺省为false,表示直接滚动到底部。

-

smooth为true,表示平滑滚动到底部。

-

scrollPage

-

{ reverse: boolean, smooth: boolean }

-

reverse缺省值为false,表示下一页,无完整页则滚动到底部。

-

reverse为true,表示上一页,无完整页则滚动到顶部。

-

smooth缺省值为false,表示直接滚动一页。

-

smooth为true,表示平滑滚动一页。

-

scrollArrow

-

{ reverse: boolean, smooth: boolean }

-

reverse缺省值为false,表示向底部方向滑动一段距离,无足够距离则滚动到底部。

-

reverse为true,表示向顶部方向滑动一段距离,无足够距离则滚动到顶部。

-

smooth缺省值为false,表示直接滚动。

-

smooth为true,表示平滑滚动。

-

collapseGroup

-

{ groupid: string }

-

收拢指定的group。

-

groupid:需要收拢的group的id。

-

当groupid未指定时收拢所有的group。

-

expandGroup

-

{ groupid: string }

-

展开指定的group。

-

groupid:需要展开的group的id。

-

当groupid未指定时展开所有的group。

-

currentOffset

-

-

-

返回当前滑动的偏移量。返回值类型是Object,返回值说明请见表2

-
- -**表 1** ScrollParam - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

是否必选

-

默认值

-

备注

-

dx

-

number

-

-

0

-

水平方向滑动的偏移量,单位为px。

-

dy

-

number

-

-

0

-

垂直方向滑动的偏移量,单位为px。

-

smooth

-

boolean

-

-

true

-

列表位置跳转时是否有滑动动画。

-
- -**表 2** currentOffset返回对象属性说明 - - - - - - - - - - - - - - - - -

名称

-

类型

-

备注

-

x

-

number

-

当前x轴滑动偏移量,单位为px。

-

y

-

number

-

当前y轴滑动偏移量,单位为px。

-
- -## 示例 - -``` - -
- - - {{$item.title}} - {{$item.date}} - - -
-``` - -``` -// index.js -export default { - data: { - todolist: [{ - title: '刷题', - date: '2021-12-31 10:00:00', - }, { - title: '看电影', - date: '2021-12-31 20:00:00', - }], - }, -} -``` - -``` -/* index.css */ -.container { - display: flex; - justify-content: center; - align-items: center; - left: 0px; - top: 0px; - width: 454px; - height: 454px; -} -.todo-wrapper { - width: 454px; - height: 300px; -} -.todo-item { - width: 454px; - height: 80px; - flex-direction: column; -} -.todo-title { - width: 454px; - height: 40px; - text-align: center; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/33.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" deleted file mode 100644 index b2254b0c4127ec65725f14af4110a3987518c8c8..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/06.list-item.md" +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: list-item -permalink: /pages/000b0100010105 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# list-item - -<[list](/pages/000b0100010104)\>的子组件,用来展示列表具体item。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->由于父元素list组件的align-items默认样式为stretch,该组件宽度默认充满list组件。设置父元素list组件的align-items样式为非stretch来生效自定义宽度。 - -## 权限列表 - -无 - -## 子组件 - -支持单个子组件。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

type

-

string

-

default

-

-

list-item类型,默认值为default,同一list中可以包含多种type的list-item,相同type的list-item需要确保渲染后的视图布局也相同,如果type固定,则使用show属性代替if属性,确保视图布局不变。

-

primary

-

boolean

-

false

-

-

设置为true表示该item是group中的主item,即收拢时显示的item。如果有多个primary,以第一个为准。如果没有标记为primary的item,则以第一个item为主item。

-

section

-

string

-

-

-

-

当前item的匹配字符串,如不设置则为空。不支持动态修改。group内只有主item设置有效。

-

sticky

-

string

-

none

-

-

设置当前item是否为吸顶item以及其吸顶消失的效果,当前仅支持纵向list,group内部的item不可吸顶,设置该属性无效。

-
  • none:当前item不吸顶。
  • normal:当前item吸顶,消失效果滑动消失。
  • opacity:当前item吸顶,消失效果渐隐消失,仅在智能穿戴上支持。
-

stickyradius

-

<length>

-

1000px

-

-

设置智能穿戴上吸顶item的圆弧效果半径,未设置时使用默认半径。sticky属性为none时,设置该属性无效。

-

clickeffect5+

-

boolean

-

true

-

-

设置当前item是否有点击动效。

-
  • false:item点击时无点击动效。
  • true:item点击时有点击动效。
-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

column-span

-

<number>

-

1

-

-

当前的list-item需要在list中占据的列的数量,默认占一列,仅在list为多列时生效。

-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

sticky

-

{ state: boolean }

-

吸顶组件回调事件。

-

value: false表示当前item处于非吸顶状态;

-

value: true表示当前item处于吸顶状态;

-

说明:仅当item设置sticky属性时支持注册此事件。

-
- -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -详见[List示例](/pages/000b0100010104#section24931424488)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" deleted file mode 100644 index c25de0cb5c043585b3d0914d1e3c000d7bfc931c..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/08.panel.md" +++ /dev/null @@ -1,553 +0,0 @@ ---- -title: panel -permalink: /pages/000b0100010107 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# panel - -可滑动面板。提供一种轻量的内容展示的窗口,可方便的在不同尺寸中切换。属于弹出式组件。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - -## 子组件 - -支持 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

type

-

string

-

foldable

-

-

设置可滑动面板类型,不可动态变更,可选值有:

-
  • minibar:提供minibar和类全屏展示切换效果。

    -
  • foldable:内容永久展示类,提供大(类全屏)、中(类半屏)、小三种尺寸展示切换效果。

    -
  • temporary:内容临时展示区,提供大(类全屏)、中(类半屏)两种尺寸展示切换效果。

    -
-

mode

-

string

-

full

-

-

设置初始状态,mode参数可选值为:

-
  1. mini:类型为minibar和foldable时,为最小状态;类型为temporary,则不生效。

    -
  2. half: 类型为foldable和temporary时,为类半屏状态;类型为minibar,则不生效。

    -
  3. full: 类全屏状态。

    -
-

dragbar

-

boolean

-

true

-

-

设置是否存在dragbar,true表示存在,false表示不存在。

-

fullheight

-

<length>

-

-

-

-

指定full状态下的高度,默认为屏幕尺寸 - 8px。

-

halfheight

-

<length>

-

-

-

-

指定half状态下的高度,默认为屏幕尺寸的一半。

-

miniheight

-

<length>

-

-

-

-

指定mini状态下的高度,默认为48px。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持渲染属性,包括for、if和show。 ->- 不支持focusable和disabled属性。 - -## 样式 - -仅支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

padding

-

<length>

-

0

-

-
该属性可以有1到4个值:
  • 指定一个值时,该值指定四个边的内边距。

    -
  • 指定两个值时,第一个值指定上下两边的内边距,第二个指定左右两边的内边距。

    -
  • 指定三个值时,第一个指定上边的内边距,第二个指定左右两边的内边距,第三个指定下边的内边距。

    -
  • 指定四个值时分别为上、右、下、左边的内边距(顺时针顺序)。

    -
-
-

padding-[left|top|right|bottom]

-

<length>

-

0

-

-

设置左、上、右、下内边距属性。

-

padding-[start|end]

-

<length>

-

0

-

-

设置起始和末端内边距属性。

-

margin

-

<length>

-

0

-

-

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

-
  • 只有一个值时,这个值会被指定给全部的四个边。

    -
  • 两个值时,第一个值被匹配给上和下,第二个值被匹配给左和右。

    -
  • 三个值时,第一个值被匹配给上, 第二个值被匹配给左和右,第三个值被匹配给下。

    -
  • 四个值时,会依次按上、右、下、左的顺序匹配 (即顺时针顺序)。

    -
-

margin-[left|top|right|bottom]

-

<length>

-

0

-

-

设置左、上、右、下外边距属性。

-

margin-[start|end]

-

<length>

-

0

-

-

设置起始和末端外边距属性。

-

border

-

-

-

0

-

-

使用简写属性设置所有的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置时,各属性值为默认值。

-

border-style

-

string

-

solid

-

-

使用简写属性设置所有边框的样式,可选值为:

-
  • dotted:显示为一系列圆点,圆点半径为border-width的一半。
  • dashed:显示为一系列短的方形虚线。
-
  • solid:显示为一条实线。
-

border-[left|top|right|bottom]-style

-

string

-

solid

-

-

分别设置左、上、右、下四个边框的样式,可选值为dotted、dashed、solid。

-

border-[left|top|right|bottom]

-

-

-

-

-

-

使用简写属性设置对应位置的边框属性,包含边框的宽度,样式,颜色属性,顺序设置为border-width、border-style、border-color,不设置的值为默认值。

-

border-width

-

<length>

-

0

-

-

使用简写属性设置元素的所有边框宽度,或者单独为各边边框设置宽度

-

border-[left|top|right|bottom]-width

-

<length>

-

0

-

-

分别设置左、上、右、下四个边框的宽度。

-

border-color

-

<color>

-

black

-

-

使用简写属性设置元素的所有边框颜色,或者单独为各边边框设置颜色

-

border-[left|top|right|bottom]-color

-

<color>

-

black

-

-

分别设置左、上、右、下四个边框的颜色。

-

border-radius

-

<length>

-

-

-

-

border-radius属性是设置元素的外边框圆角半径。设置border-radius时不能单独设置某一个方向的border-[left|top|right|bottom]-width,border-[left|top|right|bottom]-color ,如果要设置color和width,需要将四个方向一起设置(border-width、border-color)。

-

border-[top|bottom]-[left|right]-radius

-

<length>

-

-

-

-

分别设置左上,右上,右下和左下四个角的圆角半径。

-

background

-

<linear-gradient>

-

-

-

-

仅支持设置渐变样式,与background-color、background-image不兼容。

-

background-color

-

<color>

-

-

-

-

设置背景颜色。

-

background-image

-

string

-

-

-

-

设置背景图片。与background-color、background不兼容;支持本地图片资源地址。

-

background-size

-
  • string
  • <length> <length>
  • <percentage> <percentage>
-

auto

-

-

设置背景图片的大小。

-
  • string可选值:
    • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    -
  • length值参数方式:

    设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
  • 百分比参数方式:

    以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
-

background-repeat

-

string

-

repeat

-

-

针对重复背景图像样式进行设置,背景图像默认在水平和垂直方向上重复。

-
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
-

background-position

-
  • string string
  • <length> <length>
  • <percentage> <percentage>
-

0px 0px

-

-
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    -
-
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>
-

opacity

-

number

-

1

-

-

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

-
- -## 事件 - -仅支持如下事件: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

sizechange

-

{ size: { height: heightLength, width: widthLength }, mode: modeStr }

-

当可滑动面板发生状态变化时触发,mode参数可选值为:

-
  1. mini:类型为minibar和foldable时,处于最小状态;

    -
  2. half: 类型为foldable时,处于类半屏状态;

    -
  3. full: 类全屏状态。

    -
    说明:

    返回的height值为内容区高度值,当dragbar属性为true时,panel本身的高度值为dragbar高度加上内容区高度。

    -
    -
-
- -## 方法 - -仅支持如下方法: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

show

-

-

-

弹出panel可滑动面板。

-

close

-

-

-

关闭panel可滑动面板。

-
- -## 示例 - -``` - -
-
- -
- -
-
- Simple panel in {{modeFlag}} mode -
-
- -
-
-
-
-``` - -``` -/* xxx.css */ -.doc-page { - flex-direction: column; - justify-content: center; - align-items: center; -} -.btn-div { - width: 100%; - height: 200px; - flex-direction: column; - align-items: center; - justify-content: center; -} -.txt { - color: #000000; - font-weight: bold; - font-size: 39px; -} -.panel-div { - width: 100%; - flex-direction: column; - align-items: center; -} -.inner-txt { - width: 100%; - height: 160px; - flex-direction: column; - align-items: center; - justify-content: center; -} -.inner-btn { - width: 100%; - height: 120px; - justify-content: center; - align-items: center; -} -``` - -``` -// xxx.js -export default { - data: { - modeFlag: "half" - }, - showPanel() { - this.$element('simplepanel').show() - }, - closePanel() { - this.$element('simplepanel').close() - }, - changeMode(e) { - this.modeFlag = e.mode - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/panel6.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" deleted file mode 100644 index dec281eb45aff84e83066bf6c0da5b2f2dfed972..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/02.\345\256\271\345\231\250\347\273\204\344\273\266/13.stepper-item.md" +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: stepper-item -permalink: /pages/000b010001010c -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# stepper-item - -步骤导航器子组件,作为步骤导航器某一个步骤的内容展示组件。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - -## 权限列表 - -无 - -## 子组件 - -支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

label

-

Label

-

-

-

-

自定义步骤导航器底部步骤提示文本按钮属性,不支持动态修改。如果没有定义该属性,步骤导航器在中文语言环境下,使用“返回”和“下一步”文本按钮,在非中文语言环境下,使用“BACK”和“NEXT”文本按钮。针对第一个步骤,没有回退文本按钮,针对最后一个步骤,下一步文本按钮文本使用“开始”(中文语言)或者“START”(非中文语言)。

-
- -**表 1** Label对象定义 - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

描述

-

prevLabel

-

string

-

-

-

步骤导航器底部回退文本按钮的描述文本。

-

nextLabel

-

string

-

-

-

步骤导航器底部下一步文本按钮的描述文本。

-

status

-

string

-

normal

-

步骤导航器当前步骤的初始状态,可选值为:

-
  • normal:正常状态,右侧文本按钮正常显示,可点击进入下一个步骤。
-
  • disabled:不可用状态,右侧文本按钮灰度显示,不可点击进入下一个步骤。
-
  • waiting:等待状态,右侧文本按钮不显示,使用等待进度条,不可点击进入下一个步骤。
-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

-

-

-

文本颜色。

-

font-size

-

<length>

-

-

-

-

文本大小。

-

allow-scale

-

boolean

-

true

-

-

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-

font-style

-

string

-

normal

-

-

文本字体样式,可选值为:

-
  • normal: 标准的字体样式;
  • italic: 斜体的字体样式。
-

font-weight

-

number|string

-

normal

-

-

文本字体粗细,number类型取值[100, 900]的整数(被100整除),默认为400,取值越大,字体越粗。string类型取值为:lighter、normal、bold、bolder。

-

text-decoration

-

string

-

none

-

-

文本修饰,可选值为:

-
  • underline: 文本下划线修饰。
  • line-through: 穿过文本的修饰线。
  • none: 标准文本。
-

font-family

-

string

-

sans-serif

-

-

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持长宽样式,宽和父容器stepper一样,高是父容器stepper减去底部导航按钮的高度。 ->- 不支持posit样式。 - -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

appear

-

-

-

当该步骤出现时触发。

-

disappear

-

-

-

当该步骤消失时触发。

-
- -## 方法 - -不支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -详见[stepper示例](/pages/000b010001010b)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" deleted file mode 100644 index d08d8de349b5858349ad18e434a49f0a52ca67b9..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/03.divider.md" +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: divider -permalink: /pages/000b0100010202 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# divider - -提供分隔器组件,分隔不同内容块/内容元素。可用于列表或界面布局。 - -## 权限列表 - -无 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

vertical

-

boolean

-

false

-

-

使用水平分割线还是垂直分割线,默认水平。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持focusable、disabled属性。 - -## 样式 - -仅支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

margin

-

<length>

-

0

-

-

使用简写属性设置所有的外边距属性,该属性可以有1到4个值。

-

margin-[left|top|right|bottom]

-

<length>

-

0

-

-

使用简写属性设置左、上、右、下外边距属性,类型length,单位px,默认值0。

-

color

-

<color>

-

#08000000

-

-

设置分割线颜色。

-

stroke-width

-

<length>

-

1

-

-

设置分割线宽度。

-

display

-

string

-

flex

-

-

确定分割线所产生的框的类型。值flex/none,默认值flex。

-

visibility

-

string

-

visible

-

-

是否显示分割线。不可见的框会占用布局。visible代表显示元素,hidden代表不显示元素。

-

line-cap

-

string

-

butt

-

-

设置分割线条的端点样式,默认为butt,可选值为:

-
  • butt:分割线两端为平行线;
  • round:分割线两端额外添加半圆;
  • square:分割线两端额外添加半方形;
-
说明:

round和square会额外增加一个线宽的分割线长度。

-
-

flex

-

number

-

-

-

-

规定了分割线如何适应父组件中的可用空间。它作为一个简写属性,用来设置组件的flex-grow。

-
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

-
-

flex-grow

-

number

-

0

-

-

设置分割线的伸展因子,指定父组件容器主轴方向上剩余空间(容器本身大小减去所有flex项加起来的大小)的分配系数。0为不伸展。

-
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

-
-

-

flex-shrink

-

number

-

1

-

-

设置分割线的收缩因子,flex元素仅在默认宽度之和大于容器的时候才会发生收缩,0为不收缩。

-
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

-
-

flex-basis

-

<length>

-

-

-

-

-

设置分割线在主轴方向上的初始大小。

-
说明:

仅父容器为<div>、<list-item>、<tabs>时生效。

-
-
- -## 事件 - -不支持。 - -## 方法 - -不支持。 - -## 示例 - -``` - -
-
- -
-
-``` - -``` -/* xxx.css */ -.container { - margin: 20px; - flex-direction:column; - width:100%; - height:100%; - align-items:center; -} -.content{ - width:80%; - height:40%; - border:1px solid #000000; - align-items: center; - justify-content: center; - flex-direction:column; -} -.divider { - margin: 10px; - color: #ff0000ff; - stroke-width: 3px; - line-cap: round; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/1.jpg) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" deleted file mode 100644 index fdda627f5c093bd37fc430b3ae87c67f1756d8e5..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/07.label.md" +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: label -permalink: /pages/000b0100010206 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# label - -为input、button、textarea组件定义相应的标注,点击该标注时会触发绑定组件的点击效果。 - -## 权限列表 - -无 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

target

-

string

-

-

-

-

目标组件的属性id值。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e5000000

-

-

设置文本的颜色。

-

font-size

-

<length>

-

30px

-

-

设置文本的尺寸。

-

allow-scale

-

boolean

-

true

-

-

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果需要支持动态生效,请参看config描述文件中config-changes标签。

-
-

letter-spacing

-

<length>

-

0px

-

-

设置文本的字符间距。

-

font-style

-

string

-

normal

-

-

设置文本的字体样式,可选值为:

-
  • normal:标准的字体样式;
  • italic:斜体的字体样式。
-

font-weight

-

number | string

-

normal

-

-

设置文本的字体粗细,number类型取值[100, 900],默认为400,取值越大,字体越粗。

-
说明:

number取值必须为100的整数倍。

-
-

string类型取值支持如下四个值:lighter、normal、bold、bolder。

-

text-decoration

-

string

-

none

-

-

设置文本的文本修饰,可选值为:

-
  • underline:文字下划线修饰;
  • line-through:穿过文本的修饰线n
  • none:标准文本。
-

text-align

-

string

-

start

-

-

设置文本的文本对齐方式,可选值为:

-
  • left:文本左对齐;
  • center:文本居中对齐;
  • right:文本右对齐;
  • start:根据文字书写相同的方向对齐;
  • end:根据文字书写相反的方向对齐。
-
说明:

如文本宽度未指定大小,文本的宽度和父容器的宽度大小相等的情况下,对齐效果可能会不明显。

-
-

line-height

-

<length>

-

0px

-

-

设置文本的文本行高,设置为0px时,不限制文本行高,自适应字体大小。

-

text-overflow

-

string

-

clip

-

-

在设置了最大行数的情况下生效,可选值为:

-
  • clip:将文本根据父容器大小进行裁剪显示;
  • ellipsis:根据父容器大小显示,显示不下的文本用省略号代替。需配合max-lines使用。
-

font-family

-

string

-

sans-serif

-

-

设置文本的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

max-lines

-

number

-

-

-

-

设置文本的最大行数。

-

min-font-size

-

<length>

-

-

-

-

文本最小字号,需要和文本最大字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

-

max-font-size

-

<length>

-

-

-

-

文本最大字号,需要和文本最小字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

-

font-size-step

-

<length>

-

1px

-

-

文本动态调整字号时的步长,需要设置最小,最大字号样式生效。

-

prefer-font-sizes

-

<array>

-

-

-

-

预设的字号集合,在动态尺寸调整时,优先使用预设字号集合中的字号匹配设置的最大行数,如果预设字号集合未设置,则使用最大最小和步长调整字号。针对仍然无法满足最大行数要求的情况,使用text-overflow设置项进行截断,设置预设尺寸集后,font-size、max-font-size、min-font-size和font-size-step不生效。

-

如:prefer-font-sizes: 12px,14px,16px

-
- -## 事件 - -不支持。 - -## 方法 - -不支持。 - -## 示例 - -``` - -
-
- - -
-
- - -
-
- - -
-
-``` - -``` -/*xxx.css */ -.container { - flex-direction: column; - align-items: center; -} -.row { - flex-direction: row; -} -.label { - width: 200px; - margin-top: 50px; -} -.input { - margin-left: 100px; - margin-top: 50px; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152834002.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" deleted file mode 100644 index 14e0b1349533fb0eafd859f20794e7245dbe220b..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/10.option.md" +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: option -permalink: /pages/000b0100010209 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# option - -当作为<[select](/pages/000b0100010212)\>的子组件时用来展示下拉选择的具体项目。 - -当作为<[menu](/pages/000b0100010208)\>的子组件时用来展示弹出菜单的具体项目。 - -## 权限列表 - -无 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性:↵ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

selected

-

boolean

-

-

-

-

选择项是否为下拉列表的默认项,仅在父组件是select时生效。

-

value

-

string

-

-

-

-

选择项的值,作为select、menu父组件的selected事件中的返回值。

-
说明:

option选项的UI展示值需要放在标签内,如<option value="10">十月</option>

-
-

icon

-

string

-

-

-

-

图标资源路径,该图标展示在选项文本前,图标格式为jpg,png和svg。

-
- -## 样式 - -支持如下样式。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e6000000

-

-

选择项的文本颜色。

-

font-size

-

<length>

-

16px

-

-

选择项的文本尺寸。

-

allow-scale

-

boolean

-

true

-

-

选择项的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

-
-

font-weight

-

number | string

-

normal

-

-

选择项的字体粗细,见text组件font-weight的样式属性

-

text-decoration

-

string

-

none

-

-

选择项的文本修饰,见text组件text-decoration的样式属性

-

font-family

-

string

-

sans-serif

-

-

选择项的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-
- -## 事件 - -不支持。 - -## 方法 - -不支持。 - -## 示例 - -详见[menu示例](/pages/000b0100010208#section54636714136)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" deleted file mode 100644 index a3720389a7b255d6787665cd51de3582063dab92..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/11.picker.md" +++ /dev/null @@ -1,855 +0,0 @@ ---- -title: picker -permalink: /pages/000b010001020a -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# picker - -滑动选择器组件,类型支持普通选择器、日期选择器、时间选择器、时间日期选择器和多列文本选择器。 - -## 权限列表 - -无 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性:↵ - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

type

-

string

-

-

-

-

该属性值不支持动态修改。可选择项有:

-
  • text:文本选择器。
  • date:日期选择器。
  • time:时间选择器。
  • datetime:日期时间选择器。
  • multi-text:多列文本选择器。
-
- -普通选择器:type=text - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

range

-

Array

-

-

-

-

设置普通选择器的取值范围,如["15", "20", "25"]。

-
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:["15", "20", "25"]。

-
-

selected

-

string

-

0

-

-

设置普通选择器弹窗的默认取值,取值需要是 range 的索引值,该取值表示选择器弹窗时弹窗界面的默认选择值。

-

value

-

string

-

-

-

-

设置普通选择器的值。

-
- -日期选择器:type=date - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

start

-

<time>

-

1970-1-1

-

-

设置日期选择器的起始时间,格式为 YYYY-MM-DD。

-

end

-

<time>

-

2100-12-31

-

-

设置日期选择器的结束时间,格式为 YYYY-MM-DD。

-

selected

-

string

-

当前日期

-

-

设置日期选择器弹窗的默认取值,格式为 YYYY-MM-DD,该取值表示选择器弹窗时弹窗界面的默认选择值。

-

value

-

string

-

-

-

-

设置日期选择器的值。

-

lunar5+

-

boolean

-

false

-

-

设置日期选择器弹窗界面是否为农历展示。

-

lunarswitch

-

boolean

-

false

-

-

设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。

-
说明:

仅手机和平板设备支持。 当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。

-
-
- -时间选择器:type=time - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

containsecond

-

boolean

-

false

-

-

设置时间选择器是否包含秒。

-

selected

-

string

-

当前时间

-

-

设置时间选择器弹窗的默认取值,格式为 HH:mm;当包含秒时,格式为HH:mm:ss,

-

该取值表示选择器弹窗时弹窗界面的默认选择值。

-

value

-

string

-

-

-

-

设置时间选择器的值。

-

hours

-

number

-

241-4

-

-5+

-

-

设置时间选择器采用的时间格式,可选值:

-
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    -
    -
-
- -日期时间选择器:type=datetime,日期的选择范围为本年的日月。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

selected

-

string

-

当前日期时间

-

-

设置日期时间选择器弹窗的默认取值,格式有两种,为月日时分MM-DD-HH-mm或者年月日时分YYYY-MM-DD-HH-mm,不设置年时,默认使用当前年,该取值表示选择器弹窗时弹窗界面的默认选择值。

-

value

-

string

-

-

-

-

设置日期时间选择器的值。

-

hours

-

number

-

241-4

-

-5+

-

-

设置日期时间选择器采用的时间格式,可选值:

-
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    -
    -
-

lunar5+

-

boolean

-

false

-

-

设置日期时间选择器弹窗界面是否为农历展示。

-

lunarswitch

-

boolean

-

false

-

-

设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。

-
说明:

仅手机和平板设备支持。 当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。

-
-
- -多列文本选择器:type=multi-text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

columns

-

number

-

-

-

-

设置多列文本选择器的列数。

-

range

-

二维Array

-

-

-

-

设置多列文本选择器的选择项,其中range 为二维数组。长度表示多少列,数组的每项表示每列的数据,如 [["a","b"], ["c","d"]]。

-
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:[["a","b"], ["c","d"]]。

-
-

selected

-

Array

-

[0,0,0,…]

-

-

设置多列文本选择器弹窗的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗时弹窗界面的默认选择值。

-

value

-

Array

-

-

-

-

设置多列文本选择器的值,每一列被选中项对应的值构成的数组。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

text-color

-

<color>

-

-

-

-

选择器的文本颜色。

-

font-size

-

<length>

-

-

-

-

选择器的文本尺寸。

-

allow-scale

-

boolean

-

true

-

-

选择器的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

-
-

letter-spacing

-

<length>

-

0

-

-

选择器的字符间距。见text组件的letter-spacing样式属性

-

text-decoration

-

string

-

-

-

-

选择器的文本修饰。见text组件的text-decoration样式属性

-

font-style

-

string

-

normal

-

-

选择器的字体样式。见text组件的font-style样式属性

-

font-weight

-

number | string

-

normal

-

-

选择器的字体粗细。见text组件的font-weight样式属性

-

font-family

-

string

-

sans-serif

-

-

选择器的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

line-height

-

<length>

-

0px

-

-

选择器的文本行高。

-

column-height5+

-

<length>

-

-

-

-

选择器的选择项列表高度。

-
说明:

仅手机和平板设备支持。

-
-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - -普通选择器: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ newValue:newValue, newSelected:newSelected }

-

普通选择器选择值后点击弹窗中的确定按钮时触发该事件(newSelected为索引)。

-

cancel

-

-

-

用户点击弹窗中的取消按钮时触发该事件。

-
- -日期选择器: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ year:year, month:month, day:day }

-

日期选择器选择值后点击弹窗中的确认按钮时触发该事件。

-
说明:

month值范围为: 0(1月)~11(12月)。5+

-
-

cancel

-

-

-

用户点击弹窗中的取消按钮时触发该事件。

-
- -日期时间选择器: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ year:year, month:month, day:day, hour:hour, minute:minute}

-

日期时间选择器选择值后点击弹窗中的确认按钮时触发该事件。

-

cancel

-

-

-

用户点击弹窗中的取消按钮时触发该事件。

-
- -时间选择器: - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ hour:hour, minute:minute,

-

[second:second] }

-

时间选择器选择值后点击弹窗中的确认按钮时触发该事件,当使用时分秒时,还包含秒数据。

-

cancel

-

-

-

用户点击弹窗中的取消按钮时触发该事件。

-
- -多列文本选择器: - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ newValue:[newValue1, newValue2, newValue3, …], newSelected:[newSelected1, newSelected2, newSelected3, …] }

-

多列文本选择器选择值后点击弹窗中的确认按钮时触发该事件,其中:

-
  • newValue:被选中项对应的值构成的数组。
  • newSelected:被选中项对应的索引构成的数组,两者的长度和range的长度一致。
-

columnchange

-

{ column:column, newValue:newValue, newSelected:newSelected }

-

多列文本选择器中某一列的值改变时触发该事件,其中:

-
  • column:第几列修改。
  • newValue:选中的值。
  • newSelected:选中值对应的索引。
-

cancel

-

-

-

用户点击弹窗中的取消按钮时触发该事件。

-
- -## 方法 - -除支持[通用方法](/pages/000b0100010003)外,支持如下方法: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

show

-

-

-

显示 picker。

-
- -## 示例 - -``` - -
- - - - - - - - - -
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} -.pickertext{ - background-color: red; - width: 300; - height: 400; -} -.pickerdate{ - background-color: #BEFF5B; - width: 200; - height: 200; -} -.pickertime{ - background-color: #B764FF; - width: 500; - height: 200; -} -.pickerdatetime{ - background-color: #FF6387; - width: 100%; - height: 300; -} -.pickermuitl{ - background-color: #71FF31; -} -``` - -``` -// xxx.js -import router from '@system.router'; -import prompt from '@system.prompt'; -export default { - data: { - rangetext:['15', "20", "25"], - multitext:[["a", "b", "c"], ["e", "f", "g"], ["h", "i"], ["k", "l", "m"]], - textvalue:'default textvalue', - datevalue:'default datevalue', - timevalue:'default timevalue', - datetimevalue:'default datetimevalue', - multitextvalue:'default multitextvalue', - containsecond:true, - multitextselect:[1,2,0], - datetimeselect:'2012-5-6-11-25', - timeselect:'11:22:30', - dateselect:'2021-3-2', - textselect:'2' - }, - textonchange(e) { - this.textvalue = e.newValue; - prompt.showToast({ message:"text:"+e.newValue+",newSelected:"+e.newSelected }) - }, - textoncancel(e) { - prompt.showToast({ message:"text: textoncancel" }) - }, - dateonchange(e) { - this.datevalue = e.year + "-" + e.month + "-" + e.day; - prompt.showToast({ message:"date:"+e.year+"-"+e.month+"-"+e.day }) - }, - dateoncancel() { - prompt.showToast({ message:"date: dateoncancel" }) - }, - timeonchange(e) { - if(this.containsecond){ - this.timevalue=e.hour+":"+e.minute+":"+e.second; - prompt.showToast({ message:"时间:" + e.hour + ":" + e.minute + ":" + e.second }) - } else { - this.timevalue=e.hour+":"+e.minute; - prompt.showToast({ message:"时间:" + e.hour + ":" + e.minute }) - }}, - timeoncancel() { - prompt.showToast({ message:"timeoncancel" }) - }, - datetimeonchange(e) { - this.datetimevalue=e.year+"-"+e.month+"-"+e.day+" "+e.hour+":"+e.minute; - prompt.showToast({ message:"时间:"+e.month+"-"+e.day+" "+e.hour+":"+e.minute }) - }, - datetimeoncancel() { - prompt.showToast({ message:"datetimeoncancel" }) - }, - multitextonchange(e) { - this.multitextvalue=e.newValue; - prompt.showToast({ message:"多列文本更改" + e.newValue }) - }, - multitextoncancel() { - prompt.showToast({ message:"multitextoncancel" }) - }, - popup_picker() { - this.$element("picker_text").show(); - }, -} -``` - -**图 1** text -![](/images/application-dev/reference/arkui-js/figures/text.png "text") - -**图 2** date - - -![](/images/application-dev/reference/arkui-js/figures/date33.png) - -**图 3** time -![](/images/application-dev/reference/arkui-js/figures/time.png "time") - -**图 4** datetime -![](/images/application-dev/reference/arkui-js/figures/datetime.png "datetime") - -**图 5** multitext -![](/images/application-dev/reference/arkui-js/figures/multitext.png "multitext") - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/12.picker-view.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/12.picker-view.md" deleted file mode 100644 index 334325197a78bd7b06ac65d5fddc1e9997f0fa05..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/12.picker-view.md" +++ /dev/null @@ -1,650 +0,0 @@ ---- -title: picker-view -permalink: /pages/000b010001020b -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:37 ---- -# picker-view - -嵌入页面的滑动选择器。 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

type

-

string

-

text

-

-

设置滑动选择器的类型,该属性不支持动态修改,可选项有:

-
  • text:文本选择器。
  • time:时间选择器。
  • date:日期选择器。
  • datetime:日期时间选择器。
  • multi-text:多列文本选择器。
-
- -文本选择器:type=text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

range

-

Array

-

-

-

-

设置文本选择器的取值范围。

-
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:["15", "20", "25"]。

-
-

selected

-

string

-

0

-

-

设置文本选择器的默认选择值,该值需要为range的索引。

-

indicatorprefix

-

string

-

-

-

-

文本选择器选定值增加的前缀字段。

-

indicatorsuffix

-

string

-

-

-

-

文本选择器选定值增加的后缀字段。

-
- -时间选择器:type=time - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

containsecond

-

boolean

-

false

-

-

时间选择器是否包含秒。

-

selected

-

string

-

当前时间

-

-

设置时间选择器的默认取值,格式为 HH:mm;

-

当包含秒时,格式为HH:mm:ss。

-

hours

-

number

-

241-4

-

-5+

-

-

设置时间选择器采用的时间格式,可选值:

-
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    -
    -
-
- -日期选择器:type=date - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

start

-

<time>

-

1970-1-1

-

-

设置日期选择器的起始时间,格式为 YYYY-MM-DD。

-

end

-

<time>

-

2100-12-31

-

-

设置日期选择器的结束时间,格式为 YYYY-MM-DD。

-

selected

-

string

-

当前日期

-

-

设置日期选择器的默认选择值,格式为 YYYY-MM-DD。

-

lunar5+

-

boolean

-

false

-

-

设置日期选择器弹窗界面是否为农历展示。

-

lunarswitch

-

boolean

-

false

-

-

设置日期选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。手机生效。

-
说明:

仅手机和平板设备支持。

-
-
- -日期时间选择器:type=datetime,日期的选择范围为本年的日月。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

selected

-

string

-

当前日期时间

-

-

设置日期时间选择器的默认取值,格式有两种,为月日时分MM-DD-HH-mm或者年月日时分YYYY-MM-DD-HH-mm,不设置年时,默认使用当前年,该取值表示选择器弹窗时弹窗界面的默认选择值。

-

hours

-

number

-

241-4

-

-5+

-

-

设置日期时间选择器采用的时间格式,可选值:

-
  • 12:按照12小时制显示,用上午和下午进行区分;
  • 24:按照24小时制显示。
    说明:

    默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。5+

    -
    -
-

lunar5+

-

boolean

-

false

-

-

设置日期时间选择器弹窗界面是否为农历展示。

-

lunarswitch

-

boolean

-

false

-

-

设置日期时间选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。手机生效。

-
说明:

仅手机和平板设备支持。

-
-
- -多列文本选择器:type=multi-text - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

columns

-

number

-

-

-

-

设置多列文本选择器的列数。

-

range

-

二维Array

-

-

-

-

设置多列文本选择器的选择值,该值为二维数组。长度表示多少列,数组的每项表示每列的数据,如 [["a","b"], ["c","d"]]。

-
说明:

使用时需要使用数据绑定的方式,如range = {{data}},js中声明相应变量:data:[["a","b"], ["c","d"]]。

-
-

selected

-

Array

-

[0,0,0,…]

-

-

设置多列文本选择器的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗时弹窗界面的默认选择值。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#ffffff

-

-

候选项字体颜色。

-

font-size

-

<length>

-

16px

-

-

候选项字体尺寸,类型length,单位px。

-

selected-color

-

<color>

-

#ff0a69f7

-

-

选中项字体颜色。

-

selected-font-size

-

<length>

-

20px

-

-

选中项字体尺寸,类型length,单位px。

-

disappear-color5+

-

<color>

-

#ffffff

-

-

渐变消失项的字体颜色。消失项是在一列中有五个选项场景下最上和最下的两个选项。

-
说明:

仅手机和平板设备支持。

-
-

disappear-font-size5+

-

<length>

-

14px

-

-

渐变消失项的字体尺寸。消失项是在一列中有五个选项场景下最上和最下的两个选项。

-
说明:

仅手机和平板设备支持。

-
-

font-family

-

string

-

sans-serif

-

-

选项字体类型。字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-
- -## 事件 - -仅支持如下事件: - -type=text: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ newValue: newValue, newSelected: newSelected }

-

文本选择器选定值后触发该事件。

-
- -type=time: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ hour: hour, minute: minute, [second:second] }

-

时间选择器选定值后触发该事件。

-

包含秒时,返回时分秒。

-
- -type=date: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ year:year, month:month, day:day }

-

日期选择器选择值后触发该事件。

-
- -type=datetime: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ year:year, month:month, day:day, hour:hour, minute:minute }

-

日期时间选择器选择值后触发该事件。

-
- -type=multi-text: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

columnchange

-

{ column:column, newValue:newValue, newSelected:newSelected }

-

多列文本选择器某一列的值改变时触发该事件,column:第几列修改,newValue:选中的值,newSelected:选中值对应的索引。

-
- -## 方法 - -不支持。 - -## 示例 - -``` - -
- - Selected:{{time}} - - -
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; - left: 0px; - top: 0px; - width: 454px; - height: 454px; -} -.title { - font-size: 30px; - text-align: center; -} -.time-picker { - width: 500px; - height: 400px; - margin-top: 20px; -} -``` - -``` -/* xxx.js */ -export default { - data: { - defaultTime: "", - time: "", - }, - onInit() { - this.defaultTime = this.now(); - }, - handleChange(data) { - this.time = this.concat(data.hour, data.minute); - }, - now() { - const date = new Date(); - const hours = date.getHours(); - const minutes = date.getMinutes(); - return this.concat(hours, minutes); - }, - - fill(value) { - return (value > 9 ? "" : "0") + value; - }, - - concat(hours, minutes) { - return `${this.fill(hours)}:${this.fill(minutes)}`; - }, -} -``` - -![](/images/application-dev/reference/arkui-js/figures/sssssss.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" deleted file mode 100644 index b5e0dd70750b7aabfae335be7220e3ded92597e4..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/18.search.md" +++ /dev/null @@ -1,308 +0,0 @@ ---- -title: search -permalink: /pages/000b0100010211 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# search - -提供搜索框组件,用于提供用户搜索内容的输入区域。 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

icon

-

string

-

-

-

-

搜索图标,默认使用系统搜索图标,图标格式为svg,jpg和png。

-

hint

-

string

-

-

-

-

搜索提示文字。

-

value

-

string

-

-

-

-

搜索框搜索文本值。

-

searchbutton5+

-

string

-

-

-

-

搜索框末尾搜索按钮文本值。

-

menuoptions5+

-

Array<MenuOption>

-

-

-

-

设置文本选择弹框点击更多按钮之后显示的菜单项。

-
- -**表 1** MenuOption5+ - - - - - - - - - - - - - - - - -

名称

-

类型

-

描述

-

icon

-

string

-

菜单选项中的图标路径。

-

content

-

string

-

菜单选项中的文本内容。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e6000000

-

-

搜索框的文本颜色。

-

font-size

-

<length>

-

16px

-

-

搜索框的文本尺寸。

-

allow-scale

-

boolean

-

true

-

-

搜索框的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

-
-

placeholder-color

-

<color>

-

#99000000

-

-

搜索框的提示文本颜色。

-

font-weight

-

number | string

-

normal

-

-

搜索框的字体粗细,见text组件font-weight的样式属性

-

font-family

-

string

-

sans-serif

-

-

搜索框的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

caret-color6+

-

<color>

-

-

-

-

设置输入光标的颜色。

-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ text:newText }

-

输入内容发生变化时触发。

-
说明:

改变value属性值不会触发该回调。

-
-

submit

-

{ text:submitText }

-

点击搜索图标、搜索按钮5+或者按下软键盘搜索按钮时触发。

-

translate5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

-

share5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

-

search5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

-

optionselect5+

-

{ index:optionIndex, value: selectedText }

-

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

-
- -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -``` - -
- - -
-``` - -``` -/* xxx.css */ -.container { - display: flex; - justify-content: center; - align-items: center; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001153427082.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" deleted file mode 100644 index 0ce48217b58ad2c07d23c9e3dc98a8f018b47155..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/20.slider.md" +++ /dev/null @@ -1,294 +0,0 @@ ---- -title: slider -permalink: /pages/000b0100010213 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# slider - -滑动条组件,用来快速调节设置值,如音量、亮度等。 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

min

-

number

-

0

-

-

滑动选择器的最小值。

-

max

-

number

-

100

-

-

滑动选择器的最大值。

-

step

-

number

-

1

-

-

每次滑动的步长。

-

value

-

number

-

0

-

-

滑动选择器的初始值。

-

mode5+

-

string

-

outset

-

-

滑动条样式:

-
  • outset:滑块在滑杆上;
  • inset:滑块在滑杆内。
    说明:

    仅手机和平板设备支持。

    -
    -
-

showsteps5+

-

boolean

-

false

-

-

是否显示步长标识;

-
说明:

仅手机和平板设备支持。

-
-

showtips5+

-

boolean

-

false

-

-

滑动时是否有气泡提示百分比;

-
说明:

仅手机和平板设备支持。

-
-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#19000000

-

-

滑动条的背景颜色。

-

selected-color

-

<color>

-

#ff007dff

-

-

滑动条的已选择颜色。

-

block-color

-

<color>

-

#ffffff

-

-

滑动条的滑块颜色。

-
说明:

仅手机、平板和智慧屏设备支持。

-
-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

ChangeEvent

-

选择值发生变化时触发该事件。

-
- -**表 1** ChangeEvent - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

说明

-

progress(deprecated5+)

-

string

-

当前slider的进度值。

-

isEnd(deprecated5+)

-

string

-

当前slider是否拖拽结束,可选值为:

-
  • true:slider拖拽结束。
  • false:slider拖拽中。
-

value5+

-

number

-

当前slider的进度值。

-

mode5+

-

string

-

当前change事件的类型,可选值为:

-
  • start:slider的值开始改变。
  • move:slider的值跟随手指拖动中。
  • end:slider的值结束改变。
-
- -## 示例 - -``` - -
- slider start value is {{startValue}} - slider current value is {{currentValue}} - slider end value is {{endValue}} - -
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} -``` - -``` -// xxx.js -export default { - data: { - value: 0, - startValue: 0, - currentValue: 0, - endValue: 0, - }, - setvalue(e) { - if (e.mode == "start") { - this.value = e.value; - this.startValue = e.value; - } else if (e.mode == "move") { - this.value = e.value; - this.currentValue = e.value; - } else if (e.mode == "end") { - this.value = e.value; - this.endValue = e.value; - } - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/slider.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" deleted file mode 100644 index c9cb3720ab0e946b22d51f9dfe64c06bcd399e6d..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/21.span.md" +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: span -permalink: /pages/000b0100010214 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# span - -作为<[text](/pages/000b0100010216)\>子组件提供文本修饰能力。 - -## 权限列表 - -无 - -## 子组件 - -支持子组件。 - -## 属性 - -支持[通用属性](/pages/000b0100010000)。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持focusable和disabled属性。 - -## 样式 - -仅支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

-

-

-

设置文本段落的文本颜色。

-

font-size

-

<length>

-

30px

-

-

设置文本段落的文本尺寸。

-

allow-scale

-

boolean

-

true

-

-

设置文本段落的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

-
-

font-style

-

string

-

normal

-

-

设置文本段落的字体样式,见text组件font-style的样式属性

-

font-weight

-

number | string

-

normal

-

-

设置文本段落的字体粗细,见text组件font-weight的样式属性

-

text-decoration

-

string

-

none

-

-

设置文本段落的文本修饰,见text组件text-decoration样式属性

-

font-family

-

string

-

sans-serif

-

-

设置文本段落的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-
- -## 事件 - -仅支持[通用事件](/pages/000b0100010002)中的click事件。 - -## 方法 - -不支持。 - -## 示例 - -``` - -
- - span - -
-``` - -``` -/* xxx.css */ -.container { - display: flex; - justify-content: center; - align-items: center; -} -.title { - font-size: 30px; - text-align: center; - width: 100%; - height: 100px; -} -.spanTxt{ - color: chartreuse; - font-size: 100px; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001152588626.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" deleted file mode 100644 index cb9171b4e09ada33bfa21a837489a860f252c05f..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/23.text.md" +++ /dev/null @@ -1,418 +0,0 @@ ---- -title: text -permalink: /pages/000b0100010216 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# text - -文本,用于呈现一段信息。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->文本的展示内容需要写在元素标签内。 - -## 权限列表 - -无 - -## 子组件 - -支持<[span](/pages/000b0100010214)\>。 - -## 属性 - -支持[通用属性](/pages/000b0100010000)。 - -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e5000000

-

-

设置文本的颜色。

-

font-size

-

<length>

-

30px

-

-

设置文本的尺寸。

-

allow-scale

-

boolean

-

true

-

-

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果需要支持动态生效,请参看config描述文件中config-changes标签。

-
-

letter-spacing

-

<length>

-

0px

-

-

设置文本的字符间距。

-

word-spacing7+

-

<length> | <percentage> | string

-

normal

-

-

设置文本之间的间距,string可选值为:

-

normal:默认的字间距。

-

font-style

-

string

-

normal

-

-

设置文本的字体样式,可选值为:

-
  • normal:标准的字体样式;
  • italic:斜体的字体样式。
-

font-weight

-

number | string

-

normal

-

-

设置文本的字体粗细,number类型取值[100, 900],默认为400,取值越大,字体越粗。

-
说明:

number取值必须为100的整数倍。

-
-

string类型取值支持如下四个值:lighter、normal、bold、bolder。

-

text-decoration

-

string

-

none

-

-

设置文本的文本修饰,可选值为:

-
  • underline:文字下划线修饰;
  • line-through:穿过文本的修饰线n
  • none:标准文本。
-

text-decoration-color7+

-

<color>

-

-

-

-

设置文本修饰线的颜色。

-

text-align

-

string

-

start

-

-

设置文本的文本对齐方式,可选值为:

-
  • left:文本左对齐;
  • center:文本居中对齐;
  • right:文本右对齐;
  • start:根据文字书写相同的方向对齐;
  • end:根据文字书写相反的方向对齐。
-
说明:

如文本宽度未指定大小,文本的宽度和父容器的宽度大小相等的情况下,对齐效果可能会不明显。

-
-

line-height

-

<length> | <percentage>7+ | string7+

-

0px1-6

-

normal7+

-

-

设置文本的文本行高,设置为0px时,不限制文本行高,自适应字体大小。string可选值为:

-

normal7+:默认的行高。

-

text-overflow

-

string

-

clip

-

-

在设置了最大行数的情况下生效,可选值为:

-
  • clip:将文本根据父容器大小进行裁剪显示;
  • ellipsis:根据父容器大小显示,显示不下的文本用省略号代替。需配合max-lines使用。
-

font-family

-

string

-

sans-serif

-

-

设置文本的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

max-lines

-

number | string7+

-

-

-

-

设置文本的最大行数,string类型可选值为:

-
  • auto7+:文本行数自适应容器高度。
-

min-font-size

-

<length>

-

-

-

-

文本最小字号,需要和文本最大字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

-

max-font-size

-

<length>

-

-

-

-

文本最大字号,需要和文本最小字号同时设置,支持文本字号动态变化。设置最大最小字体样式后,font-size不生效。

-

font-size-step

-

<length>

-

1px

-

-

文本动态调整字号时的步长,需要设置最小,最大字号样式生效。

-

prefer-font-sizes

-

<array>

-

-

-

-

预设的字号集合,在动态尺寸调整时,优先使用预设字号集合中的字号匹配设置的最大行数,如果预设字号集合未设置,则使用最大最小和步长调整字号。针对仍然无法满足最大行数要求的情况,使用text-overflow设置项进行截断,设置预设尺寸集后,font-size、max-font-size、min-font-size和font-size-step不生效。

-

如:prefer-font-sizes: 12px,14px,16px

-

word-break6+

-

string

-

normal

-

-

设置文本折行模式,可选值为:

-
  • normal:默认换行规则,依据各自语言的规则,允许在字间发生换行。
  • break-all:对于非中文/日文/韩文的文本,可在任意字符间断行。
  • break-word:与break-all相同,不同的地方在于它要求一个没有断行破发点的词必须保持为一个整体单位。
-

text-indent7+

-

<length>

-

-

-

-

设置首行缩进量。

-

white-space7+

-

string

-

pre

-

-

设置处理元素中空白的模式,可选值为:

-
  • normal:所有空格、回车、制表符都合并成一个空格,文本自动换行;
  • nowrap:所有空格、回车、制表符都合并成一个空格,文本不换行;
  • pre:所有东西原样输出,文本不换行;
  • pre-wrap:所有东西原样输出,文本换行;
  • pre-line:所有空格、制表符合并成一个空格,回车不变,文本换行。
-

adapt-height7+

-

boolean

-

false

-

-

文本大小是否自适应容器高度。

-
说明:

设置字体大小自适应相关样式后生效。

-
-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 字体动态缩放:预设尺寸集合和最小最大字号调节基于是否满足最大行数要求,预设尺寸集合会按照从左到右顺序查看是否满足最大行数要求,最小最大字号调节则基于从大到小顺序查看是否满足最大行数要求。 ->- 文本换行:文本可以通过转义字符\\r\\n进行换行。 ->- 文本标签内支持以下转义字符:\\a,\\b,\\f,\\n,\\r,\\t,\\v,\\',\\",\\0。 ->- 当使用子组件span组成文本段落时,如果span属性样式异常,将导致text段落无法显示。 ->- letter-spacing、text-align、line-height、text-overflow和max-lines样式作用于text及其子组件(span)组成的文本内容。 ->- text组件说明:不支持text内同时存在文本内容和span子组件。(如果同时存在,只显示span内的内容\) - -## 事件 - -支持[通用事件](/pages/000b0100010002)。 - -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -``` - -
-
- - Hello {{ title }} - -
-
-``` - -``` -/* xxx.css */ -.container { - display: flex; - justify-content: center; - align-items: center; -} -.content{ - width: 400px; - height: 400px; - border: 20px; - border-image-source: url("/common/images/landscape.jpg"); - border-image-slice: 20px; - border-image-width: 30px; - border-image-outset: 10px; - border-image-repeat: round; -} -.title { - font-size: 80px; - text-align: center; - width: 400px; - height: 400px; -} -``` - -``` -// xxx.js -export default { - data: { - title: 'World' - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/3.png) - -``` - -
- - This is a passage - - - This is a passage - -
-``` - -``` -/* xxx.css */ -.container { - flex-direction: column; - align-items: center; - background-color: #F1F3F5; - justify-content: center; -} -.text1{ - word-spacing: 10px; - adapt-height: true; -} -.text2{ - width: 200px; - max-lines: 1; - text-overflow: ellipsis; - text-valign: middle; - line-height: 40px; - text-decoration: underline; - text-decoration-color: red; - text-indent: 20px; - white-space: pre; -} -``` - -![](/images/application-dev/reference/arkui-js/figures/2.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" deleted file mode 100644 index 40eeea1b179a95abb85d65740d41dac0ed76bde3..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/24.textarea.md" +++ /dev/null @@ -1,386 +0,0 @@ ---- -title: textarea -permalink: /pages/000b0100010217 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# textarea - -多行文本输入的文本框。 - -## 权限列表 - -无 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

placeholder

-

string

-

-

-

-

多行文本框的提示文本内容。

-

maxlength

-

number

-

-

-

-

多行文本框可输入的最多字符数量。

-

headericon

-

string

-

-

-

-

在文本输入前的图标展示,该图标不支持点击事件,图标格式为jpg,png和svg。

-

extend

-

boolean

-

false

-

-

文本框是否支持可扩展,设置可扩展属性后文本框高度可以跟随文字自适应。

-

value5+

-

string

-

-

-

-

多行文本框的内容。

-

showcounter5+

-

boolean

-

false

-

-

文本框是否需要开启计数下标功能,需要配合maxlength一起使用。

-

menuoptions5+

-

Array<MenuOption>

-

-

-

-

设置文本选择弹框点击更多按钮之后显示的菜单项。

-

autofocus6+

-

boolean

-

false

-

-

是否自动获焦。

-

selectedstart6+

-

number

-

-1

-

-

开始选择文本时初始选择位置。

-

selectedend6+

-

number

-

-1

-

-

开始选择文本时结尾选择位置。

-

softkeyboardenabled6+

-

boolean

-

true

-

-

编辑时是否弹出系统软键盘。

-
- -**表 1** MenuOption5+ - - - - - - - - - - - - - - - - -

名称

-

类型

-

描述

-

icon

-

string

-

菜单选项中的图标路径。

-

content

-

string

-

菜单选项中的文本内容。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e6000000

-

-

多行文本框的文本颜色。

-

font-size

-

<length>

-

16px

-

-

多行文本框的文本尺寸。

-

allow-scale

-

boolean

-

true

-

-

多行文本框的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-
说明:

如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。

-
-

placeholder-color

-

<color>

-

#99000000

-

-

多行文本框的提示文本颜色,type为text|email|date|time|number|password时生效。

-

font-weight

-

number | string

-

normal

-

-

多行文本框的字体粗细,见text组件font-weight的样式属性

-

font-family

-

string

-

sans-serif

-

-

多行文本框的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

caret-color6+

-

<color>

-

-

-

-

设置输入光标的颜色。

-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

change

-

{ text: newText, lines: textLines, height: textHeight }

-

输入内容发生变化时触发该事件,通过参数获取输入内容、行数和行高。

-
说明:

改变value属性值不会触发该回调。5+

-
-

translate5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现翻译按钮,点击翻译按钮之后,触发该回调,返回选中的文本内容。

-

share5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现分享按钮,点击分享按钮之后,触发该回调,返回选中的文本内容。

-

search5+

-

{ value: selectedText }

-

设置此事件后,进行文本选择操作后文本选择弹窗会出现搜索按钮,点击搜索按钮之后,触发该回调,返回选中的文本内容。

-

optionselect5+

-

{ index:optionIndex, value: selectedText }

-

文本选择弹窗中设置menuoptions属性后,用户在文本选择操作后,点击菜单项后触发该回调,返回点击的菜单项序号和选中的文本内容。

-

selectchange6+

-

{ start: number,end: number }

-

文本选择变化时触发事件。

-
- -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -``` - - -``` - -``` -/* xxx.css */ -.textarea { - placeholder-color: gray; -} -``` - -``` -// xxx.js -change(e){ - prompt.showToast({ - message: 'value: ' + e.text + ', lines: ' + e.lines + ', height: ' + e.height, - duration: 3000, - }); -} -``` - -![](/images/application-dev/reference/arkui-js/figures/zh-cn_image_0000001127125124.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" deleted file mode 100644 index 93f11f48b99c70ca749057516425362a5cfa6cd7..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/03.\345\237\272\347\241\200\347\273\204\344\273\266/26.toolbar-item.md" +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: toolbar-item -permalink: /pages/000b0100010219 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# toolbar-item - -工具栏子组件。作为工具栏组件的子组件,用于展示工具栏上的一个操作选项。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - -## 子组件 - -无 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

value

-

string

-

-

-

-

该操作项文本内容。

-

icon

-

string

-

-

-

-

该操作项图标资源路径,该图标展示在选项文本上,支持本地路径,格式为png,jpg和svg。

-
- -## 样式 - -仅支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

color

-

<color>

-

#e6000000

-

-

文本颜色。

-

font-size

-

<length>

-

16px

-

-

文本大小。

-

allow-scale

-

boolean

-

true

-

-

文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。

-

font-style

-

string

-

normal

-

-

文本字体样式,可选值为:

-
  1. normal: 标准的字体样式;
  2. italic: 斜体的字体样式。
-

font-weight

-

number|string

-

normal

-

-

文本字体粗细,number类型取值[100, 900]的整数(被100整除),默认为400,取值越大,字体越粗。string类型取值为:lighter、normal、bold、bolder。

-

text-decoration

-

string

-

none

-

-

文本修饰,可选值为:

-
  1. underline: 文本下划线修饰;
  2. line-through: 穿过文本的修饰线;
  3. none: 标准文本。
-

font-family

-

string

-

sans-serif

-

-

字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过自定义字体指定的字体,会被选中作为文本的字体。

-

background

-

<linear-gradient>

-

-

-

-

仅支持设置渐变样式,与background-color、background-image不兼容。

-

background-color

-

<color>

-

-

-

-

设置背景颜色。

-

background-image

-

string

-

-

-

-

设置背景图片。与background-color、background不兼容;支持网络图片资源和本地图片资源地址。

-

background-size

-
  • string
  • <length> <length>
  • <percentage> <percentage>
-

auto

-

-

设置背景图片的大小。

-
  • string可选值:
    • contain:把图像扩展至最大尺寸,以使其高度和宽度完全适用内容区域。
    • cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域;背景图像的某些部分也许无法显示在背景定位区域中。
    • auto:保持原图的比例不变。
    -
  • length值参数方式:

    设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
  • 百分比参数方式:

    以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"。

    -
-

background-repeat

-

string

-

repeat

-

-

针对重复背景图像样式进行设置,背景图像默认在水平和垂直方向上重复。

-
  • repeat:在水平轴和竖直轴上同时重复绘制图片。
  • repeat-x:只在水平轴上重复绘制图片。
  • repeat-y:只在竖直轴上重复绘制图片。
  • no-repeat:不会重复绘制图片。
-

background-position

-
  • string string
  • <length> <length>
  • <percentage> <percentage>
-

0px 0px

-

-
  • 关键词方式:如果仅规定了一个关键词,那么第二个值为"center"。两个值分别定义水平方向位置和竖直方向位置。
    • left:水平方向上最左侧。
    • right:水平方向上最右侧。
    • top:竖直方向上最顶部。
    • bottom:竖直方向上最底部。
    • center:水平方向或竖直方向上中间位置。
    -
-
  • length值参数方式:第一个值是水平位置,第二个值是垂直位置。 左上角是 0 0。单位是像素 (0px 0px) 。如果仅规定了一个值,另外一个值将是50%。
  • 百分比参数方式:第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果仅规定了一个值,另外一个值为50%。
  • 可以混合使用<percentage>和<length>。
-

opacity

-

number

-

1

-

-

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。

-

display

-

string

-

-

flex

-

-

确定一个元素所产生的框的类型,可选值为:

-
  • flex:弹性布局。
  • none:不渲染此元素。
-

visibility

-

string

-

-

visible

-

-

是否显示元素所产生的框。不可见的框会占用布局(将'display'属性设置为'none'来完全去除框),可选值为:

-
  • visible:元素正常显示。
  • hidden:隐藏元素,但是其他元素的布局不改变,相当于此元素变成透明。
-
说明:

visibility和display样式都设置时,仅display生效。

-
-
- -## 事件 - -支持[通用事件](/pages/000b0100010002)。 - -## 方法 - -不支持。 - -## 示例 - -``` - - - - - - - - -``` - -![](/images/application-dev/reference/arkui-js/figures/000000.jpg) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" deleted file mode 100644 index 6e1d95a6e9d64060e01862c82cecb7715013e70e..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/04.\345\252\222\344\275\223\347\273\204\344\273\266/01.video.md" +++ /dev/null @@ -1,250 +0,0 @@ ---- -title: video -permalink: /pages/000b0100010300 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:38 ---- -# video - -视频播放组件。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 需要在config.json配置 -> ``` -> "configChanges": ["orientation"] -> ``` - -## 权限列表 - -## 子组件 - -不支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

muted

-

boolean

-

false

-

-

视频是否静音播放。

-

src

-

string

-

-

-

-

播放视频内容的路径。

-

autoplay

-

boolean

-

false

-

-

视频是否自动播放。

-

controls

-

boolean

-

true

-

-

控制视频播放的控制栏是否显示,如果设置为false,则不显示控制栏。默认为true,由系统决定显示或隐藏控制栏。

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

object-fit

-

string

-

contain

-

-

视频源的缩放类型,如果poster设置了值,那么此配置还会影响视频海报的缩放类型,可选值参考表1

-
- -**表 1** object-fit 类型说明 - - - - - - - - - - -

类型

-

描述

-

fill

-

不保持宽高比进行放大缩小,使得图片填充满显示边界。

-
- -## 事件 - -除支持[通用事件](/pages/000b0100010002)外,还支持如下事件: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

prepared

-

{ duration: value }5+

-

视频准备完成时触发该事件,通过duration可以获取视频时长,单位为s。

-

start

-

-

-

播放时触发该事件。

-

pause

-

-

-

暂停时触发该事件。

-

finish

-

-

-

播放结束时触发该事件。

-

error

-

-

-

播放失败时触发该事件。

-

seeking

-

{ currenttime: value }

-

操作进度条过程时上报时间信息,单位为s。

-

seeked

-

{ currenttime: value }

-

操作进度条完成后,上报播放时间信息,单位为s。

-

timeupdate

-

{ currenttime: value }

-

播放进度变化时触发该事件,单位为s,更新时间间隔为250ms。

-
- -## 方法 - -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

start

-

-

-

请求播放视频。

-

pause

-

-

-

请求暂停播放视频。

-

setCurrentTime

-

{ currenttime: value }

-

指定视频播放的进度位置,单位为s。

-
- diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" deleted file mode 100644 index 6ddb311d7ff3a64ebfef1904c7ef61dddb74bad1..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/02.grid-container.md" +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: grid-container -permalink: /pages/000b0100010501 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# grid-container - -栅格布局容器根节点,使用grid-row与grid-col进行栅格布局。 - -## 权限列表 - -无 - -## 子组件 - -仅支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

columns

-

string | number

-

auto

-

-

设置当前布局总列数,使用string类型时仅支持auto,配置为auto时按照当前的sizetype决定总列数:

-
  • xs:2列
  • sm:4列
  • md:8列
  • lg:12列
-

sizetype

-

string

-

auto

-

-

设置当前栅格使用的响应尺寸类型,支持xs, sm, md, lg类型,使用auto时按照当前容器大小自动选择xs, sm, md, lg类型。

-

gutter

-

<length>

-

24px

-

-

设置Gutter宽度

-

gridtemplate6+

-

string

-

default

-

-

当设置了columns和sizetype属性为auto时,可以设置栅格容器的布局模板,通过布局模块设置不同响应尺寸下的Columns、Gutters和Margins,详见可选值说明

-
- -**表 1** gridtemplate可选值说明6+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  

模板值

-

可响应的栅格断点系统

-

Columns

-

Margins(px)

-

Gutters(px)

-

默认栅格

-

default

-

xs

-

2

-

12

-

12

-

sm

-

4

-

24

-

24

-

md

-

8

-

32

-

24

-

lg

-

12

-

48

-

24

-

宫格布局栅格

-

grid

-

sm(0<设备水平分辨率<600px)

-

4

-

24

-

12

-

md

-

8

-

32

-

12

-

lg

-

12

-

48

-

12

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 本章中px单位是在js标签中配置了autoDesignWidth为true。6+ - -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

justify-content

-

string

-

flex-start

-

-

flex容器当前行的主轴对齐格式。可选项有:

-
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
-

align-items

-

string

-

stretch

-

-

flex容器当前行的交叉轴对齐格式,可选值为:

-
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
-

align-content

-

string

-

flex-start

-

-

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

-
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
-
- -## 事件 - -支持[通用事件](/pages/000b0100010002)。 - -## 方法 - -除支持[通用方法](/pages/000b0100010003)外,还支持如下方法: - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数

-

描述

-

getColumns

-

-

-

返回栅格容器列数

-

getColumnWidth

-

-

-

返回栅格容器column宽度

-

getGutterWidth

-

-

-

返回栅格容器gutter宽度

-

getSizeType

-

-

-

返回当前容器响应尺寸类型(xs|sm|md|lg)

-
- -## 示例 - -详见[grid-col示例](/pages/000b0100010503#section2021865273710)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" deleted file mode 100644 index 59638fd1970bf4d124023741890b7cf03701ade8..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/03.grid-row.md" +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: grid-row -permalink: /pages/000b0100010502 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# grid-row - -grid-row是栅格布局容器grid-container的子容器组件,使用flex横向布局,排列每个grid-col容器,justify-content与align-items默认为flex-start,支持折行显示。 - -## 权限列表 - -无 - -## 子组件 - -仅支持。 - -## 属性 - -支持[通用属性](/pages/000b0100010000)。 - -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

flex-wrap

-

string

-

nowrap

-

-

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

-
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。
-

justify-content

-

string

-

flex-start

-

-

flex容器当前行的主轴对齐格式。可选项有:

-
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
-

align-items

-

string

-

flex-start

-

-

flex容器当前行的交叉轴对齐格式,可选值为:

-
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
-

align-content

-

string

-

flex-start

-

-

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

-
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持宽度相关样式。 - -## 事件 - -支持[通用事件](/pages/000b0100010002)。 - -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -详见[grid-col示例](/pages/000b0100010503#section2021865273710)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" deleted file mode 100644 index 670a832126a1afdf731408769c984ed15525d4ea..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/06.\346\240\205\346\240\274\347\273\204\344\273\266/04.grid-col.md" +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: grid-col -permalink: /pages/000b0100010503 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# grid-col - -grid-col是栅格布局容器grid-row的子容器组件。 - -## 权限列表 - -无 - -## 子组件 - -支持。 - -## 属性 - -除支持[通用属性](/pages/000b0100010000)外,还支持如下属性: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

xs

-

number|object

-

-

-

-

在分辨率为xs模式下,设置该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

-

sm

-

number|object

-

-

-

-

在分辨率为sm模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

-

md

-

number|object

-

-

-

-

在分辨率为md模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

-

lg

-

number|object

-

-

-

-

在分辨率为lg模式下,该项占用列数与偏移列数,当值为number类型时,仅设置列数,也可通过object同时设置占用列数与偏移列数,如{"span": 1, "offset": 0}

-

span

-

number

-

1

-

-

在未设置明确断点时,默认占用列数

-

offset

-

number

-

0

-

-

未设置具体分辨率模式下偏移时,当前元素延容器布局方向,默认偏移的列数

-
- -## 样式 - -除支持[通用样式](/pages/000b0100010001)外,还支持如下样式: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

flex-direction

-

string

-

row

-

-

flex容器主轴方向。可选项有:

-
  • column:垂直方向从上到下
  • row:水平方向从左到右
-

flex-wrap

-

string

-

nowrap

-

-

flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:

-
  • nowrap:不换行,单行显示。
  • wrap:换行,多行显示。
-

justify-content

-

string

-

flex-start

-

-

flex容器当前行的主轴对齐格式。可选项有:

-
  • flex-start:项目位于容器的开头。
  • flex-end:项目位于容器的结尾。
  • center:项目位于容器的中心。
  • space-between:项目位于各行之间留有空白的容器内。
  • space-around:项目位于各行之前、之间、之后都留有空白的容器内。
-

align-items

-

string

-

stretch

-

-

flex容器当前行的交叉轴对齐格式,可选值为:

-
  • stretch:弹性元素被在交叉轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:元素向交叉轴起点对齐。
  • flex-end:元素向交叉轴终点对齐。
  • center:元素在交叉轴居中。
-

align-content

-

string

-

flex-start

-

-

交叉轴中有额外的空间时,多行内容对齐格式,可选值为:

-
  • flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。
  • flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。
  • center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。
  • space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。
  • space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。
-

display

-

string

-

flex

-

-

确定该元素视图框的类型,该值暂不支持动态修改。可选值为:

-
  • flex:弹性布局
  • grid:网格布局
  • none:不渲染此元素
-

grid-template-[columns|rows]

-

string

-

1行1列

-

-

用于设置当前网格布局行和列的数量,不设置时默认1行1列,仅当display为grid时生效。

-

示例:如设置grid-template-columns为:

-

(1) 50px 100px 60px:分三列,第一列50px,第二列100px,第三列60px;

-

(2) 1fr 1fr 2fr:分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份;

-

(3) 30% 20% 50%:分三列,将父组件允许的宽为基准,第一列占30%,第二列占20%,第三列占50%;

-

(4) repeat(2,100px):分两列,第一列100px,第二列100px;

-

(5) auto 1fr 1fr:分三列,第一列自适应内部子组件所需宽度,剩余空间分为两等份,第二列占一份,第三列占一份。

-

grid-[columns|rows]-gap

-

<length>

-

0

-

-

用于设置行与行的间距或者列与列的间距,也可以支持通过grid-gap设置相同的行列间距,仅当display为grid时生效。

-

grid-row-[start|end]

-

number

-

-

-

-

用于设置当前元素在网格布局中的起止行号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

-

grid-column-[start|end]

-

number

-

-

-

-

用于设置当前元素在网格布局中的起止列号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持宽度相关样式。 - -## 事件 - -支持[通用事件](/pages/000b0100010002)。 - -## 方法 - -支持[通用方法](/pages/000b0100010003)。 - -## 示例 - -``` - -
- - - -
- 內容元素 -
-
- -
- 內容元素 -
-
-
-
-
-``` - -``` -/* index.css */ -.container { - flex-direction: column; - padding-top: 80px; -} -``` - -``` -// index.js -import prompt from '@system.prompt'; -export default { - getCol(e) { - this.$element('mygrid').getColumns(function (result) { - prompt.showToast({ - message: e.target.id + ' result = ' + result, - duration: 3000, - }); - }) - }, - getColWidth(e) { - this.$element('mygrid').getColumnWidth(function (result) { - prompt.showToast({ - message: e.target.id + ' result = ' + result, - duration: 3000, - }); - }) - } -} -``` - -![](/images/application-dev/reference/arkui-js/figures/44.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" deleted file mode 100644 index 12d7687bc97aea080b83b16db315924903ac9779..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/02.\347\273\204\344\273\266/07.svg\347\273\204\344\273\266/01.\351\200\232\347\224\250\345\261\236\346\200\247.md" +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: 通用属性 -permalink: /pages/000b0100010600 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 通用属性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

类型

-

默认值

-

必填

-

描述

-

fill

-

<color>

-

black

-

-

使用简写属性设置元素的填充色。支持属性动画。

-

fill-opacity

-

number

-

1

-

-

填充色的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

-

fill-rule

-

nonzero | evenodd

-

nonzero

-

-

nonzero:非零规则; evenodd:奇偶规则

-

opacity

-

number

-

1

-

-

元素的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画。

-

stroke

-

<color>

-

-

-

-

设置形状轮廓的颜色。支持属性动画。

-

stroke-dasharray

-

<string>

-

-

-

-

指定短划线和缺口的长度。格式为[length length length length],短划线和缺口的长度中间空格隔开成对出现。

-

stroke-dashoffset

-

<length>

-

0

-

-

设置关联虚线数组渲染时的偏移量。支持属性动画

-

stroke-linejoin

-

[bevel | miter | round]

-

miter

-

-

进行描边时在路径的拐角处使用的形状。

-

bevel:使用斜角连接路径段;

-

miter:使用尖角连接路径段;

-

round:使用圆角连接路径段。

-

stroke-linecap

-

[butt | round | square]

-

butt

-

-

路径描边时在它们的结尾处使用的形状。

-

butt:不在路径两端扩展;

-

round:在路径的末端延伸半个圆,直径等于线度。

-

square:在路径的末端延伸半个圆,宽度等于线宽的一半,高度等于线宽。

-

stroke-miterlimit

-

number

-

4

-

-

设置将锐角绘制成斜角的极限值。支持属性动画

-

stroke-opacity

-

number

-

1

-

-

轮廓线条的透明度,取值范围为0到1,1表示为不透明,0表示为完全透明。支持属性动画

-

stroke-width

-

<length>

-

1px

-

-

设置轮廓线条的宽度。支持属性动画

-

transform

-

<string>

-

-

-

-

设置组件以及子组件的坐标变换参数。

-

支持以下格式:

-

translate(<x> [<y>]) :沿x[y]轴方向平移

-

scale(<x> [<y>]) :沿x[y]轴缩放

-

rotate(<a> [<x> <y>]) :以(x,y)点进行旋转a度角

-

skewX(<a>) :沿x轴倾斜a度角的变换

-

skewY(<a>) :沿y轴倾斜a度角的变换

-
- diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" deleted file mode 100644 index 4e7cd9b540d92c2ae537db2d062a2a6709129de9..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/01.\345\237\272\344\272\216JS\346\211\251\345\261\225\347\232\204\347\261\273Web\345\274\200\345\217\221\350\214\203\345\274\217/03.\350\207\252\345\256\232\344\271\211\347\273\204\344\273\266/06.\347\224\237\345\221\275\345\221\250\346\234\237\345\256\232\344\271\211.md" +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: 生命周期定义 -permalink: /pages/000b01000205 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 生命周期定义 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->从API Version 5 开始支持。 - -我们为自定义组件提供了一系列生命周期回调方法,便于开发者管理自定义组件的内部逻辑。生命周期主要包括:onInit,onAttached,onDetached,onLayoutReady,onDestroy,onPageShow和onPageHide。下面我们依次介绍一下各个生命周期回调的时机。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性

-

类型

-

描述

-

触发时机

-

onInit

-

Function

-

初始化自定义组件

-

自定义组件初始化生命周期回调,当自定义组件创建时,触发该回调,主要用于自定义组件中必须使用的数据初始化,该回调只会触发一次调用。

-

onAttached

-

Function

-

自定义组件装载

-

自定义组件被创建后,加入到Page组件树时,触发该回调,该回调触发时,表示组件将被进行显示,该声明周期可用于初始化显示相关数据,通常用于加载图片资源、开始执行动画等场景。。

-

onLayoutReady

-

Function

-

自定义组件布局完成

-

自定义组件插入Page组件树后,将会对自定义组件进行布局计算,调整其内容元素尺寸与位置,当布局计算结束后触发该回调。

-

onDetached

-

Function

-

自定义组件摘除

-

自定义组件摘除时,触发该回调,常用于停止动画或异步逻辑停止执行的场景。

-

onDestroy

-

Function

-

自定义组件销毁

-

自定义组件销毁时,触发该回调,常用于资源释放。

-

onPageShow

-

Function

-

自定义组件Page显示

-

自定义组件所在Page显示后,触发该回调。

-

onPageHide

-

Function

-

自定义组件Page隐藏

-

自定义组件所在Page隐藏后,触发该回调。

-
- -## 示例 - -``` - -
- {{value}} -
-``` - -``` -//comp.js -export default { - data: { - value: "组件创建" - }, - onInit() { - console.log("组件创建") - }, - onAttached() { - this.value = "组件挂载" - }, - onDetached() { - this.value = "" - }, - onPageShow() { - console.log("Page显示") - }, - onPageHide() { - console.log("Page隐藏") - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" deleted file mode 100644 index c502ce1fbb88a996f6077527a564045d9b4ed586..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/01.\346\226\207\344\273\266\347\273\204\347\273\207/01.\347\233\256\345\275\225\347\273\223\346\236\204.md" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 目录结构 -permalink: /pages/000b0101000000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 目录结构 - -FA应用的ets模块\(entry/src/main\)的典型开发目录结构如下: - -![](/images/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001182200571.png) - -**目录结构中文件分类如下:** - -- .ets结尾的ETS(Extended TypeScript)文件,这个文件用于描述UI布局、样式、事件交互和页面逻辑。 - -**各个文件夹和文件的作用:** - -- **app.ets**文件用于全局应用逻辑和应用生命周期管理。 -- **pages**目录用于存放所有组件页面。 -- **common**目录用于存放公共代码文件,比如:自定义组件和公共方法。 - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 页面支持导入TypeScript和JavaScript文件。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" deleted file mode 100644 index 5f574c06cdfa3569c26d98cfa33db345806f209a..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/02.js\346\240\207\347\255\276\351\205\215\347\275\256.md" +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: js标签配置 -permalink: /pages/000b01010001 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# js标签配置 - -开发框架需要应用的[config.json](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-config-file-overview-0000000000011951)中配置相关的js标签,其中包含了实例名称、页面路由、视图窗口配置信息。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

标签

-

类型

-

默认值

-

必填

-

描述

-

name

-

string

-

default

-

-

标识ETS实例的名字。

-

pages

-

Array

-

-

-

-

页面路由信息,详见pages说明。

-

window

-

Object

-

-

-

-

视图窗口配置信息,详见window说明。

-

mode

-

Object

-

-

-

-

配置Js Component运行类型与语法风格,详见mode说明。

-
- -## pages - -定义每个页面入口组件的路由信息,每个页面由页面路径和页面名组成,页面的文件名就是页面名。比如: - -``` -{ - "pages": [ - "pages/index", - "pages/detail" - ] -} -``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- pages列表中第一个页面为应用的首页入口。 ->- 页面文件名不能使用组件名称,比如:Text.ets、Button.ets等。 ->- 每个页面文件中必须包含[页面入口组件](/pages/000b010101010201)\(@Entry装饰\)。 - -## window - -window用于配置相关视图显示窗口,支持配置如下属性: - - - - - - - - - - - - -

类型

-

默认值

-

说明

-

designWidth

-

-

-

配置视图显示的逻辑宽度,缺省默认720(智能穿戴默认454)。视图显示的逻辑宽度决定了lpx像素单位大小,如designWidth配置720时,在视图宽度为1440物理像素时,1lpx为2物理像素。详见lpx像素单位说明。

-
- -``` -{ - ... - "window": { - "designWidth": 720 - } - ... -} -``` - -## mode - -mode用于配置JS Component的运行类型与语法风格,支持如下属性: - - - - - - - - - - - - - - - - -

类型

-

默认值

-

说明

-

type

-

-

-

配置该JS Component的运行类型,可选值为:

-
  • pageAbility:以ability的方式运行该JS Component。
  • form:以卡片的方式运行该JS Component。
-

syntax

-

-

-

配置该JS Component的语法风格,可选值为:

-
  • hml:以hml/css/js风格进行编写。
  • ets:以声明式语法风格进行编写。
-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 不支持同时配置type类型为form,syntax类型为ets。 - -## 示例 - -config.json: - -``` -{ - "app": { - "bundleName": "com.example.player", - "version": { - "code": 1, - "name": "1.0" - }, - "vendor": "example" - }, - "module": { - "js": [{ - "name": "default", - "pages": [ - "pages/index", - "pages/detail" - ], - "window": { - "designWidth": 720 - }, - "mode": { - "type": "pageAbility", - "syntax": "ets" - }, - }], - "abilities": [{ - ... - }] - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" deleted file mode 100644 index b0a15a0093eed8dc0b3f14899d03acd94fd7685e..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/03.\350\265\204\346\272\220\350\256\277\351\227\256/01.\345\252\222\344\275\223\350\265\204\346\272\220\347\261\273\345\236\213\350\257\264\346\230\216.md" +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 媒体资源类型说明 -permalink: /pages/000b0101000200 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 媒体资源类型说明 - -- 开发框架支持的图片资源类型说明 - - - - - - - - - - - - - - - - - - - - - - - - - -

格式

-

文件后缀名

-

JPEG

-

.jpg

-

PNG

-

.png

-

GIF

-

.gif

-

SVG

-

.svg

-

WEBP

-

.webp

-

BMP

-

.bmp

-
- - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" deleted file mode 100644 index c2a3c0916f37d4cc5e7761a6b36345cef3055b96..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/04.\345\203\217\347\264\240\345\215\225\344\275\215.md" +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: 像素单位 -permalink: /pages/000b01010003 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 像素单位 - -为开发者提供4种像素单位,框架采用vp为基准数据单位。 - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

px

-

屏幕物理像素单位。

-

vp

-

屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素。

-

fp

-

字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。

-

lpx

-

视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值。如配置designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。

-
- -## 像素单位转换 - -提供其他单位与px单位互相转换的方法。 - - - - - - - - - - - - - - - - - - - - - - - - - -

接口

-

描述

-

vp2px(value : number) : number

-

将vp单位的数值转换为以px为单位的数值。

-

px2vp(value : number) : number

-

将px单位的数值转换为以vp为单位的数值。

-

fp2px(value : number) : number

-

将fp单位的数值转换为以px为单位的数值。

-

px2fp(value : number) : number

-

将px单位的数值转换为以fp为单位的数值。

-

lpx2px(value : number) : number

-

将lpx单位的数值转换为以px为单位的数值。

-

px2lpx(value : number) : number

-

将px单位的数值转换为以lpx为单位的数值。

-
- -## 示例 - -``` -@Entry -@Component -struct Example { - build() { - Column() { - Flex({ wrap: FlexWrap.Wrap }) { - Column() { - Text("width(220)") - .width(220).height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') - }.margin(5) - Column() { - Text("width('220px')") - .width('220px').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White) - }.margin(5) - Column() { - Text("width('220vp')") - .width('220vp').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') - }.margin(5) - Column() { - Text("width('220lpx') designWidth:720") - .width('220lpx').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') - }.margin(5) - Column() { - Text("width(vp2px(220) + 'px')") - .width(vp2px(220) + 'px').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12vp') - }.margin(5) - Column() { - Text("fontSize('12fp')") - .width(220).height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White).fontSize('12fp') - }.margin(5) - }.width('100%') - } - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/像素单位.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" deleted file mode 100644 index 0ddf17a4dadc026ed0714fff60a3cb42cbd47b7f..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/01.\346\241\206\346\236\266\350\257\264\346\230\216/05.\347\261\273\345\236\213\345\256\232\344\271\211.md" +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: 类型定义 -permalink: /pages/000b01010004 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 类型定义 - -## 长度类型 - - - - - - - - - - - - -

名称

-

类型定义

-

描述

-

Length

-

string | number

-

用于描述尺寸单位,输入为number类型时,使用vp单位;输入为string类型时,需要显式指定像素单位,如'10px',也可设置百分比字符串,如'100%'。

-
- -## 角度类型 - - - - - - - - - - - - -

名称

-

类型定义

-

描述

-

Angle

-

string | number

-

用于角度单位,输入为number类型时,使用deg单位;输入为string类型时需要显示指定角度单位,支持以下两种角度单位:

-
  • deg:如'100deg'。
  • rad:如'3.14rad'。
-
- -## 点类型 - - - - - - - - - - - - -

名称

-

类型定义

-

描述

-

Point

-

[Length, Length]

-

用于描述点坐标,第一个值为x轴坐标,第二个值为y坐标。

-
- -## 颜色类型 - -组件属性方法使用的颜色Color说明如下: - - - - - - - - - - - - -

名称

-

类型定义

-

描述

-

Color

-

string | number | Color

-

用于描述颜色信息,输入为string类型时,使用rgb或者rgba进行描述;输入为number类型是,使用HEX格式颜色;输入类型为Color枚举时,使用颜色枚举值。

-
  • 'rgb(255, 255, 255)'。
  • 'rgba(255, 255, 255, 1.0)'。
  • HEX格式:0xrrggbb,0xaarrggbb,'#FFFFFF'。
  • 枚举格式:Color.Black,Color.White等。
-
- -当前支持的Color颜色枚举: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

颜色名称

-

颜色值

-

颜色示意

-

Black

-

0x000000

-

-

Blue

-

0x0000ff

-

-

Brown

-

0xa52a2a

-

-

Gray

-

0x808080

-

-

Green

-

0x008000

-

-

Orange

-

0xffa500

-

-

Pink

-

0xffc0cb

-

-

Red

-

0xff0000

-

-

White

-

0xffffff

-

-

Yellow

-

0xffff00

-

-
- -## ColorStop类型 - -颜色断点类型,用于描述渐进色颜色断点。 - - - - - - - - - - - - -

名称

-

类型定义

-

描述

-

ColorStop

-

[Color, number]

-

描述渐进色颜色断点类型,第一个参数为颜色值,第二个参数为0~1之间的比例值。

-
- -## 示例 - -``` -@Entry -@Component -struct dataTypeExample { - build() { - Column({ space: 5 }) { - Text('Length').fontColor(0xCCCCCC).fontSize(9).width('90%') - Text('90%').width('90%').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White) - Text('320').width(320).height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White) - Text('1000px').width('1000px').height(40).backgroundColor(0xF9CF93) - .textAlign(TextAlign.Center).fontColor(Color.White) - - Text('Angle').fontColor(0xCCCCCC).fontSize(9).width('90%') - Text('45deg') - .width(40).height(40) - .rotate({ x: 0, y: 0, z: 1, angle: 45, centerX: '50%', centerY: '50%' }) - .fontColor(Color.White) - .backgroundColor(0xF9CF93).textAlign(TextAlign.Center) - - Text('45rad') - .width(40).height(40) - .rotate({ x: 0, y: 0, z: 1, angle: '45rad', centerX: '50%', centerY: '50%' }) - .fontColor(Color.White) - .backgroundColor(0xF9CF93).textAlign(TextAlign.Center).margin({ top: 30 }) - - Text('Point').fontColor(0xCCCCCC).fontSize(9).width('90%') - Line().width(300).height(40).startPoint([0, 20]).endPoint([300, 20]) - - Text('Color').fontColor('#CCCCCC').fontSize(9).width('90%') - Text('0xF9CF93') - .fontColor(Color.White).textAlign(TextAlign.Center) - .width('90%').height(40).backgroundColor(0xF9CF93) - - Text('#F9CF93') - .fontColor(Color.White).textAlign(TextAlign.Center) - .width('90%').height(40).backgroundColor('#F9CF93') - - Text('rgb(249, 207, 147)') - .fontColor(Color.White).textAlign(TextAlign.Center) - .width('90%').height(40).backgroundColor('rgb(249, 207, 147)') - - Text('rgba(249, 207, 147, 1.0)') - .fontColor(Color.White).textAlign(TextAlign.Center) - .width('90%').height(40).backgroundColor('rgba(249, 207, 147, 1.0)') - - Text('Color.Yellow') - .textAlign(TextAlign.Center) - .width('90%').height(40).backgroundColor(Color.Yellow) - } - .width('100%').margin({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/datatype.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" deleted file mode 100644 index baa50ce882f3509e9822f8ad3ee3462652206df5..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/02.\351\200\232\347\224\250UI\346\217\217\350\277\260\350\247\204\350\214\203/02.\345\243\260\346\230\216\345\274\217UI\346\217\217\350\277\260\350\247\204\350\214\203/03.\345\261\236\346\200\247\351\205\215\347\275\256.md" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: 属性配置 -permalink: /pages/000b010101010102 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 属性配置 - -使用属性方法配置组件的属性。属性方法紧随组件,并用“**.**”运算符连接。 - -配置**Text**组件的字体大小属性示例: - -``` -Text('123') - .fontSize(12) -``` - -此外,您还可以使用“**.**”操作进行链式调用并同时配置组件的多个属性。 - -您可以同时配置**Image**组件的多个属性,如下所示: - -``` -Image('a.jpg') - .alt('error.jpg') - .width(100) - .height(100) -``` - -除了直接传递常量参数外,还可以传递变量或表达式,如下所示: - -``` -// Size, count, and offset are private variables defined in the component. -Text('hello') - .fontSize(this.size) -Image('a.jpg') - .width(this.count % 2 === 0 ? 100 : 200) - .height(this.offset + 100) -``` - -对于内置组件,框架还为其属性预定义了一些枚举类型,供开发人员调用,枚举值可以作为参数传递。 - -枚举类型必须满足参数类型要求,有关特定属性的枚举类型定义的详细信息。 - -您可以按以下方式配置**Text**组件的颜色和字重属性: - -``` -Text('hello') - .fontSize(20) - .fontColor(Color.Red) - .fontWeight(FontWeight.Bold) -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" deleted file mode 100644 index 96d47d711dcf8cdf1ea4e7b57d8a07bbdafb4c12..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/03.UI\347\212\266\346\200\201\347\256\241\347\220\206/04.\345\205\266\344\273\226\347\261\273\347\233\256\347\232\204\347\212\266\346\200\201\347\256\241\347\220\206/01.Observed\345\222\214ObjectLink\346\225\260\346\215\256\347\256\241\347\220\206.md" +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Observed和ObjectLink数据管理 -permalink: /pages/000b010101020300 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# Observed和ObjectLink数据管理 - -@observed是用来class的修饰器,表示此对象中的数据变更将被UI页面管理。@objectLink用来修饰被@observed装饰的变量。 - -``` -// 需要监控的对象 -@Observed class ClassA { - static nextID : number = 0; - public id : number; - public c: number; - - constructor(c: number) { - this.id = ClassA.nextID++; - this.c = c; - } -} - -@Observed class ClassB { - public a: ClassA; - - constructor(a: ClassA) { - this.a = a; - } -} -``` - -``` -@Component -struct ViewA { - @ObjectLink a : ClassA; - label : string = "ViewA1"; - build() { - Row() { - Button(`ViewA [${this.label}] this.a.c=${this.a.c} +1`) - .onClick(() => { - this.a.c += 1; - }) - Button(`ViewA [${this.label}] reset this.a =new ClassA(0)`) - .onClick(() => { - this.a = new ClassA(0); // ERROR, this.a is immutable - }) - } - } -} - -@Entry -@Component -struct ViewB { - @State b : ClassB = new ClassB(new ClassA(0)); - - build() { - Column() { - ViewA({label: "ViewA #1", a: this.b.a}) - ViewA({label: "ViewA #2", a: this.b.a}) - - Button(`ViewB: this.b.a = new ClassA(0)`) - .onClick(() => { - this.b.a = new ClassA(0); - }) - Button(`ViewB: this.b = new ClassB(ClassA(0))`) - .onClick(() => { - this.b = new ClassB(new ClassA(0)); - }) - } - } -} -``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->@ObjectLink用于修饰变量,并且不可以初始化。@Observed用于修饰类。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" deleted file mode 100644 index a7a543590e3d6cff2404d54657ab80fd3280b504..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/04.\346\270\262\346\237\223\346\216\247\345\210\266\350\257\255\346\263\225/03.\346\225\260\346\215\256\346\207\222\345\212\240\350\275\275.md" +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: 数据懒加载 -permalink: /pages/000b0101010302 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 数据懒加载 - -开发框架提供**LazyForEach**组件按需迭代数据,并在每次迭代过程中创建相应的组件。**LazyForEach**定义如下: - -``` -interface DataChangeListener { - onDataReloaded(): void; // Called while data reloaded - onDataAdded(index: number): void; // Called while single data added - onDataMoved(from: number, to: number): void; // Called while single data moved - onDataDeleted(index: number): void; // Called while single data deleted - onDataChanged(index: number): void; // Called while single data changed -} -interface IDataSource { - totalCount(): number; // Get total count of data - getData(index: number): any; // Get single data by index - registerDataChangeListener(listener: DataChangeListener): void; // Register listener to listening data changes - unregisterDataChangeListener(listener: DataChangeListener): void; // Unregister listener -} -LazyForEach( - dataSource: IDataSource, // Data source to be iterated - itemGenerator: (item: any) => void, // child component generator - keyGenerator?: (item: any) => string // (optional) Unique key generator, which is recommended. -): void -``` - ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- 通过LazyForEach的onDataChanged更新数据时,如果itemGenerator里面包含一个全静态(此view中不包含状态变量)的view,此view将不会更新 ->- 数据懒加载组件使用LazyForEach从提供的数据源中自动生成子组件; ->- 必须在容器组件内使用,且仅有List、Grid以及Swiper组件支持数据的按需加载(即只加载可视部分以及其前后少量数据用于缓冲),其他组件仍然是一次加载所有数据; ->- 第一个参数必须是继承自IDataSource的对象,需要开发者实现相关接口; ->- 第二个参数用于生成子组件的lambda函数。它为给定数组项生成一个或多个子组件。单个组件和子组件列表必须括在大括号“**\{....\}**”中; ->- 可选的第三个参数是用于键值生成的匿名函数。它为给定数组项生成唯一且稳定的键值。当子项在数组中的位置更改时,子项的键值不得更改,当数组中的子项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的。但是,出于性能原因,强烈建议提供,这使开发框架能够更好地识别数组更改。如单击进行数组反向时,如果没有提供键值生成器,则ForEach中的所有节点都将重建。 ->- 生成的子组件必须允许在**LazyForEach**的父容器组件中,允许**LazyForEach**包含在**if/else**条件渲染语句中。 ->- **LazyForEach**在每次迭代中,必须创建一个且只允许创建一个子组件。 ->- **ForEach**不允许作为**LazyForEach**的子组件,**LazyForEach**也不支持嵌套。 ->- **LazyForEach**中不允许出现**if/else**条件渲染语句。 ->- 子项生成器函数的调用顺序不一定和数据源中的数据项相同,在开发过程中不要假设子项生成器和键值生成器函数是否执行以及执行顺序。如下示例可能无法正常工作: -> ``` -> ForEach(dataSource, item => {Text(`${++counter}. item.label`)}) -> ``` -> 正确的示例如下: -> ``` -> ForEach(dataSource, -> item => Text(`${item.i}. item.data.label`)), -> item => item.data.id.toString()) -> ``` - -## 示例 - -``` -// Basic implementation of IDataSource to handle data listener -class BasicDataSource implements IDataSource { - private listeners: DataChangeListener[] = [] - - public totalCount(): number { - return 0 - } - public getData(index: number): any { - return undefined - } - - registerDataChangeListener(listener: DataChangeListener): void { - if (this.listeners.indexOf(listener) < 0) { - console.info('add listener') - this.listeners.push(listener) - } - } - unregisterDataChangeListener(listener: DataChangeListener): void { - const pos = this.listeners.indexOf(listener); - if (pos >= 0) { - console.info('remove listener') - this.listeners.splice(pos, 1) - } - } - - notifyDataReload(): void { - this.listeners.forEach(listener => { - listener.onDataReloaded() - }) - } - notifyDataAdd(index: number): void { - this.listeners.forEach(listener => { - listener.onDataAdded(index) - }) - } - notifyDataChange(index: number): void { - this.listeners.forEach(listener => { - listener.onDataChanged(index) - }) - } - notifyDataDelete(index: number): void { - this.listeners.forEach(listener => { - listener.onDataDeleted(index) - }) - } - notifyDataMove(from: number, to: number): void { - this.listeners.forEach(listener => { - listener.onDataMoved(from, to) - }) - } -} - -class MyDataSource extends BasicDataSource { - private dataArray: string[] = ['/path/image0', '/path/image1', '/path/image2', '/path/image3'] - - public totalCount(): number { - return this.dataArray.length - } - public getData(index: number): any { - return this.dataArray[index] - } - - public addData(index: number, data: string): void { - this.dataArray.splice(index, 0, data) - this.notifyDataAdd(index) - } - public pushData(data: string): void { - this.dataArray.push(data) - this.notifyDataAdd(this.dataArray.length - 1) - } -} - -@Entry -@Component -struct MyComponent { - private data: MyDataSource = new MyDataSource() - build() { - List({space: 3}) { - LazyForEach(this.data, (item: string) => { - ListItem() { - Row() { - Image(item).width("30%").height(50) - Text(item).fontSize(20).margin({left:10}) - }.margin({left: 10, right: 10}) - } - .onClick(()=>{ - this.data.pushData('/path/image' + this.data.totalCount()) - }) - }, item => item) - } - } -} -``` - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" deleted file mode 100644 index 009a991f94bea3630ad8565d4df83449e86213fa..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/01.\347\202\271\345\207\273\344\272\213\344\273\266.md" +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: 点击事件 -permalink: /pages/000b010102000000 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:39 ---- -# 点击事件 - - - - - - - - - - - - -

名称

-

支持冒泡

-

功能描述

-

onClick(callback: (event?: ClickEvent) => void)

-

-

点击动作触发该方法调用,event参数见ClickEvent介绍。

-
- -- ClickEvent对象说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性名称

-

属性类型

-

描述

-

screenX

-

number

-

点击点相对于设备屏幕左边沿的X坐标。

-

screenY

-

number

-

点击点相对于设备屏幕上边沿的Y坐标。

-

x

-

number

-

点击点相对于被点击元素左边沿的X坐标。

-

y

-

number

-

点击点相对于被点击元素上边沿的Y坐标。

-

timestamp

-

number

-

事件时间戳。

-
- - -## 示例 - -``` -@Entry -@Component -struct ClickExample { - @State text: string = '' - - build() { - Column() { - Button('Click').backgroundColor(0x2788D9) - .onClick((event: ClickEvent) => { - console.info(this.text = 'Button clicked!\n X:' + event.x + '\n' + ' Y:' + event.y) - }) - Text(this.text).padding(15) - }.height(300).width('100%').padding(35) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/Click.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" deleted file mode 100644 index f463e47c5711ffaf4e53b8dd49405ed0987418eb..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/01.\351\200\232\347\224\250\344\272\213\344\273\266/04.\346\214\211\351\224\256\344\272\213\344\273\266.md" +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: 按键事件 -permalink: /pages/000b010102000003 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# 按键事件 - - - - - - - - - - - - -

名称

-

支持冒泡

-

功能描述

-

onKeyEvent(event: (event?: KeyEvent) => void)

-

-

按键动作触发该方法调用,event参数见KeyEvent介绍。

-
- -## KeyEvent对象说明 - -- 属性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性名称

-

属性类型

-

描述

-

type

-

KeyType

-

按键的类型。

-

keyCode

-

number

-

按键的键码。

-

keyText

-

string

-

按键的键值。

-

keySource

-

KeySource

-

触发当前按键的输入设备类型。

-

deviceId

-

number

-

触发当前按键的输入设备ID。

-

metaKey

-

number

-

按键发生时元键的状态,1表示按压态,0表示未按压态。

-

timestamp

-

number

-

按键发生时的时间戳。

-
- - -- 接口 - - - - - - - - - - -

接口名称

-

功能描述

-

stopPropagation(): void

-

阻塞事件冒泡传递。

-
- -- KeyType枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Down

-

按键按下。

-

Up

-

按键松开。

-
- - -- KeySource枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Unknown

-

输入设备类型未知。

-

Keyboard

-

输入设备类型为键盘。

-
- -- 常用KeyCode说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

数值

-

行为

-

物理按键

-

19

-

-

向上方向键。

-

20

-

-

向下方向键。

-

21

-

-

向左方向键。

-

22

-

-

向右方向键。

-

23

-

确定

-

遥控器的确认键。

-

66

-

确定

-

键盘的回车键。

-

160

-

确定

-

键盘的小键盘回车键。

-
- - -## 示例 - -``` -@Entry -@Component -struct KeyEventExample { - @State text: string = '' - @State eventType: string = '' - - build() { - Column() { - Button('KeyEvent').backgroundColor(0x2788D9) - .onKeyEvent((event: KeyEvent) => { - if (event.type === KeyType.Down) { - this.eventType = 'Down' - } - if (event.type === KeyType.Up) { - this.eventType = 'Up' - } - console.info(this.text = 'KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText) - }) - Text(this.text).padding(15) - }.height(300).width('100%').padding(35) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/KeyEvent.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" deleted file mode 100644 index 01c2080943caa60ebd6d78269a4bd34d0cb26d1d..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/01.\345\260\272\345\257\270\350\256\276\347\275\256.md" +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: 尺寸设置 -permalink: /pages/000b010102000100 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# 尺寸设置 - -设置组件尺寸相关信息。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数说明

-

默认值

-

描述

-

width

-

Length

-

-

-

设置组件自身的宽度,缺省时使用元素自身内容需要的宽度。

-

height

-

Length

-

-

-

设置组件自身的高度,缺省时使用元素自身内容需要的高度。

-

size

-

{

-

width?: Length,

-

height?: Length

-

}

-

-

-

设置高宽尺寸。

-

padding

-

{

-

top?: Length,

-

right?: Length,

-

bottom?: Length,

-

left?: Length

-

} | Length

-

0

-

设置内边距属性。

-

参数为Length类型时,四个方向内边距同时生效。

-

margin

-

{

-

top?: Length,

-

right?: Length,

-

bottom?: Length,

-

left?: Length

-

}

-

| Length

-

0

-

设置外边距属性。

-

参数为Length类型时,四个方向外边距同时生效。

-

constraintSize

-

{

-

minWidth?: Length,

-

maxWidth?: Length,

-

minHeight?: Length,

-

maxHeight?: Lenght

-

}

-

{

-

minWidth: 0,

-

maxWidth: Infinity,

-

minHeight: 0,

-

maxHeight: Infinity

-

}

-

设置约束尺寸,组件布局时,进行尺寸范围限制。

-

layoutWeight

-

number

-

0

-

容器尺寸确定时,元素与兄弟节点主轴布局尺寸按照权重进行分配,忽略本身尺寸设置。

-
说明:

仅在Row/Column/Flex布局中生效。

-
-
- -## 示例 - -``` -@Entry -@Component -struct SizeExample { - build() { - Column({ space: 10 }) { - Text('margin and padding:').fontSize(12).fontColor(0xCCCCCC).width('90%') - // 宽度80 ,高度80 ,内外边距20 - Row() { - Row() { - Row().size({ width: '100%', height: '100%' }).backgroundColor(0xAFEEEE) - }.width(80).height(80).padding(20).margin(20).backgroundColor(0xFDF5E6) - }.backgroundColor(0xFFA500) - - Text('layoutWeight').fontSize(12).fontColor(0xCCCCCC).width('90%') - // 容器尺寸确定时,元素与兄弟节点主轴布局尺寸按照权重进行分配,忽略本身尺寸设置。 - Row() { - // 权重1 - Text('layoutWeight(1)') - .size({ width: '30%', height: 110 }).backgroundColor(0xFFEFD5).textAlign(TextAlign.Center) - .layoutWeight(1) - // 权重0 - Text('layoutWeight(2)') - .size({ width: '30%', height: 110 }).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center) - .layoutWeight(2) - // 权重默认0 - Text('no layoutWeight') - .size({ width: '30%', height: 110 }).backgroundColor(0xD2B48C).textAlign(TextAlign.Center) - }.size({ width: '90%', height: 140 }).backgroundColor(0xAFEEEE) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/size.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" deleted file mode 100644 index 65ad26b47e3db3f90a3bff97d12cfc7784573505..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/12.\345\233\276\345\275\242\345\217\230\346\215\242.md" +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: 图形变换 -permalink: /pages/000b01010200010b -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# 图形变换 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

描述

-

rotate

-

{

-

x?: number,

-

y?: number,

-

z?: number,

-

angle?: Angle,

-

centerX?: Length,

-

centerY?: Length

-

}

-

{

-

x: 0,

-

y: 0,

-

z: 0,

-

angle: 0,

-

centerX: '50%',

-

centerY: '50%'

-

}

-

(x, y, z)指定一个矢量,表示旋转轴,正角度为顺时针转动,负角度为逆时针转动,默认值为0,同时可以通过centerX和centerY设置旋转的中心点。

-

translate

-

{

-

x?: Length,

-

y?: Length,

-

z? : Length

-

}

-

{

-

x: 0,

-

y: 0,

-

z: 0

-

}

-

可以分别设置X轴、Y轴、Z轴的平移距离,距离的正负控制平移的方向,默认值为0。

-

scale

-

{

-

x?: number,

-

y?: number,

-

z?: number,

-

centerX?: Length,

-

centerY?: Length

-

}

-

{

-

x: 1,

-

y: 1,

-

z: 1,

-

centerX:'50%',

-

centerY:'50%'

-

}

-

可以分别设置X轴、Y轴、Z轴的缩放比例,默认值为1,同时可以通过centerX和centerY设置缩放的中心点。

-

transform

-

matrix: Matrix4

-

-

-

设置当前组件的变换矩阵。

-
- -## 示例 - -``` -import Matrix4 from '@ohos.matrix4' - -@Entry -@Component -struct TransformExample { - build() { - Column() { - Text('rotate').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) - Row() - .rotate({ - x: 1, - y: 1, - z: 1, - centerX: '50%', - centerY: '50%', - angle: 300 - }) // 组件以(1,1,1)为旋转轴,中心点顺时针旋转 300度 - .width(100).height(100).backgroundColor(0xAFEEEE) - - Text('translate').width('90%').fontColor(0xCCCCCC).padding(10).fontSize(30) - Row() - .translate({ x: 100, y: 5 }) // x轴平移100,y轴平移5 - .width(100).height(100).backgroundColor(0xAFEEEE).margin({bottom:10}) - - Text('scale').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) - Row() - .scale({ x: 2, y: 0.5 }) // 高度缩小一倍,宽度放大一倍,z轴在2D下无效果 - .width(100).height(100).backgroundColor(0xAFEEEE) - - Text('Matrix4').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(30) - Row() - .width(100).height(100).backgroundColor(0xAFEEEE) - .transform(Matrix4.identity().translate({ x: 100, y: 100, z: 30 })) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/1111.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" deleted file mode 100644 index 9a9d1481d26983853fca29c2fe8a0eb6b57b9753..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/17.\351\242\234\350\211\262\346\270\220\345\217\230.md" +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: 颜色渐变 -permalink: /pages/000b010102000110 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# 颜色渐变 - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

描述

-

linearGradient

-

{

-

angle?: Angle,

-

direction?:GradientDirection,

-

colors: Array<ColorStop>

-

repeating?: boolean

-

}

-

-

-

线性渐变。

-

angle: 线性渐变的角度。

-

direction: 线性渐变的方向。

-

colors: 为渐变的颜色描述。

-

repeating: 为渐变的颜色重复着色。

-

sweepGradient

-

{

-

center: Point,

-

start?: angle,

-

end?: angle,

-

colors: Array<ColorStop>

-

repeating?: boolean

-

}

-

-

-

角度渐变。

-

center:为角度渐变的中心点。

-

start:角度渐变的起点。

-

end:角度渐变的终点。

-

colors: 为渐变的颜色描述。

-

repeating: 为渐变的颜色重复着色。

-

radialGradient

-

{

-

center: Point,

-

radius: Length,

-

colors: Array<ColorStop>

-

repeating: boolean

-

}

-

-

-

径向渐变。

-

center:径向渐变的中心点。

-

radius:径向渐变的半径。

-

colors: 为渐变的颜色描述。

-

repeating: 为渐变的颜色重复着色。

-
- -- GradientDirection枚举说明 - - GradientDirection用于描述渐变方向。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

Left

-

从右向左。

-

Top

-

从下向上。

-

Right

-

从左向右。

-

Bottom

-

从上向下。

-

LeftTop

-

左上。

-

LeftBottom

-

左下。

-

RightTop

-

右上。

-

RightBottom

-

右下。

-

None

-

无。

-
- - -## 示例 - -``` -@Entry -@Component -struct ColorGradientExample { - build() { - Column({ space: 5 }) { - Text('linearGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) - Row() - .width('90%') - .height(50) - .linearGradient({ - angle: 90, - direction: GradientDirection.Left, - colors: [[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] - }) - Text('sweepGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) - Row() - .width(100) - .height(100) - .sweepGradient({ - center: [50, 50], - start: 0, - end: 359, - colors: [[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] - }) - Text('radialGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) - Row() - .width(100) - .height(100) - .radialGradient({ - center: [50, 50], - radius: 60, - colors:[[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]] - }) - } - .width('100%') - .padding({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/colorGradient.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" deleted file mode 100644 index 067125f4fec76633b2bb896e3df49680bee02458..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/02.\351\200\232\347\224\250\345\261\236\346\200\247/18.Popup\346\216\247\345\210\266.md" +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Popup控制 -permalink: /pages/000b010102000111 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# Popup控制 - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

参数描述

-

bindPopup

-

{

-

show: boolean,

-

popup: {

-

message: string,

-

placementOnTop: boolean,

-

primaryButton?: {

-

value: string,

-

action: ()=>void

-

},

-

secondaryButton?:{

-

value: string,

-

action: () =>void

-

},

-

onStateChange?: (isVisible: boolean) => void

-

}

-

}

-

-

-

show: 当前弹窗提示是否显示,默认值为false。

-

message: 弹窗信息内容。

-

placementOnTop:是否在组件上方显示,默认值为false。

-

primaryButton: 第一个按钮。

-

secondaryButton: 第二个按钮。

-

onStateChange: 弹窗状态变化事件回调,参数为弹窗当前的显示状态。

-
- -## 示例 - -``` -@Entry -@Component -struct PopupExample { - @State noHandlePopup: boolean = false - @State handlePopup: boolean = false - - build() { - Column({ space: 160 }) { - Button('no handle popup') - .onClick(() => { - this.noHandlePopup = !this.noHandlePopup - }) - .bindPopup(this.noHandlePopup, { - - message: 'content content content ...', - placementOnTop: false, - onStateChange: (e) => { - console.info(e.isVisible.toString()) - if (!e.isVisible) { - this.noHandlePopup = false - } - } - }) - - Button('with handle popup') - .onClick(() => { - this.handlePopup = !this.handlePopup - }) - .bindPopup(this.handlePopup, { - - message: 'content content content ...', - placementOnTop: true, - secondaryButton: { - - value: 'ok', - action: () => { - this.handlePopup = !this.handlePopup - console.info('secondaryButton click') - } - }, - onStateChange: (e) => { - console.info(e.isVisible.toString()) - } - }) - }.width('100%').padding({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/popup.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" deleted file mode 100644 index 5e50fe586beb50c857dfd827adfafbbef5dbb722..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/01.\351\200\232\347\224\250/03.\346\211\213\345\212\277\345\244\204\347\220\206/01.\347\273\221\345\256\232\346\211\213\345\212\277\346\226\271\346\263\225.md" +++ /dev/null @@ -1,260 +0,0 @@ ---- -title: 绑定手势方法 -permalink: /pages/000b010102000200 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# 绑定手势方法 - -可以通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。 - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

描述

-

gesture

-

gesture: GestureType,

-

mask?: GestureMask

-

gesture: -,

-

mask: GestureMask.Normal

-

绑定手势识别。

-

gesture: 绑定的手势类型, mask: 事件响应设置。

-

priorityGesture

-

gesture: GestureType,

-

mask?: GestureMask

-

gesture: -,

-

mask: GestureMask.Normal

-

绑定优先识别手势。

-

gesture: 绑定的手势类型, mask: 事件响应设置。

-
说明:
  • 默认情况下,子组件优先于父组件识别手势,当父组件配置priorityGesture时,父组件优先于子组件进行识别。
-
-

parallelGesture

-

gesture: GestureType,

-

mask?: GestureMask

-

gesture: -,

-

mask: GestureMask.Normal

-

绑定可与子组件手势同时触发的手势。

-

gesture: 绑定的手势类型, mask: 事件响应设置。

-
说明:
  • 手势事件为非冒泡事件。父组件设置parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。
-
-
- -- GestureMask枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Normal

-

不屏蔽子组件的手势,按照默认手势识别顺序进行识别。

-

IgnoreInternal

-

屏蔽子组件的手势,仅当前容器的手势进行识别。

-
说明:
  • 子组件上系统内置的手势不会被屏蔽,如子组件为List组件时,内置的滑动手势仍然会触发。
-
-
- - -- 系统提供如下Gesture类型 - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

TapGesture

-

点击手势,支持单次点击、多次点击识别。

-

LongPressGesture

-

长按手势。

-

PanGesture

-

平移手势。

-

PinchGesture

-

捏合手势。

-

RotationGesture

-

旋转手势。

-

GestureGroup

-

手势识别组,多种手势组合为复合手势,支持连续识别、并行识别和互斥识别。

-
- - -## 响应手势事件 - -组件通过gesture方法绑定手势对象,可以通过手势对象提供的事件相应响应手势操作。如通过TapGesture对象的onAction事件响应点击事件。具体事件定义见各个手势对象章节。 - -- TapGesture事件说明 - - - - - - - - - - -

名称

-

功能描述

-

onAction((event?: GestureEvent) => void)

-

Tap手势识别成功回调。

-
- - -- GestureEvent对象说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

属性名称

-

属性类型

-

描述

-

repeat

-

boolean

-

事件是否为重复触发事件,用于LongPressGesture场景。

-

offsetX

-

number

-

手势事件偏移量,用于PanGesture手势触发场景,单位为vp。

-

offsetY

-

number

-

手势事件偏移量,用于PanGesture手势触发场景,单位为vp。

-

scale

-

number

-

缩放比例,用于PinchGesture手势触发场景。

-

pinchCenterX

-

number

-

捏合手势中心点X轴坐标,用于PinchGesture手势触发场景,单位为px。

-

pinchCenterY

-

number

-

捏合手势中心点Y轴坐标,用于PinchGesture手势触发场景,单位为px。

-

angle

-

number

-

旋转角度,用于RotationGesture手势触发场景。

-

timestamp

-

number

-

事件时间戳。

-
- - -## 示例 - -``` -@Entry -@Component -struct GestureSettingsExample { - @State value: string = '' - - build() { - Column() { - Text('Click\n' + this.value).gesture(TapGesture() - .onAction(() => { - this.value = 'gesture onAction' - })) - }.height(200).width(300).padding(60).border({ width: 1 }).margin(30) - //设置为priorityGesture时,会优先识别该绑定手势忽略内部gesture手势 - .priorityGesture( - TapGesture() - .onAction(() => { - this.value = 'priorityGesture onAction' - }), GestureMask.IgnoreInternal - ) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/GestureSetting.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" deleted file mode 100644 index 3f74fb0e1c9ccbd933b6c8ab206d033a67b68749..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/02.\345\237\272\347\241\200\347\273\204\344\273\266/03.DataPanel.md" +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: DataPanel -permalink: /pages/000b0101020102 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# DataPanel - -数据面板组件,用于将多个数据占比情况使用环形占比图进行展示。 - -## 子组件 - -无 - -## 接口 - -DataPanel\(value:\{values: number\[\], max?: number\}\) - -- 参数 - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

参数类型

-

必填

-

默认值

-

参数描述

-

values

-

number[]

-

-

-

-

数据值列表,最大支持9个数据。

-

max

-

number

-

-

100

-

数据的最大值。

-
- - -## 示例 - -``` -@Entry -@Component -struct DataPanelExample { - public values1: number[] = [40, 20, 20, 10, 10] - - build() { - Column({ space: 5 }) { - DataPanel({ values: this.values1, max: 100 }) - .width(150) - .height(150) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/datapanel.png) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" deleted file mode 100644 index 955549b22dc8ccd8d57a3f38186e28e466694dcd..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/01.AlphabetIndexer.md" +++ /dev/null @@ -1,263 +0,0 @@ ---- -title: AlphabetIndexer -permalink: /pages/000b0101020200 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# AlphabetIndexer - -字母索引条。 - -## 支持设备 - - - - - - - - - - - - - - - - -

手机

-

平板

-

车机

-

智慧屏

-

智能穿戴

-

支持

-

支持

-

支持

-

不支持

-

不支持

-
- -## 子组件 - -无 - -## 接口 - -AlphabetIndexer\(value: \{arrayValue : Array, selected : number\}\) - -- 参数 - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

参数类型

-

必填

-

默认值

-

参数描述

-

arrayValue

-

Array<string>

-

-

-

-

字母索引字符串数组。

-

selected

-

number

-

-

-

-

选中项编号。

-
- - -## 属性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数类型

-

描述

-

selectedColor

-

Color

-

选中文本文字颜色。

-

popupColor

-

Color

-

弹出提示文本字体颜色。

-

selectedBackgroundColor

-

Color

-

选中文本背景颜色。

-

popupBackground

-

Color

-

弹窗索引背景色。

-

usingPopup

-

boolean

-

是否使用弹出索引提示。

-

selectedFont

-

{

-

size?: number,

-

weight?: FontWeight,

-

family?: string,

-

style?: FontStyle

-

}

-

选中文本文字样式。

-

popupFont

-

{

-

size?: number,

-

weight?: FontWeight,

-

family?: string,

-

style?: FontStyle

-

}

-

弹出提示文本字体样式。

-

font

-

{

-

size?: number,

-

weight?: FontWeight,

-

family?: string,

-

style?: FontStyle

-

}

-

字母索引条默认文本字体样式。

-

itemSize

-

Length

-

字母索引条字母区域大小,字母区域为正方形,设置正方形边长。

-

alignStyle

-

IndexerAlign

-

字母索引条对齐样式,支持左侧对齐样式与右侧对齐样式,影响弹窗弹出位置。

-
- -- IndexerAlign枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Left

-

弹框显示在索引条右侧。

-

Right

-

弹框显示在索引条左侧。

-
- - -## 事件 - - - - - - - - - - -

名称

-

功能描述

-

onSelected(index: number) => void

-

索引条选中回调。

-
- -## 示例 - -``` -@Entry -@Component -struct AlphabetIndexerComponent { - private value: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] - - build() { - AlphabetIndexer({ ArrayValue: this.value, selected: 0 }) - .selectedColor(0xffffff) // 选中颜色 - .popupColor(0xFFFAF0) // 弹出框颜色 - .selectedBackgroundColor(0xCCCCCC) // 选中背景颜色 - .popupBackground(0xD2B48C) // 弹出框背景颜色 - .usingPopup(true) // 是否显示弹出框 - .selectedFont({ size: 16, weight: FontWeight.Bolder }) // 选中的样式 - .popupFont({ size: 30, weight: FontWeight.Bolder }) // 弹出框的演示 - .itemSize(28) // 每一项的大小正方形 - .alignStyle(IndexerAlign.Left) // 左对齐 - .onSelected((index: number) => { - console.info(this.value[index] + '被选中了') // 选中的事件 - }) - .margin({ left: 50 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/alphabetindexer.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" deleted file mode 100644 index 75b60892a195b89752f7d55bd3f177a28ba444b7..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/10.List.md" +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: List -permalink: /pages/000b0101020209 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# List - -列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 - -## 权限列表 - -无 - -## 子组件 - -包含[ListItem](/pages/000b010102020a)子组件。 - -## 接口 - -List\(options?: \{ space?: number, initialIndex?: number \}\) - -- 参数 - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

参数类型

-

必填

-

默认值

-

参数描述

-

space

-

number

-

-

0

-

列表项间距。

-

initialIndex

-

number

-

-

0

-

设置当前List初次加载时视口起始位置显示的item,即显示第一个item,如设置的序号超过了最后一个item的序号,则设置不生效。

-
- - -## 属性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

描述

-

listDirection

-

Axis

-

Vertical

-

设置List组件排列方向参照Axis枚举说明。

-

divider

-

{

-

strokeWidth: Length,

-

color?:Color,

-

startMargin?: Length,

-

endMargin?: Length

-

}

-

-

-

用于设置ListItem分割线样式,默认无分割线。

-

strokeWidth: 分割线的线宽。

-

color: 分割线的颜色。

-

startMargin: 分割线距离列表侧边起始端的距离。

-

endMargin: 分割线距离列表侧边结束端的距离。

-

editMode

-

boolean

-

false

-

声明当前List组件是否处于可编辑模式。

-

edgeEffect

-

EdgeEffect

-

Spring

-

滑动效果,目前支持的滑动效果参见EdgeEffect的枚举说明。

-

chainAnimation

-

boolean

-

false

-

用于设置当前list是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。链式联动效果:list内的list-item间隔一定距离,在基本的滑动交互行为下,主动对象驱动从动对象进行联动,驱动效果遵循弹簧物理动效。

-
  • false:不启用链式联动。
  • true:启用链式联动。
-
- -- Axis枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Vertical

-

纵向排列。

-

Horizontal

-

横向排列。

-
- - -- EdgeEffect枚举说明 - - - - - - - - - - - - - -

名称

-

描述

-

Spring

-

弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹。

-

None

-

滑动到边缘后无效果。

-
- - -## 事件 - - - - - - - - - - - - - -

名称

-

功能描述

-

onItemDelete(index: number) => boolean

-

列表项删除时触发。

-

onScrollIndex(firstIndex: number, lastIndex: number) => void

-

当前列表显示的起始位置和终止位置发生变化时触发。

-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->List使能可编辑模式需配合事件方法onItemDelete和ListItem的editable属性,即可编辑模式实现删除列表项功能,需满足下列三个条件: ->- 配置editMode\(true\); ->- 绑定onItemDelete回调,回调中return true; ->- ListItem属性editable\(true\)。 - -## 示例 - -``` -@Entry -@Component -struct ListExample { - private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - @State editFlag: boolean = false - - build() { - Stack({ alignContent: Alignment.TopStart }) { - Column() { - List({ space: 20, initialIndex: 0 }) { - ForEach(this.arr, (item) => { - ListItem() { - Text('' + item) - .width('100%').height(100).fontSize(16) - .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF) - }.editable(true) - }, item => item) - } - .listDirection(Axis.Vertical) // 排列方向 - .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线 - .edgeEffect(EdgeEffect.None) // 滑动到边缘无效果 - .chainAnimation(false) // 联动特效关闭 - .onScrollIndex((firstIndex: number, lastIndex: number) => { - console.info('first' + firstIndex) - console.info('last' + lastIndex) - }) - .editMode(this.editFlag) - .onItemDelete((index: number) => { - console.info(this.arr[index] + 'Delete') - this.arr.splice(index, 1) - console.info(JSON.stringify(this.arr)) - this.editFlag = false - return true - }).width('90%') - }.width('100%') - - Button('edit list') - .onClick(() => { - this.editFlag = !this.editFlag - }).margin({ top: 5, left: 20 }) - }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/list.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.TabContent.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.TabContent.md" deleted file mode 100644 index dfbfcbf9fe527ccedfc156aa9d21212ede5b505f..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/03.\347\273\204\344\273\266/03.\345\256\271\345\231\250\347\273\204\344\273\266/20.TabContent.md" +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: TabContent -permalink: /pages/000b0101020213 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:40 ---- -# TabContent - -仅在Tabs中使用,对应一个切换页签的内容视图。 - -## 权限列表 - -无 - -## 子组件 - -支持单个子组件。 - -## 接口 - -TabContent\(\) - -## 属性 - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

描述

-

tabBar

-

string | {

-

icon?: string,

-

text?: string

-

}

-

-

-

设置TabBar上显示内容。

-
说明:

如果icon采用svg格式图源,则要求svg图源删除其自有宽高属性值。如采用带有自有宽高属性的svg图源,icon大小则是svg本身内置的宽高属性值大小。

-
-
- ->![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** ->- TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。 ->- TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。 - -## 示例 - -见[Tabs](/pages/000b0101020212#section1131255321814)。 - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" deleted file mode 100644 index c37ce6877e256a1e6a595b6a5ac4f5ce81f4b745..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/05.\345\205\250\345\261\200UI\346\226\271\346\263\225/01.\350\255\246\345\221\212\345\274\271\347\252\227.md" +++ /dev/null @@ -1,347 +0,0 @@ ---- -title: 警告弹窗 -permalink: /pages/000b01010400 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:41 ---- -# 警告弹窗 - -显示警告弹窗组件,可设置文本内容与响应回调。 - -## 属性 - - - - - - - - - - - - - - -

名称

-

参数类型

-

默认值

-

参数描述

-

show

-

options: { paramObject1| paramObject2}

-

-

-

定义并显示AlertDialog组件。

-
- -- paramObject1参数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

参数类型

-

必填

-

默认值

-

参数描述

-

title

-

string | Resource

-

-

-

-

弹窗标题。

-

message

-

string | Resource

-

-

-

-

弹窗内容。

-

autoCancel

-

boolean

-

-

true

-

点击遮障层时,是否关闭弹窗。

-

confirm

-

{

-

value: string | Resource,

-

fontColor?: Color | number | string | Resource,

-

backgroundColor?: Color | number | string | Resource,

-

action: () => void

-

}

-

-

-

-

确认按钮的文本内容、文本色、按钮背景色和点击回调。

-

cancel

-

() => void

-

-

-

-

点击遮障层关闭dialog时的回调。

-

alignment

-

DialogAlignment

-

-

DialogAlignment.Default

-

弹窗在竖直方向上的对齐方式。

-

offset

-

{

-

dx: Length | Resource,

-

dy: Length | Resource

-

}

-

-

-

-

弹窗相对alignment所在位置的偏移量。

-

gridCount

-

number

-

-

-

-

弹窗容器宽度所占用栅格数。

-
- - -- paramObject2参数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

参数类型

-

必填

-

默认值

-

参数描述

-

title

-

string | Resource

-

-

-

-

弹窗标题。

-

message

-

string | Resource

-

-

-

-

弹窗内容。

-

autoCancel

-

boolean

-

-

true

-

点击遮障层时,是否关闭弹窗。

-

primaryButton

-

{

-

value: string | Resource,

-

fontColor?: Color | number | string | Resource,

-

backgroundColor?: Color | number | string | Resource,

-

action: () => void;

-

}

-

-

-

-

按钮的文本内容、文本色、按钮背景色和点击回调。

-

secondaryButton

-

-

{

-

value: string | Resource,

-

fontColor?: Color | number | string | Resource,

-

backgroundColor?: Color | number | string | Resource,

-

action: () => void;

-

}

-

-

-

-

按钮的文本内容、文本色、按钮背景色和点击回调。

-

cancel

-

() => void

-

-

-

-

点击遮障层关闭dialog时的回调。

-

alignment

-

DialogAlignment

-

-

DialogAlignment.Default

-

弹窗在竖直方向上的对齐方式。

-

offset

-

{

-

dx: Length | Resource,

-

dy: Length | Resource

-

}

-

-

-

-

弹窗相对alignment所在位置的偏移量。

-

gridCount

-

number

-

-

-

-

弹窗容器宽度所占用栅格数。

-
- - -## 示例 - -``` -@Entry -@Component -struct AlertDialogExample { - build() { - Column({ space: 5 }) { - Button('one button dialog') - .onClick(() => { - AlertDialog.show( - { - title: 'title', - message: 'text', - confirm: { - value: 'button', - action: () => { - console.info('Button-clicking callback') - } - }, - cancel: () => { - console.info('Closed callbacks') - } - } - ) - }) - .backgroundColor(0x317aff) - Button('two button dialog') - .onClick(() => { - AlertDialog.show( - { - title: 'title', - message: 'text', - primaryButton: { - value: 'cancel', - action: () => { - console.info('Callback when the first button is clicked') - } - }, - secondaryButton: { - value: 'ok', - action: () => { - console.info('Callback when the second button is clicked') - } - }, - cancel: () => { - console.info('Closed callbacks') - } - } - ) - }).backgroundColor(0x317aff) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![](/images/application-dev/reference/arkui-ts/figures/AlertDialog.gif) - diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/06.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" "b/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/06.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" deleted file mode 100644 index 27876e5b4e850bdbe7d28ab316f32879cad62a08..0000000000000000000000000000000000000000 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/06.\351\231\204\345\275\225/01.\346\226\207\346\241\243\344\270\255\346\266\211\345\217\212\345\210\260\347\232\204\345\206\205\347\275\256\346\236\232\344\270\276\345\200\274.md" +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: 文档中涉及到的内置枚举值 -permalink: /pages/000b01010500 -navbar: true -sidebar: true -prev: true -next: true -search: true -article: true -comment: false -editLink: false -date: 2021-12-30 18:31:41 ---- -# 文档中涉及到的内置枚举值 - -## Alignment枚举说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

TopStart

-

顶部起始端。

-

Top

-

顶部横向居中。

-

TopEnd

-

顶部尾端。

-

Start

-

起始端纵向居中。

-

Center

-

横向和纵向居中。

-

End

-

尾端纵向居中。

-

BottomStart

-

底部起始端。

-

Bottom

-

底部横向居中。

-

BottomEnd

-

底部尾端。

-
- -## ItemAlign枚举说明 - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

Auto

-

使用Flex容器中默认配置。

-

Start

-

元素在Flex容器中,交叉轴方向首部对齐。

-

Center

-

元素在Flex容器中,交叉轴方向居中对齐。

-

End

-

元素在Flex容器中,交叉轴方向底部对齐。

-

Stretch

-

元素在Flex容器中,交叉轴方向拉伸填充,在未设置尺寸时,拉伸到容器尺寸。

-

Baseline

-

元素在Flex容器中,交叉轴方向文本基线对齐。

-
- -## LineCapStyle枚举说明 - - - - - - - - - - - - - - - - -

名称

-

描述

-

Butt

-

分割线两端为平行线。

-

Round

-

分割线两端为半圆。

-

Square

-

分割线两端为平行线。

-
- -## PlayMode枚举值说明 - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

Normal

-

动画按正常播放。

-

Reverse

-

动画反向播放。

-

Alternate

-

动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。

-

AlternateReverse

-

动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。

-
- -## ImageRepeat枚举说明 - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

X

-

只在水平轴上重复绘制图片。

-

Y

-

只在竖直轴上重复绘制图片。

-

XY

-

在两个轴上重复绘制图片。

-

NoRepeat

-

不重复绘制图片。

-
- -## TextDecorationType枚举说明 - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

Underline

-

文字下划线修饰。

-

LineThrough

-

穿过文本的修饰线。

-

Overline

-

文字上划线修饰。

-

None

-

不使用文本装饰线。

-
- -## TextCase枚举说明 - - - - - - - - - - - - - - - - -

名称

-

描述

-

Normal

-

保持文本原有大小写。

-

LowerCase

-

文本采用全小写。

-

UpperCase

-

文本采用全大写。

-
- -## BarState枚举说明 - - - - - - - - - - - - - - - - -

名称

-

描述

-

Off

-

不显示。

-

On

-

常驻显示。

-

Auto

-

按需显示(触摸时显示,2s后消失)。

-
- diff --git a/website/docs/_posts/SIG/sig.md b/website/docs/_posts/SIG/sig.md index 0d990149faa11396660112c81caaf6dcb928c275..9ae804d8860b484f0456ec6443041999ad24061b 100644 --- a/website/docs/_posts/SIG/sig.md +++ b/website/docs/_posts/SIG/sig.md @@ -25,7 +25,7 @@ date: 2021-10-11 17:08:58 4. 一个良好的社区组织形式是持续运作的关键,仪式感很重要,SIG组需要通过周期例会来保持其有效的运作,并定期向PMC委员会汇报进展。 ## 申请新建SIG - 1. 开发者在社区中寻找2-3个以上有共同兴趣及目标的人,确定SIG Leader。参考[新建SIG Charter](/sig/sig_template_cn)模板,创建SIG Charter提案,提案包括如下要素: + 1. 开发者在社区中寻找2-3个以上有共同兴趣及目标的人,确定SIG Leader。参考[新建SIG Charter](https://gitee.com/openharmony/community/blob/master/sig/sig-template/sig_template_cn.md)模板,创建SIG Charter提案,提案包括如下要素: - 创建SIG的背景信息 - 创建SIG的业务范围 - 创建SIG的业务目标 diff --git a/website/docs/_posts/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md b/website/docs/_posts/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md deleted file mode 100644 index 62717174401136c80014a70886576c4868ccaf7d..0000000000000000000000000000000000000000 --- a/website/docs/_posts/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: deveco-studio-user-guide-for-openharmony.md -permalink: /pages/extra/00c2e5/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:38 ---- -# DevEco Studio(OpenHarmony)使用指南 - - -- **[概述](/pages/00070500)** - -- **[版本变更说明](/pages/00070501)** - -- **[配置OpenHarmony SDK](/pages/00070502)** - -- **[创建OpenHarmony工程](/pages/extra/ea2f5f/)** - -- **[配置OpenHarmony应用签名信息](/pages/00070504)** - -- **[安装运行OpenHarmony应用](/pages/00070505)** \ No newline at end of file diff --git a/website/docs/_posts/contribute/OpenHarmony-Java-secure-coding-guide.md b/website/docs/_posts/contribute/OpenHarmony-Java-secure-coding-guide.md deleted file mode 100644 index dea8350fdcb6cbad2bd8707e80df0a3d4c21ddcb..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-Java-secure-coding-guide.md +++ /dev/null @@ -1,2111 +0,0 @@ ---- -title: OpenHarmony-Java-secure-coding-guide.md -permalink: /pages/extra/6cbd43/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# OpenHarmony Java 安全编程指南 - -本文档基于Java 语言提供一些安全编程建议,用于指导开发实践。 - -# 数据类型 - -## 进行数值运算时,避免整数溢出 - -**【描述】** - -在进行数值运算过程中,确保运算结果在特定的整数类型的数据范围内,避免溢出,导致非预期的结果。 - -内置的整数运算符不会以任何方式来标识运算结果的上溢或下溢。常见的加、减、乘、除都可能会导致整数溢出。另外,Java数据类型的合法取值范围是不对称的(最小值的绝对值比最大值大1),所以对最小值取绝对值(`java.lang.Math.abs()`)时,也会导致溢出。 - -对于整数溢出问题,可以通过先决条件检测、使用Math类的安全方法、向上类型转换或者使用`BigInteger`等方法进行规避。 - -**【反例】** - -```java -public static int multNum(int num1, int num2) { - return num1 * num2; -} -``` - -上述示例中,当num1和num2的绝对值较大,两者的乘积大于`Integer.MAX_VALUE`或小于`Integer.MIN_VALUE`时,方法就无法返回正确的计算结果(产生溢出)。 - -**【正例】** - -```java -public static int multNum(int num1, int num2) { - return Math.multiplyExact(num1, num2); -} -``` - -上述示例中,当无法预判乘积结果是否会产生溢出时,使用了Java 8新增的`Math.multiplyExact()`方法,该方法在乘积运算不产生溢出时会返回运算结果,溢出时抛出`ArithmeticException`。 - -## 确保除法运算和模运算中的除数不为0 - -**【描述】** - -如果除法或模运算中的除数为零可能会导致程序终止或拒绝服务(DoS),因此需要在运算前保证除数不为0。 - -**【反例】** - -```java -long dividendNum = 0; -long divisorNum = 0; -long result1 = dividendNum / divisorNum; -long result2 = dividendNum % divisorNum; -``` - -上述示例中,没有对除数进行非零判断,会导致程序运行错误。 - -**【正例】** - -```java -long dividendNum = 0; -long divisorNum = 0; -if (divisorNum != 0) { - long result1 = dividendNum / divisorNum; - long result2 = dividendNum % divisorNum; -} -``` - -上述示例中,对除数进行非零判断,然后再进行除法或取余运算。 - -# 表达式 - -## 禁止直接使用可能为null的对象,防止出现空指针引用 - -**【描述】** - -访问一个为null的对象时,会导致空引用问题,代码中抛出`NullPointerException`。该类问题应该通过预检查的方式进行消解,而不是通过`try...catch`机制处理`NullPointerException`。 - -**【反例】** - -```java -String env = System.getenv(SOME_ENV); -if (env.length() > MAX_LENGTH) { - ... -} -``` - -上述示例中,`System.getenv()`返回值可能为null,代码中在使用变量`env`前未判空,会发生空指针引用。 - -**【正例】** - -```java -String env = System.getenv(SOME_ENV); -if (env != null && env.length() > MAX_LENGTH) { - ... -} -``` - -上述示例中,对`System.getenv()`返回值先判空再使用,消除了空指针引用问题。 - -# 并发与多线程 - -## 在异常条件下,保证释放已持有的锁 - -**【描述】** - -一个线程中没有正确释放持有的锁会导致其他线程无法获取该锁对象,导致阻塞。在发生异常时,需要确保程序正确释放当前持有的锁。在异常条件下,同步方法或者块同步中使用的对象内置锁会自动释放。但是大多数的Java锁对象并不是Closeable,无法使用try-with-resources功能自动释放,在这种情况下需要主动释放锁。 - -**【反例】**(可检查异常) - -```java -public final class Foo { - private final Lock lock = new ReentrantLock(); - - public void incorrectReleaseLock() { - try { - lock.lock(); - doSomething(); - lock.unlock(); - } catch (MyBizException ex) { - // 处理异常 - } - } - - private void doSomething() throws MyBizException { - ... - } -} -``` - -上述代码示例中,使用了`ReentrantLock`锁,当`doSomething()`方法抛出异常时,catch代码块中没有释放锁操作,导致锁没有释放。 - -**【正例】**(finally代码块) - -```java -public final class Foo { - private final Lock lock = new ReentrantLock(); - - public void correctReleaseLock() { - lock.lock(); - try { - doSomething(); - } catch (MyBizException ex) { - // 处理异常 - } finally { - lock.unlock(); - } - } - - private void doSomething() throws MyBizException { - ... - } -} -``` - -上述代码示例中,成功执行锁定操作后,将可能抛出异常的操作封装在try代码块中。锁在执行try代码块前获取,可保证在执行finally代码时正确持有锁。在finally代码块中调用`lock.unlock()`,可以保证不管是否发生异常都可以释放锁。 - -**【反例】**(未检查异常) - -```java -final class Foo { - private final Lock lock = new ReentrantLock(); - - public void incorrectReleaseLock(String value) { - lock.lock(); - ... - int index = Integer.parseInt(value); - ... - lock.unlock(); - } -} -``` - -上述代码示例中,当`incorrectReleaseLock()`方法传入的String不是数字时,后续的操作会抛出`NumberFormatException`,导致锁未被正确释放。 - -**【正例】**(finally代码块) - -```java -final class Foo { - private final Lock lock = new ReentrantLock(); - - public void correctReleaseLock(String value) { - lock.lock(); - try { - ... - int index = Integer.parseInt(value); - ... - } finally { - lock.unlock(); - } - } -} -``` - -上述代码示例中,成功执行锁定操作后,将可能抛出异常的操作封装在try代码块中。锁在执行try代码块前获取,可保证在执行finally代码时正确持有锁。在finally代码块中调用`lock.unlock()`,可以保证不管是否发生异常都可以释放锁。 - -## 禁止使用Thread.stop()来终止线程 - -**【描述】** - -线程在正常退出时,会维持类的不变性。某些线程API最初是用来帮助线程的暂停、恢复和终止,但随后因为设计上的缺陷而被废弃。例如,`Thread.stop()`方法会导致线程立即抛出一个`ThreadDeath`异常,这通常会停止线程。调用`Thread.stop()`会造成一个线程非正常释放它所获得的所有锁,可能会暴露这些锁保护的对象,使这些对象处于一个不一致的状态中。 - -**【反例】**(使用废弃的Thread.stop()) - -```java -public final class Foo implements Runnable { - private final Vector vector = new Vector(1000); - - public Vector getVector() { - return vector; - } - - @Override - public synchronized void run() { - Random number = new Random(123L); - int i = vector.capacity(); - while (i > 0) { - vector.add(number.nextInt(100)); - i--; - } - } - - public static void main(String[] args) throws InterruptedException { - Thread thread = new Thread(new Foo()); - thread.start(); - Thread.sleep(5000); - thread.stop(); - } -} -``` - -上述示例中,一个线程将伪随机数写入一个vector中,在经过指定时间后,线程被强迫终止。因为Vector是线程安全的,所以多个线程对共享实例进行的操作是不会让其处于一个不一致的状态。例如,`Vector.size()`方法总是能返回vector中的元素的正确数目。Vector实例是使用自身的隐式锁来保持同步。而`Thread.stop()`方法会导致线程停止在正在进行的操作并抛出`ThreadDeath`异常,所有获得的锁会被释放,如果线程是在加入一个新整数到vector时被停止的,就可能导致处于不一致状态的vector,如因为元素数目是在添加一个元素后增加的,可能会导致`Vector.size()`返回的是错误的元素数目。 - -**【正例】**(设置线程结束标志) - -```java -public final class Foo implements Runnable { - private final Vector vector = new Vector(1000); - - private boolean done = false; - - public Vector getVector() { - return vector; - } - - public void shutdown() { - done = true; - } - - @Override - public synchronized void run() { - Random number = new Random(123L); - int i = vector.capacity(); - while (!done && i > 0) { - vector.add(number.nextInt(100)); - i--; - } - } - - public static void main(String[] args) throws InterruptedException { - Foo foo = new Foo(); - Thread thread = new Thread(foo); - thread.start(); - Thread.sleep(5000); - foo.shutdown(); - } -} -``` - -上述示例中,使用一个标志来请求线程终止。`shutdown()`方法设置这个标志为true,线程的`run()`方法查询该标志为true时终止执行。 - -**【正例】**(可中断) - -```java -public final class Foo implements Runnable { - private final Vector vector = new Vector(1000); - - public Vector getVector() { - return vector; - } - - @Override - public synchronized void run() { - Random number = new Random(123L); - int i = vector.capacity(); - while (!Thread.interrupted() && i > 0) { - vector.add(number.nextInt(100)); - i--; - } - } - - public static void main(String[] args) throws InterruptedException { - Foo foo = new Foo(); - Thread thread = new Thread(foo); - thread.start(); - Thread.sleep(5000); - thread.interrupt(); - } -} -``` - -上述示例中,调用`Thread.interrupt()`方法来终止线程。调用`Thread.interrupt()`方法设置了一个内部的中断标志。线程可以通过`Thread.interrupted()`方法来检查该标志,该方法会在当前线程被中断时返回true,并会清除该中断标志。 - -## 线程池中的线程结束后必须清理自定义的ThreadLocal变量 - -**【描述】** - -线程池技术通过重复使用线程以减少线程创建开销。由于线程的复用,导致`ThreadLocal`变量的使用存在以下两类问题: - -- 脏数据问题:当前任务未正确初始化`ThreadLocal`变量,导致`ThreadLocal`变量是由该线程执行的其他任务设置的; -- 内存泄露问题:`ThreadLocal`变量未主动释放,导致内存无法被主动回收。 - -因此必须保证线程池中每个任务使用的`ThreadLocal`变量在任务结束后被主动清理。 - -**【正例】** - -```java -public class TestThreadLocal { - public static void main(String[] args) { - ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 2, 100, - TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), - Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); - for (int i = 0; i < 20; i++) { - pool.execute(new TestThreadLocalTask()); - } - } -} - -class TestThreadLocalTask implements Runnable { - private static ThreadLocal localValue = new ThreadLocal<>(); - - @Override - public void run() { - localValue.set(STATE1); - try { - ... - localValue.set(STATE3); - ... - } finally { - localValue.remove(); // 需要执行remove方法清理线程局部变量,避免内存泄露 - } - } -} -``` - -# 输入输出 - -## 在多用户系统中创建文件时指定合适的访问许可 - -**【描述】** - -多用户系统中的文件通常归属于一个特定的用户,文件的属主能够指定系统中哪些用户能够访问该文件的内容。这些文件系统使用权限和许可模型来保护文件访问。当一个文件被创建时,文件访问许可规定了哪些用户可以访问或者操作这个文件。如果创建文件时没有对文件的访问许可做足够的限制,攻击者可能在修改此文件的访问权限之前对其进行读取或者修改。因此,一定要在创建文件时就为其指定访问许可,以防止未授权的文件访问。 - -**【反例】** - -```java -Writer out = new FileWriter("file"); -``` - -`FileOutputStream`与`FileWriter`的构造方法无法让程序员显式的指定文件的访问权限。在这个示例中,所创建文件的访问许可取决于具体的实现机制,可能无法防止未授权的访问。 - -**【正例】** - -```java -Path file = new File("file").toPath(); - -// 抛出异常而不是覆写已存在的文件 -Set options = new HashSet(); -options.add(StandardOpenOption.CREATE_NEW); -options.add(StandardOpenOption.APPEND); - -// 文件权限应设置为只有属主才能读取/写入文件 -Set perms = PosixFilePermissions.fromString("rw-------"); -FileAttribute> attr = - PosixFilePermissions.asFileAttribute(perms); -try (SeekableByteChannel sbc = Files.newByteChannel(file, options, attr)) { - ... // 写数据 -} -``` - -**【例外】** - -如果文件是创建在一个安全目录中,而且该目录对于非受信用户是不可读的,那么允许以默认许可创建文件。例如,如果整个文件系统是可信的或者只有可信用户可以访问,就属于这种情况。 - -## 使用外部数据构造的文件路径前必须进行校验,校验前必须对文件路径进行规范化处理 - -**【描述】** - -文件路径来自外部数据时,必须对其合法性进行校验,否则可能会产生路径遍历(Path Traversal)漏洞。 - -文件路径有多种表现形式,如绝对路径、相对路径,路径中可能会含各种链接、快捷方式、影子文件等,这些都会对文件路径的校验产生影响,所以在文件路径校验前要对文件路径进行规范化处理,使用规范化的文件路径进行校验。对文件路径的规范化处理必须使用`getCanonicalPath()`,禁止使用`getAbsolutePath()`(该方法无法保证在所有的平台上对文件路径进行正确的规范化处理)。 - -**【反例】** - -```java -public void doSomething() { - File file = new File(HOME_PATH, fileName); - String path = file.getPath(); - - if (!validatePath(path)) { - throw new IllegalArgumentException("Path Traversal vulnerabilities may exist!"); - } - ... // 对文件进行读写等操作 -} - -private boolean validatePath(String path) { - if (path.startsWith(HOME_PATH)) { - return true; - } else { - return false; - } -} -``` - -上述代码中fileName来自外部输入,直接用fileName的值与固定路径进行拼接,作为实际访问文件的路径,在访问文件之前通过`validatePath`检查了拼接的路径是否在固定目录下,但是攻击者可以通过../这样的路径方式,访问HOME_PATH之外的任意文件。 - -**【正例】**(getCanonicalPath()) - -```java -public void doSomething() { - File file = new File(HOME_PATH, fileName); - try { - String canonicalPath = file.getCanonicalPath(); - if (!validatePath(canonicalPath)) { - throw new IllegalArgumentException("Path Traversal vulnerability!"); - } - ... // 对文件进行读写等操作 - } catch (IOException ex) { - throw new IllegalArgumentException("An exception occurred ...", ex); - } -} - -private boolean validatePath(String path) { - if (path.startsWith(HOME_PATH)) { - return true; - } else { - return false; - } -} -``` - -上述代码示例中,使用外部输入的fileName构造文件路径后,先对文件路径进行规范化,然后用规范化的文件路径进行校验,满足条件后执行文件读写操作。这样可以有效避免路径遍历之类的风险。 - -## 从ZipInputStream中解压文件必须进行安全检查 - -**【描述】** - -使用`java.util.zip.ZipInputStream`解压文件时,有两个问题需要注意: - -**1. 解压出的文件在解压目标目录之外** - -解压zip文件时要校验各解压文件的名字,如果文件名包含../会导致解压文件被释放到目标目录之外的目录。因此,任何被解压文件的目标路径不在预期目录之内时,要么拒绝将其解压出来,要么将其解压到一个安全的位置。 - -**2. 解压的文件消耗过多的系统资源** - -解压zip时,不仅要对解压之后的文件数量进行限制,还要对解压之后的文件大小进行限制。zip压缩算法可能有很大的压缩比,可以把超大文件压缩成很小的zip文件。zip文件解压时,如果不对解压后的文件的实际大小进行检查,则可能会使解压后的文件占用大量系统资源,导致zip炸弹(zip bomb)攻击。因此,Zip文件解压时,若解压之后的文件大小超过一定的限制,必须拒绝将其解压。具体大小限制由平台的处理性能来决定。 - -**【反例】** - -```java -public void unzip(String fileName, String dir) throws IOException { - try (FileInputStream fis = new FileInputStream(fileName); - ZipInputStream zis = new ZipInputStream(fis)) { - ZipEntry entry; - File tempFile; - byte[] buf = new byte[10240]; - int length; - - while ((entry = zis.getNextEntry()) != null) { - tempFile = new File(dir, entry.getName()); - if (entry.isDirectory()) { - tempFile.mkdirs(); - continue; - } - - try (FileOutputStream fos = new FileOutputStream(tempFile)) { - while ((length = zis.read(buf)) != -1) { - fos.write(buf, 0, length); - } - } - } - } -} -``` - -上述示例中,未对解压的文件名做验证,直接将文件名传递给`FileOutputStream`构造器。也未检查解压文件的资源消耗情况,允许程序运行到操作完成或者本地资源被耗尽。 - -**【正例】** - -```java -private static final long MAX_FILE_COUNT = 100L; -private static final long MAX_TOTAL_FILE_SIZE = 1024L * 1024L; - -... - -public void unzip(FileInputStream zipFileInputStream, String dir) throws IOException { - long fileCount = 0; - long totalFileSize = 0; - - try (ZipInputStream zis = new ZipInputStream(zipFileInputStream)) { - ZipEntry entry; - String entryName; - String entryFilePath; - File entryFile; - byte[] buf = new byte[10240]; - int length; - - while ((entry = zis.getNextEntry()) != null) { - entryName = entry.getName(); - entryFilePath = sanitizeFileName(entryName, dir); - entryFile = new File(entryFilePath); - - if (entry.isDirectory()) { - creatDir(entryFile); - continue; - } - - fileCount++; - if (fileCount > MAX_FILE_COUNT) { - throw new IOException("The ZIP package contains too many files."); - } - - try (FileOutputStream fos = new FileOutputStream(entryFile)) { - while ((length = zis.read(buf)) != -1) { - totalFileSize += length; - zipBombCheck(totalFileSize); - fos.write(buf, 0, length); - } - } - } - } -} - -private String sanitizeFileName(String fileName, String dir) throws IOException { - File file = new File(dir, fileName); - String canonicalPath = file.getCanonicalPath(); - if (canonicalPath.startsWith(dir)) { - return canonicalPath; - } - throw new IOException("Path Traversal vulnerability: ..."); -} - -private void creatDir(File dirPath) throws IOException { - boolean result = dirPath.mkdirs(); - if (!result) { - throw new IOException("Create dir failed, path is : " + dirPath.getPath()); - } - ... -} - -private void zipBombCheck(long totalFileSize) throws IOException { - if (totalFileSize > MAX_TOTAL_FILE_SIZEG) { - throw new IOException("Zip Bomb! The size of the file extracted from the ZIP package is too large."); - } -} -``` - -上述示例中,在解压每个文件之前对其文件名进行校验,如果校验失败,整个解压过程会被终止。实际上也可以忽略跳过这个文件,继续后面的解压过程,甚至可以将这个文件解压到某个安全位置。解压缩过程中,在while循环中边读边统计实际解压出的文件总大小,如果达到指定的阈值(MAX_TOTAL_FILE_SIZE),会抛出异常终止解压操作;同时,会统计解压出来的文件的数量,如果达到指定阈值(MAX_FILE_COUNT),会抛出异常终止解压操作。 - -说明:在统计解压文件的大小时,不应该使用`entry.getSize()`来统计文件大小,`entry.getSize()`是从zip文件中的固定字段中读取单个文件压缩前的大小,文件压缩前的大小可被恶意篡改。 - -## 对于从流中读取一个字符或字节的方法,使用int类型的返回值 - -**【描述】** - -Java中`InputStream.read()`和`Reader.read()`方法用于从流中读取一个字节(byte)或字符(char)。 - -`InputStream.read()`读取一个字节,返回值的范围为0x00-0xFF(补码),8位;`Reader.read()`读取一个字符,返回值的范围为0x0000-0xFFFF(补码),16位。 - -当读取到流的末尾时,以上方法均返回int类型的-1(补码表示为0xFFFFFFFF),32位。 - -因此,如果在未判断返回值是否是流末尾标志-1(补码表示为0xFFFFFFFF)前将返回值转为byte或char,会导致无法正确判断返回值是流中的内容还是结束标识。 - -**【反例】**(字节) - -```java -FileInputStream in = getReadableStream(); - -byte data; -while ((data = (byte) in.read()) != -1) { - // 使用data - ... -} -``` - -上述代码中,将`read()`方法返回的值直接转换为byte类型,并将转换后的结果与-1进行比较,进而判断是否达到流的末尾。如果`read()`返回值为0xFF,0xFF转为有符号byte即为byte类型-1,循环结束条件判断通过,结果就是错误的以为流结束了。 - -**【反例】**(字符) - -```java -InputStreamReader in = getReader(); - -char data; -while ((data = (char) in.read()) != -1) { - // 使用data - ... -} -``` - -上述代码中,将`read()`方法返回的值直接转换为char类型,并将转换后的结果与-1进行比较,进而判断是否达到流的末尾。当读取流结束后,返回值转为char类型后也不为-1,因此即使流读取结束,while循环仍无法正确终止。 -原因是流结束标志-1(补码表示为0xFFFFFFFF)被强转为char类型时,会被转为0xFFFF,再和-1进行比较时等式不成立,导致循环结束条件永假。 - -**【正例】**(字节) - -```java -FileInputStream in = getReadableStream(); - -byte data; -int result; -while ((result = in.read()) != -1) { - data = (byte) result; - // 使用data - ... -} -``` - -**【正例】**(字符) - -```java -InputStreamReader in = getReader(); - -char data; -int result; -while ((result = in.read()) != -1) { - data = (char) result; - // 使用data - ... -} -``` - -上述代码中,使用int类型的变量来保存`read()`的返回值,并使用该返回值判断是否读取到流的末尾,流未读完时,将读取的内容转换为char或者byte类型,这样就避免了判断流末尾不准确。 - -## 防止外部进程阻塞在输入输出流上 - -**【描述】** - -Java中有两种方式启动一个外部进程并与其交互: - -1. java.lang.Runtime的exec()方法 -2. java.lang.ProcessBuilder的start()方法 - -他们都返回一个java.lang.Process对象,该对象封装了这个外部进程。 - -每个Process对象,包含输入流、输出流及错误流各一个,应该恰当地处理这些流,避免外部进程阻塞在这些流上。 - -不正确的处理会产生异常、DoS,及其他安全问题。 - -1、处理外部进程的输入流(`Process.getOutputStream()`,**从调用者角度来说,外部进程的输入流是OutputStream**): -对于需要输入流的外部进程,如果不为其提供一个有效输入,则其会从一个空的输入流中读取输入,导致其一直阻塞。 - -2、处理外部进程的输出流(`Process.getInputStream()`)和错误流(`Process.getErrorStream()`): -对于有输出流和错误流的外部进程,如果调用者不处理并且清空对应流,则该外部进程的输出可能会耗尽该进程输出流与错误流的缓冲区,导致外部进程被调用者阻塞,并影响调用者与外部进程的正常交互。 -如果使用`java.lang.ProcessBuilder`来调用外部进程,那么外部进程错误流可以通过`redirectErrorStream()`方法重定向到其输出流,调用者可以通过处理并清空输出流来同时处理错误流。 - -**【反例】**(错误处理外部进程的返回结果) - -```java -public void execExtProcess() throws IOException { - Process proc = Runtime.getRuntime().exec("ProcessMaybeStillRunning"); - int exitVal = proc.exitValue(); -} -``` - -上述示例中,程序未等到ProcessMaybeStillRunning进程结束就调用`exitValue()`方法,很可能会导致`IllegalThreadStateException`异常。 - -**【反例】**(未处理外部进程的输出流、错误流) - -```java -public void execExtProcess() throws IOException, InterruptedException { - Process proc = Runtime.getRuntime().exec("ProcessMaybeStillRunning"); - int exitVal = proc.waitFor(); -} -``` - -此示例对比上一个示例,不会产生`IllegalThreadStateException`异常。但是由于没有处理ProcessMaybeStillRunning的输出流和错误流,可能会导致描述中列出的问题。 - -**【正例】** - -```java -public class ProcessExecutor { - public void callExtProcess() throws IOException, InterruptedException { - Process proc = Runtime.getRuntime().exec("ProcessHasOutput"); - - StreamConsumer errConsumer = new StreamConsumer(proc.getErrorStream()); - StreamConsumer outputConsumer = new StreamConsumer(proc.getInputStream()); - - errConsumer.start(); - outputConsumer.start(); - - int exitVal = proc.waitFor(); - - errConsumer.join(); - outputConsumer.join(); - } - - class StreamConsumer extends Thread { - InputStream is; - - StreamConsumer(InputStream is) { - this.is = is; - } - - @Override - public void run() { - try { - byte data; - int result; - while ((result = is.read()) != -1) { - data = (byte) result; - handleData(data); - } - } catch (IOException ex) { - // 处理异常 - } - } - - private void handleData(byte data) { - ... - } - } -} -``` - -上述示例产生两个线程来分别读取进程的输出流和错误流。因此,外部进程将不会无限期地阻塞在这些流之上。 - -**【例外】** - -对于外部进程不涉及使用输入流、输出流和错误流的场景,可以不对流进行专门处理。 - -## 临时文件使用完毕必须及时删除 - -**【描述】** - -程序中很多用到临时文件的地方,比如用于进程间的数据共享,缓存内存数据,动态构造的类文件,动态连接库文件等。临时文件可能创建于操作系统的共享临时文件目录。这类目录中的文件可能会被定期清理,例如,每天晚上或者重启时。然而,如果文件未被安全地创建或者用完后还是可访问的,具备本地文件系统访问权限的攻击者便可以利用共享目录中的文件进行恶意操作。删除已经不再需要的临时文件有助于对文件名和其他资源(如二级存储)进行回收利用。每一个程序在正常运行过程中都有责任确保已使用完毕的临时文件被删除。 - -**【反例】** - -```java -public boolean uploadFile(InputStream in) throws IOException { - File tempFile = File.createTempFile("tempname", ".tmp"); - try (FileOutputStream fop = new FileOutputStream(tempFile)) { - int readSize; - do { - readSize = in.read(buffer, 0, MAX_BUFF_SIZE); - if (readSize > 0) { - fop.write(buffer, 0, readSize); - } - } while (readSize >= 0); - ... // 对tempFile进行其他操作 - } -} -``` - -上述示例代码在运行结束时未将临时文件删除。 - -**【正例】** - -```java -public boolean uploadFile(InputStream in) throws IOException { - File tempFile = File.createTempFile("tempname", ".tmp"); - try (FileOutputStream fop = new FileOutputStream(tempFile)) { - int readSize; - do { - readSize = in.read(buffer, 0, MAX_BUFF_SIZE); - if (readSize > 0) { - fop.write(buffer, 0, readSize); - } - } while (readSize >= 0); - ... // 对tempFile进行其他操作 - } finally { - if (!tempFile.delete()) { - // 忽略 - } - } -} -``` - -以上例子,在临时文件使用完毕之后,finally语句里对其进行了彻底删除。 - -# 序列化 - -#### 禁止直接将外部数据进行反序列化 - -**【描述】** - -反序列化操作是将一个二进制流或字符串反序列化为一个Java对象。当反序列化操作的数据是外部数据时,恶意用户可利用反序列化操作构造指定的对象、执行恶意代码、向应用程序中注入有害数据等。不安全反序列化操作可能导致任意代码执行、特权提升、任意文件访问、拒绝服务等攻击。 - -实际应用中,通常采用三方件实现对json、xml、yaml格式的数据序列化和反序列化操作。常用的三方件包括:fastjson、jackson、XMLDecoder、XStream、SnakeYmal等。 - -**【反例】** - -```java -public class DeserializeExample implements Serializable { - private static final long serialVersionUID = -5809782578272943999L; - - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - private void readObject(java.io.ObjectInputStream ois) { - ois.defaultReadObject(); - System.out.println("Hack!"); - } -} - - // 使用外部数据执行反序列化操作 - ObjectInputStream ois2= new ObjectInputStream(fis); - PersionInfo myPerson = (PersionInfo) ois2.readObject(); -``` - -上面的示例中,当反序列化操作的对象是攻击者构造的DeserializeExample对象的序列化结果,当`PersionInfo myPerson = (PersionInfo) ois2.readObject()`该语句执行时会报错,但是DeserializeExample对象中的`readObject()`方法中的攻击代码已经被执行。 - -**【正例】**(使用白名单校验) - -```java -public final class SecureObjectInputStream extends ObjectInputStream { - public SecureObjectInputStream() throws SecurityException, IOException { - super(); - } - - public SecureObjectInputStream(InputStream in) throws IOException { - super(in); - } - - protected Class resolveClass(ObjectStreamClass desc) - throws IOException, ClassNotFoundException { - if (!desc.getName().equals("com.xxxx.PersionInfo")) { // 白名单校验 - throw new ClassNotFoundException(desc.getName() + " not find"); - } - return super.resolveClass(desc); - } -} -``` - -上述示例是对反序列化的类进行白名单检查。即在自定义ObjectInputStream中重载`resolveClass()`方法,对className进行白名单校验。如果反序列化的类不在白名单之中,直接抛出异常。 - -**【正例】**(使用安全管理器防护) - -如果产品已经使用Java的安全管理器,建议使用Java安全管理器机制进行防护。 - -(1) 设置enableSubclassImplementation - -``` -permission java.io.SerializablePermission "enableSubclassImplementation"; - -``` - -(2) 定义ObjectInputStream,重载resolveClass的方法 - -```java -public final class HWObjectInputStream extends ObjectInputStream { - public HWObjectInputStream() throws SecurityException, IOException { - super(); - } - - public HWObjectInputStream(InputStream in) throws IOException { - super(in); - } - - protected Class resolveClass(ObjectStreamClass desc) - throws IOException, ClassNotFoundException { - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - sm.checkPermission(new SerializablePermission( - "com.xxxx." + desc.getName())); - } - return super.resolveClass(desc); - } -} -``` - -(3) 在policy文件里设置白名单 - -``` -permission java.io.SerializablePermission "com.xxxx.PersionInfo"; - -``` - -# 外部数据校验 - -## 外部数据使用前必须进行合法性校验 - -**描述】** - -外部数据的范围包括但不限于:网络、用户输入(包括命令行、界面)、命令行、文件(包括程序的配置文件) 、环境变量、进程间通信(包括管道、消息、共享内存、socket等、RPC)、跨信任域方法参数(对于API)等。 - -来自程序外部的数据通常被认为是不可信的,在使用这些数据前需要进行合法性校验,否则可能会导致不正确的计算结果、运行时异常、不一致的对象状态,甚至引起各种注入攻击,对系统造成严重影响。 - -**对外部数据的校验包括但不局限于:** - -- 校验API接口参数合法性; -- 校验数据长度; -- 校验数据范围; -- 校验数据类型和格式; -- 校验集合大小; -- 校验外部数据只包含可接受的字符(白名单校验),尤其需要注意一些特殊情况下的特殊字符。 - -对于外部数据的校验,要注意以下两点: - -- 如果需要,外部数据校验前要先进行标准化:例如“\uFE64”、“<”都可以表示“<”,在web应用中,如果外部输入不做标准化,可以通过“\uFE64”绕过对“<”限制。 -- 对外部数据的修改要在校验前完成,保证实际使用的数据与校验的数据一致。 - -出于性能和代码简洁性考虑,对于RESTful API,provider只校验请求信息,consumer只校验响应结果;对于一个调用链上的方法,最外层的对外public方法必须校验,内部public方法可不重复校验。 - -**常见校验框架:** - -接口:JSR 380(Bean Validation 2.0)、JSR 303(Bean Validation 1.0)JavaBean参数校验标准,核心接口javax.validation.Validator,定义了很多常用的校验注解。 -实现:hibernate-validator 、Spring: - -- hibernate-validator 是 JSR 380(Bean Validation 2.0)、JSR 303(Bean Validation 1.0)规范的实现,同时扩展了注解:@Email、@Length、@NotEmpty、@Range等。 -- Spring validtor 同样实现了JSR 380和JSR 303,并提供了MethodValidationPostProcessor类,用于对方法的校验。 - -产品可自主选择合适的校验框架,也可以自主开发实现外部数据校验。 - -**【反例】** - -```java -/** - * 更换公司信息 - * - * @param companies 新旧公司信息 - * @return 更换公司是否成功 - */ -@RequestMapping(value = "/updating", method = RequestMethod.POST) -public boolean updateCompany(@RequestBody Companies companies) { - return employeeService.updateCompany(companies.getSrcCompany(), - companies.getDestCompany()); -} -``` - -上面的错误代码,provider对外开放的`updateCompany()`接口未对请求体做校验,存在被恶意攻击的风险。 - -**【正例】** - -```java -/** - * 更换公司信息 - * - * @param companies 新旧公司信息 - * @return 更换公司是否成功 - */ -@RequestMapping(value = "/updating", method = RequestMethod.POST) -public boolean updateCompany(@RequestBody @Valid @NotNull Companies companies) { - return employeeService.updateCompany( - companies.getSrcCompany(), companies.getDestCompany()); -} - -@Setter -@Getter -public class Companies { - @Valid - @NotNull - private Company srcCompany; - - @Valid - @NotNull - private Company destCompany; -} - -@Setter -@Getter -@Accessors(chain = true) -public class Company { - @NotBlank - @Size(min = 10, max = 256) - private String name; - - @NotBlank - @Size(min = 10, max = 512) - private String address; - - @Valid - private SubCompany subCompany; -} -``` - -上述示例使用@Valid注解触发参数校验,校验逻辑为对象属性声明时通过注解指定的规则。对外接口内部调用的public方法`employeeService.updateCompany()`由于只有本模块使用,非对外接口,而且调用的地方已做参数校验,可以不做参数判断。 - -**【反例】** - -获取环境变量值后未校验,直接使用。 - -```java -public static String getFile(String filePath, String fileName) { - // 获取进程的classpath路径 - String path = System.getProperty(RUNTIME_BASE_DIR); - ... // 直接使用 -} -``` - -**【正例】** - -使用ClassLoader提供的`getResource()`和`getResourceAsStream()`从装载的类路径中取得资源。 - -```java -public static String getSavePath(String filePath, String fileName) { - return ClassLoader.getSystemResource(fileName).getPath(); -} -``` - -对环境变量的值先进行标准化处理,再执行校验,最后使用: - -```java -public static String getFile(String filePath, String fileName) { - // 获取进程的classpath路径 - String path = System.getProperty(RUNTIME_BASE_DIR); - - // 标准化 - // 校验,例如StringUtils.startsWith(path, "/opt/xxxx/release/"); - // 使用 -} -``` - -**【反例】** - -配置文件未校验,直接使用。 - -```java -@Configuration -@PropertySource("classpath:xxx.properties") -@Component -public class XxxConfig { - @Value("${appId}") - private String appId; - - @Value("${secret}") - private String citySecret; -} -``` - -**【正例】** - -Spring Boot框架可以使用注解@ConfigurationProperties和@Validated完成对配置文件的校验,如下所示: - -```java -@ConfigurationProperties(locations = "classpath: xxx.properties", prefix = "xxx") -@Validated -public class XxxConfig { - @Value("${appId}") - @Pattern(regexp = "[0-9_A-Z]{32}") - private String appId; - - @Value("${secret}") - @Pattern(regexp = "[0-9A-Z]{64,138}", message = "Authentication credential error!") - private String citySecret; - - // Setter和Getter方法 -} -``` - -ServiceComb框架,可以通过Java自带的validation-api,从Bean上下文取到配置文件对象后,显式调用检验。 - -## 禁止直接使用外部数据来拼接SQL语句 - -**【描述】** - -SQL注入是指使用外部数据构造的SQL语句所代表的数据库操作与预期不符,这样可能会导致信息泄露或者数据被篡改。SQL注入产生的根本原因是使用外部数据直接拼接SQL语句,防护措施主要有以下三类: - -- 使用参数化查询:最有效的防护手段,但对SQL语句中的表名、字段名等不适用; -- 对外部数据进行白名单校验:适用于拼接SQL语句中的表名、字段名; -- 对外部数据中的与SQL注入相关的特殊字符进行转义:适用于必须通过字符串拼接构造SQL语句的场景,转义仅对由引号限制的字段有效。 - -参数化查询是一种简单有效的防止SQL注入的查询方式,应该被优先考虑使用。另外,参数化查询还能提高数据库访问的性能,例如,SQL Server与Oracle数据库会为其缓存一个查询计划,以便在后续重复执行相同的查询语句时无需编译而直接使用。对于常用的ORM框架(如Hibernate、iBATIS等),同样支持参数化查询。 - -**【反例】**(Java代码动态构建SQL) - -```java -Statement stmt = null; -ResultSet rs = null; -try { - String userName = request.getParameter("name"); - String password = request.getParameter("password"); - ... - String sqlStr = "SELECT * FROM t_user_info WHERE name = '" + userName - + "' AND password = '" + password + "'"; - stmt = connection.createStatement(); - rs = stmt.executeQuery(sqlString); - ... // 结果集处理 -} catch (SQLException ex) { - // 处理异常 -} -``` - -上述示例中使用用户提交的用户名和密码构造SQL语句,验证用户名和密码信息是否匹配,通过字符串拼接的方式构造SQL语句,存在SQL注入。恶意用户在仅知道用户名时,通过`zhangsan' OR 'a' = 'a`和**任意密码**的方式就能完成上述代码中的查询。 - -**【正例】**(使用PreparedStatement进行参数化查询) - -```java -PreparedStatement stmt = null; -ResultSet rs = null; -try { - String userName = request.getParameter("name"); - String password = request.getParameter("password"); - ... // 确保userName和password的长度是合法的 - String sqlStr = "SELECT * FROM t_user_info WHERE name=? AND password =?"; - stmt = connection.prepareStatement(sqlStr); - stmt.setString(1, userName); - stmt.setString(2, password); - rs = stmt.executeQuery(); - ... // 结果集处理 -} catch (SQLException ex) { - // 处理异常 -} -``` - -参数化查询在SQL语句中使用占位符表示需在运行时确定的参数值,使得SQL查询的语义逻辑预先被定义,实际的查询参数值则在程序运行时再确定。参数化查询使得数据库能够区分SQL语句中语义逻辑和数据参数,以确保用户输入无法改变预期的SQL查询语义逻辑。如果攻击者输入userName为`zhangsan' OR 'a' = 'a`,该字符串仅会作为name字段的值来使用。 - -**【正例】**(对输入输入做转义) - -```java -public List queryBooks(List queryCondition) { - ... - try { - StringBuilder sb = new StringBuilder("select * from t_book where "); - Codec oe = new OracleCodec(); - if (queryCondition != null && !queryCondition.isEmpty()) { - for (Expression e : queryCondition) { - String exprString = e.getColumn() + e.getOperator(); - String safeValue = XXXEncoder.encodeForSQL(oe, e.getValue()); - sb.append(exprString).append("'").append(safeValue).append("' and "); - } - sb.append("1=1"); - Statement stat = connection.createStatement(); - ResultSet rs = stat.executeQuery(sb.toString()); - ... // 其他代码 - } - } - ... -} -``` - -虽然参数化查询是防止SQL注入最便捷有效的一种方式,但不是SQL语句中任何部分在执行前都能够被占位符所替代,因此,参数化查询无法应用于所有场景。当使用执行前不可被占位符替代的外部数据来动态构建SQL语句时,必须对外部数据进行校验。每种DBMS都有其特定的转义机制,通过这种机制来告诉数据库此输入应该被当作数据,而不应该是代码逻辑。因此,只要输入数据被适当转义,就不会发生SQL注入问题。 - -**注:**如果传入的是字段名或者表名,建议使用白名单的方式进行校验。 - -在存储过程中,通过拼接参数值来构建查询字符串,和在应用程序代码中拼接参数一样,同样是有SQL注入风险的。 - -**【反例】**(在存储过程中动态构建SQL) - -SQL Server存储过程: - -```sql -CREATE PROCEDURE sp_queryItem - @userName varchar(50), - @password varchar(50) -AS -BEGIN - DECLARE @sql nvarchar(500); - SET @sql = 'SELECT * FROM t_user_info - WHERE name= ''' + @userName + ''' - AND password= ''' + @password + ''''; - EXEC(@sql); -END -GO -``` - -在存储过程中,通过拼接参数值来构建查询字符串,和在应用程序代码中拼接参数一样,同样是有SQL注入风险的。 - -**【正例】**(在存储过程中进行参数化查询) - -SQL Server存储过程: - -```sql -CREATE PROCEDURE sp_queryItem - @userName varchar(50), - @password varchar(50) -AS -BEGIN - SELECT * FROM t_user_info - WHERE name = @userName - AND password = @password; -END -GO -``` - -存储过程使用参数化查询,而不包含不安全的动态SQL构建。数据库编译此存储过程时,会生成一个SELECT查询的执行计划,只允许原始的SQL语义被执行,任何参数值,即使是被注入的SQL语句也不会被执行。 - -## 禁止使用外部数据构造格式化字符串 - -**描述】** - -Java中的Format可以将对象按指定的格式转为某种格式的字符串,格式化字符串可以控制最终字符串的长度、内容、样式,当格式化字符串中指定的格式与格式对象不匹配时还可能会抛出异常。当攻击者可以直接控制格式化字符串时,可导致信息泄露、拒绝服务、系统功能异常等风险。 - -**【反例】** - -```java -public String formatInfo(String formatStr) { - String value = getData(); - return String.format(formatStr, value)); -} - -String formatStr = req.getParameter("format"); -String formattedValue = formatInfo(formatStr); -``` - -上面的示例代码中,直接使用外部指定的格式对字符串进行格式化,当外部指定的格式为非字符类型如%d,会导致格式化操作出现异常。 - -**【正例】** - -```java -public String formatInfo() { - String value = getData(); - return String.format("my format: %s", value)); -} -``` - -上述示例将用户输入排除在格式化字符串之外。 - -## 禁止向Runtime.exec()方法或java.lang.ProcessBuilder类传递外部数据 - -**【描述】** - -`Runtime.exec()`方法或`java.lang.ProcessBuilder`类被用来启动一个新的进程,在新进程中执行命令。命令执行通常会有两种方式: - -- 直接执行具体命令: 例如`Runtime.getRuntime().exec("ping 127.0.0.1")`; - -直接使用外部数据构造命令行,会存在以下风险: - -- 执行命令时,需要命令行解释器对命令字符串进行拆分,该方式可执行多条命令,存在命令注入风险; -- 直接执行具体的命令时,可以通过空格、双引号或以-/开头的字符串向命令行中注入参数,存在参数注入风险。 - -**外部数据用于构造非shell方式的命令行** - -**【反例】** - -```java -String cmd = "ping" + ip; -Runtime rt = Runtime.getRuntime(); -Process proc = rt.exec(cmd); -``` - -当ip的值为“ 127.0.0.1 -t”的时候,会向实际执行的命令中注入参数“-t”参数,导致ping进程持续执行。 - -针对命令注入或参数注入,具体的解决方案如下: - -1、**避免直接执行命令** - -对于Java的标准库或开源组件已经提供的功能,应使用标准库或开源组件的API,避免执行命令。 - -如果无法避免执行命令,则必须要对外部数据进行检查和过滤。 - -2、**对外部数据进行校验** - -**【正例】**(数据校验) - -```java -... -// str值来自用户输入 -if (!Pattern.matches("[0-9A-Za-z@]+", str)) { - // 处理错误 -} -... -``` - -外部数据用于拼接命令行时,可使用白名单方式对外部数据进行校验,保证外部数据中不含注入风险的特殊字符。 - -3、**对外部数据进行转义** - -**【正例】**(转义) - -```java -String encodeIp = XXXXEncoder.encodeForOS(new WindowsCodec(), ip); -String cmd = "cmd.exe /c ping " + encodeIp; -Runtime rt = Runtime.getRuntime(); -Process proc = rt.exec(cmd); -... -``` - -在执行命令行时,如果输入校验不能禁止有风险的特殊字符,需先外部输入进行转义处理,转义后的字段拼接命令行可有效防止命令注入的产生。 - -说明:正确的转义处理只是针对外部输入,而不是拼接后的完整命令行。转义方式只针对命令注入有效,对于参数注入无效。 - -## 禁止直接使用外部数据来拼接XML - -**【描述】** - -使用未经校验的数据来构造XML会导致XML注入漏洞。如果用户被允许输入结构化的XML片段,则用户可以在XML的数据域中注入XML标签来改写目标XML文档的结构和内容,XML解析器会对注入的标签进行识别和解释,引起注入问题。 - -**【反例】** - -```java -private void createXMLStream(BufferedOutputStream outStream, User user) - throws IOException { - String xmlString; - xmlString = "operator" + user.getUserId() - + "" + user.getDescription() + ""; - ... // 解析xml字符串 -} -``` - -恶意用户可能会使用下面的字符串作为用户ID: - -``` -"joeadministratorjoe" - -``` - -并使用如下正常的输入作为描述字段: - -``` -"I want to be an administrator" - -``` - -最终,整个XML字符串将变成如下形式: - -```xml - - operator - joe - administrator - joe - I want to be an administrator - -``` - -由于SAX解析器(org.xml.sax and javax.xml.parsers.SAXParser)在解释XML文档时会将第二个role域的值覆盖前一个role域的值,因此会导致此用户角色由操作员提升为了管理员。 - -**【反例】**(XML Schema或者DTD校验) - -```java -private void createXMLStream(BufferedOutputStream outStream, User user) - throws IOException { - String xmlString; - xmlString = "" + user.getUserId() - + "operator" + user.getDescription() - + ""; - - StreamSource xmlStream = new StreamSource(new StringReader(xmlString)); - - // 创建一个使用schema执行校验的SAX解析器 - SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - StreamSource ss = new StreamSource(new File("schema.xsd")); - try { - Schema schema = sf.newSchema(ss); - Validator validator = schema.newValidator(); - validator.validate(xmlStream); - } catch (SAXException ex) { - throw new IOException("Invalid userId", ex); - } - - // XML是有效的, 进行处理 - outStream.write(xmlString.getBytes(StandardCharsets.UTF_8)); - outStream.flush(); -} -``` - -如下是schema.xsd文件中的schema定义: - -```xml - - - - - - - - - - - -``` - -某个恶意用户可能会使用下面的字符串作为用户ID: - -``` -"joeAdministratorI want to be an administrator" - -``` - -最终,整个XML字符串将变成如下形式: - -```xml - - joe - Administrator - I want to be an administrator - -``` - -用户ID结尾处的``将会注释掉原本硬编码在XML字符串中的角色信息。虽然用户角色已经被攻击者篡改成管理员类型,但是整个XML字符串仍然可以通过schema的校验。XML schema或者DTD校验仅能确保XML的格式是有效的,而攻击者可以在不打破原有XML格式的情况下,对XML的内容进行篡改。 - -**【正例】**(白名单校验) - -```java -private void createXMLStream(BufferedOutputStream outStream, User user) - throws IOException { - // 仅当userID只包含字母、数字和下划线时写入XML字符串 - if (!Pattern.matches("[_a-bA-B0-9]+", user.getUserId())) { - // 处理错误 - } - if (!Pattern.matches("[_a-bA-B0-9]+", user.getDescription())) { - // 处理错误 - } - String xmlString = "" + user.getUserId() - + "operator" - + user.getDescription() + ""; - outStream.write(xmlString.getBytes(StandardCharsets.UTF_8)); - outStream.flush(); -} -``` - -这个方法使用白名单的方式对输入进行校验,要求输入的userId中只能包含字母、数字或者下划线。 - -**【正例】**(使用安全的XML库) - -```java -public static void buidlXML(FileWriter writer, User user) throws IOException { - Document userDoc = DocumentHelper.createDocument(); - Element userElem = userDoc.addElement("user"); - Element idElem = userElem.addElement("id"); - idElem.setText(user.getUserId()); - Element roleElem = userElem.addElement("role"); - roleElem.setText("operator"); - Element descrElem = userElem.addElement("description"); - descrElem.setText(user.getDescription()); - XMLWriter output = null; - try { - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setEncoding("UTF-8"); - output = new XMLWriter(writer, format); - output.write(userDoc); - output.flush(); - } finally { - // 关闭流 - } -} -``` - -上述示例中使用Dom4j来构建XML,Dom4j是一个定义良好、开源的XML工具库。Dom4j会对文本数据域进行XML编码,从而使得XML的原始结构和格式免受破坏。 - -这个例子中,攻击者如果输入如下字符串作为用户ID: - -``` -"joeAdministratorI want to be an administrator" - -``` - -则最终会生成如下格式的XML: - -```xml - - joe</id><role>Administrator</role><!-- - operator - --><description>I want to be an administrator - -``` - -可以看到,“<”与“>”经过XML编码后分别被替换成了 “**\<”**与”**\>**”,导致攻击者未能将其角色类型从操作员提升到管理员。 - -**【正例】**(编码) - -```java -private void createXMLStream(BufferedOutputStream outStream, User user) - throws IOException { - ... - String encodeUserId = XXXXEncoder.encodeForXML(user.getUserId()); - String encodeDec = XXXXEncoder.encodeForXML(user.getDescription()); - - String xmlString = "" + encodeUserId - + "operator" + encodeDec - + ""; - outStream.write(xmlString.getBytes(StandardCharsets.UTF_8)); - outStream.flush(); -} -``` - -上述示例中,对外部数据在拼接XML字符串前进行了编码处理,然后再构造XML字符串,这样就不会导致XML字符串结构被篡改。 - -## 防止解析来自外部的XML导致的外部实体(XML External Entity)攻击 - -**【描述】** - -XML实体包括内部实体和外部实体。外部实体格式:``或者``。Java中引入外部实体的协议包括http、https、ftp、file、jar、netdoc、mailto等。XXE漏洞发生在应用程序解析来自外部的XML数据或文件时没有禁止外部实体的加载,造成任意文件读取、内网端口扫描、内网网站攻击、DoS攻击等危害。 - -1.利用外部实体的引用功能实现任意文件的读取: - -```xml - - ]> - - Joe - &file; - ... - -``` - -2.使用参数实体和避免XML解析语法错误,构造恶意的实体解析: - -XML文件:构造参数实体 % start;% goodies;% end;% dtd定义一个恶意的combine.dtd - -```xml - - - - "> - - %dtd; - ]> -&all; -``` - -恶意DTD:combine.dtd中定义实体&all; - -```xml - - -``` - -甚至可以这样构造恶意的combine.dtd,将结果发送到目标地址,最后会获得file:///etc/fstab文件。 - -```xml - -"> -%send; -``` - -**【反例】** - -该示例中对来自外部的XML文件进行解析,没有禁止解析DTDs或者禁止解析外部实体。 - -```java -private void parseXmlFile(String filePath) { - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse(new File(filePath)); - ... // 解析xml文件中的内容 - } catch (ParserConfigurationException ex) { - // 处理异常 - } - ... -} -``` - -上述代码示例中解析XML文件时未进行安全防护,当解析的XML文件是攻击者恶意构造的,系统会受到XXE攻击。 - -**【正例】**(禁止解析DTDs) - -```java -private void parserXmlFileDisableDtds(String filePath) { - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); - dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse(new File(filePath)); - ... // 解析xml文件中的内容 - } catch (ParserConfigurationException ex) { - // 处理异常 - } - ... -} -``` - -代码中设置禁止解析DTDs属性,该方式不仅可以防止XML的外部实体攻击也能防止XML内部实体攻击。 - -**【正例】**(禁止解析外部一般实体和外部参数实体) - -该代码示例能防止外部实体(XXE)攻击,不能防止XML内部实体攻击。 - -```java -private void parserXmlFileDisableExternalEntityes(String filePath) { - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); - dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse(new File(filePath)); - ... // 解析xml文件中的内容 - } catch (ParserConfigurationException ex) { - // 处理异常 - } - ... -} -``` - -**【正例】**(对外部实体进行白名单校验) - -这个示例方法定义一个CustomResolver类来实现接口`org.xml.sax.EntityResolver`。在这个类中实现自定义的处理外部实体机制。自定义实体解析方法中使用一个简单的白名单,在白名单范围内的返回对应的文件内容,否则返回一个空的实体解析内容。 - -```java -private static void parserXmlFileValidateEntities(String filePath) { - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - db.setEntityResolver(new ValidateEntityResolver()); - Document doc = db.parse(new File(filePath)); - ... // 解析xml文件中的内容 - } catch (ParserConfigurationException ex) { - // 处理异常 - } - ... -} - -class ValidateEntityResolver implements EntityResolver { - private static final String GOOD_ENTITY = "file:/Users/onlinestore/good.xml"; - - public InputSource resolveEntity(String publicId, String systemId) - throws SAXException, IOException { - if (publicId != null && publicId.equals(GOOD_ENTITY)) { - return new InputSource(publicId); - } else if (systemId != null && systemId.equals(GOOD_ENTITY)) { - return new InputSource(systemId); - } else { - return new InputSource(); - } - } -} -``` - -当系统中涉及的XML操作中必须使用外部实体时,必须对外部实体进行白名单校验。具体的校验方式如上述代码,自定义一个`ValidateEntityResolver`类(实现接口`org.xml.sax.EntityResolver`),在`resolveEntity`方法中对XML中引入的实体进行白名单校验,拒绝解析非白名单中的外部实体。 - -备注:XML解析器非常多,不能一一列举。当程序加载来自外部的XML数据时,通过设置对该解析器生效的属性或其他方法达到禁止解析外部实体的目的,通过构建上面示例中有攻击行为的XML内容,查看程序反应来判断设置的属性是否已经生效。 - -## 防止解析来自外部的XML导致的内部实体扩展(XML Entity Expansion)攻击 - -**【描述】** - -XML内部实体是实体的内容已经在Doctype中声明。内部实体格式:``。内部实体攻击比较常见的是XML Entity Expansion攻击,它主要试图通过消耗目标程序的服务器内存资源导致DoS攻击。外部实体攻击和内部实体扩展攻击有不同的防护措施(禁止DTDs解析可以防护外部实体和内部实体攻击)。 - -解析下面恶意的XML内部实体,会占用大量服务器内存资源,导致拒绝服务攻击。 - -```xml - - - - - - - - - - - ]> -&lol9; -``` - -内部实体扩展攻击**最好的防护措施是禁止DTDs的解析**。也可以对内部实体数量进行限制,以消减内部实体扩展攻击发生的可能性。在不需要使用内部实体时,应该禁止DTDs解析,需要使用内部实体时,严格限制内部实体的数量及XML内容的大小。 - -**【正例】**(禁止解析DTDs) - -```java -public void receiveXMLStream(InputStream inStream) - throws ParserConfigurationException, SAXException, IOException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); - dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - DocumentBuilder db = dbf.newDocumentBuilder(); - db.parse(inStream); -} -``` - -**【正例】**(限制实体解析个数) - -Java中的JAXP解析器默认限制实体解析个数是64,000个,但通常不会需要解析这么多的实体个数,可以限制更小的实体解析个数。该代码示例中通过设置DOM解析器的属性限制解析实体个数。 - -```java -public void receiveXMLStream(InputStream inStream) - throws ParserConfigurationException, SAXException, IOException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setAttribute("http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit", - "200"); - DocumentBuilder db = dbf.newDocumentBuilder(); - db.parse(inStream); -} -``` - -备注:属性http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit在JDK 7u45+、JDK 8版本中支持。JAXP中的SAX和StAX类型解析器不支持该属性。 - -**【正例】**(限制实体解析个数) - -该代码示例中通过设置系统属性限制解析实体个数。 - -```java -public void receiveXMLStream(InputStream inStream) - throws ParserConfigurationException, SAXException, IOException { - - // 使用系统属性限制 - System.setProperty("entityExpansionLimit", "200"); - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - db.parse(inStream); -} -``` - -备注:系统属性entityExpansionLimit在JDK 7u45+、JDK 8版本中支持。JAXP中的SAX和StAX类型解析器同样生效。 - -有些产品使用Xerces第三方jar包提供的DOM、SAX、StAX类型解析器,该jar包中可以通过设置`setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true)`限制实体个数不能超过100,000个。 - -**【正例】**(限制解析实体个数) - -Xerces包中限制实体解析个数代码。 - -```java -private static void receiveXMLStream(InputStream inStream) - throws ParserConfigurationException, SAXException, IOException { - DocumentBuilderFactory factory = DocumentBuilderFactoryImpl.newInstance(); - factory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true); - DocumentBuilder db = factory.newDocumentBuilder(); - org.w3c.dom.Document doc = db.parse(inStream); - doc.getChildNodes(); -} -``` - -备注:XML解析器非常多,不能一一列举。当程序加载来自外部的XML数据时,通过设置对该解析器生效的属性或其他方法达到禁止解析内部实体的目的,通过构建上面示例中有攻击行为的XML内容,查看程序反应来判断设置的属性是否已经生效。 - -## 禁止使用不安全的XSLT转换XML文件 - -**【描述】** - -XSLT是一种样式转换标记语言,可以将XML数据转换为另外的XML或其他格式,如HTML网页,纯文字。因为XSLT的功能十分强大,可以导致任意代码执行,当使用TransformerFactory转换XML格式数据的时候,需要添加安全策略禁止不安全的XSLT代码执行。 - -**【反例】** - -```java -public void XsltTrans(String src, String dst, String xslt) { - // 获取转换器工厂 - TransformerFactory tf = TransformerFactory.newInstance(); - try { - // 获取转换器对象实例 - Transformer transformer = tf.newTransformer(new StreamSource(xslt)); - - // 进行转换 - transformer.transform(new StreamSource(src), - new StreamResult(new FileOutputStream(dst))); - ... - } catch (TransformerException ex) { - // 处理异常 - } - ... -} -``` - -这里xslt没有做任何限制,直接调用,当执行类似如下XSLT代码的时候,会导致命令执行漏洞: - -```xml - - - - - - - -``` - -**【正例】** - -```java -public void xsltTrans(String src, String dst, String xslt) { - // 获取转换器工厂 - TransformerFactory tf = TransformerFactory.newInstance(); - try { - // 转换器工厂设置黑名单,禁用一些不安全的方法,类似XXE防护 - tf.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true); - - // 获取转换器对象实例 - Transformer transformer = tf.newTransformer(new StreamSource(xslt)); - - // 去掉 - transformer.setOutputProperty("omit-xml-declaration", "yes"); - - // 进行转换 - transformer.transform(new StreamSource(src), - new StreamResult(new FileOutputStream(dst))); - ... - } catch (TransformerException ex) { - // 处理异常 - } - ... -} -``` - -TransformerFactory可以添加安全策略防护,Java对xslt内置了黑名单,这里通过将[http://javax.xml.XMLConstants/feature/secure-processing属性设置为true开启防护,可以禁用一些不安全的方法。](http://javax.xml.xmlconstants/feature/secure-processing属性设置为true开启防护,可以禁用一些不安全的方法。) - -## 正则表达式应该尽量简单,防止ReDos攻击 - -**【描述】** - -ReDos攻击是正则编写不当导致的常见安全风险。Java中提供的正则匹配使用的是NFA引擎。NFA引擎的回溯机制,导致当字符串文本与正则表达式不匹配时,所花费的时间要比匹配时多。即要确定匹配失败,需要与所有可能的路径进行对比匹配,证明都不匹配时,才返回匹配失败。当使用简单的非分组正则表达式时,一般不会存在ReDos攻击。容易存在ReDos攻击的正则表达式主要有两类: - -1、 包含具有自我重复的重复性分组的正则,例如: -`^(\d+)+$` -`^(\d*)*$` -`^(\d+)*$` -`^(\d+|\s+)*$` - -2、 包含替换的重复性分组,例如: -`^(\d|\d|\d)+$` -`^(\d|\d?)+$` - -对于ReDos攻击的防护手段主要包括: - -- 进行正则匹配前,先对匹配的文本的长度进行校验; -- 在编写正则时,尽量不要使用过于复杂的正则,尽量少用分组,例如对于正则`^(([a-z])+\.)+[A-Z]([a-z])+$`(存在ReDos风险),可以将多余的分组删除:`^([a-z]+\.)+[A-Z][a-z]+$`,这样在不改变检查规则的前提下消除了ReDos风险; -- 避免动态构建正则,当使用外部数据构造正则时,要使用白名单进行严格校验。 - -**【反例】** - -```java -private static final Pattern REGEX_PATTER = Pattern.compile("a(b|c+)+d"); - -public static void main(String[] args) { - ... - Matcher matcher = REGEX_PATTER.matcher(args[0]); - if (matcher.matches()) { - ... - } else { - ... - } - ... -} -``` - -上述示例代码中,正则表达式`a(b|c+)+d`存在ReDos风险,当匹配的字符串格式为”accccccccccccccccx”时,随中间的字符”c”的增加,代码执行时间将成指数级增长。 - -**【正例】** - -```java -private static final Pattern REGEX_PATTER = Pattern.compile("a[bc]+d"); - -public static void main(String[] args) { - ... - Matcher matcher = REGEX_PATTER.matcher(args[0]); - if (matcher.matches()) { - ... - } else { - ... - } - ... -} -``` - -上述代码中,将正则表达式精简为`a[bc]+d`,可以在实现相同功能的前提下消除ReDos风险。 - -**【反例】** - -```java -String key = request.getParameter("keyword"); -... -String regex = "[a-zA-Z0-9_-]+@" + key + "\\.com"; -Pattern searchPattern = Pattern.compile(regex); -... -``` - -上面的代码示例中,使用外部指定的keyword构造正则,当外部输入中使用了重复性分组,可能会导致最终的正则存在ReDos风险。在实际开发代码过程中,应避免直接使用外部数据构造正则或直接使用外部数据作为正则使用。 - -## 禁止直接使用外部数据作为反射操作中的类名/方法名 - -**【描述】** - -反射操作中直接使用外部数据作为类名或方法名,会导致系统执行非预期的逻辑流程(Unsafe Reflection)。这可被恶意用户利用来绕过安全检查或执行任意代码。当反射操作需要使用外部数据时,必须对外部数据进行白名单校验,明确允许访问的类或方法列表;另外也可以通过让用户在指定范围内选择的方式进行防护。 - -**【反例】** - -```java -String className = request.getParameter("class"); -... -Class objClass = Class.forName(className); -BaseClass obj = (BaseClass) objClass.newInstance(); -obj.doSomething(); -``` - -上述代码示例中,直接使用外部指定的类名通过反射构造了一个对象,恶意用户可利用此处构造一个任意的`BaseClass`子类的对象,当恶意用户可控制`BaseClass`的某个子类时,则可在该子类的`doSomething()`方法中执行任意代码。另外恶意用户还可以利用此代码执行任意类的默认构造方法,即使在进行类型转换时抛出`ClassCastException`,恶意用户预期的构造方法中的代码也已经执行。 - -**【正例】** - -```java -String classIndex = request.getParameter("classIndex"); -String className = (String) reflectClassesMap.get(classIndex); -if (className != null) { - Class objClass = Class.forName(className); - BaseClass obj = (BaseClass) objClass.newInstance(); - obj.doSomething(); -} else { - throw new IllegalStateException("Invalid reflect class!"); -} -... -``` - -上述示例代码中,外部只能指定要反射的类的代号,当代号可映射为一个指定的类名时,执行反射操作,否则判断为非法参数。 - -# 日志 - -#### 禁止直接使用外部数据记录日志 - -**【描述】** - -直接将外部数据记录到日志中,可能存在以下风险: - -- 日志注入:恶意用户可利用回车、换行等字符注入一条完整的日志; -- 敏感信息泄露:当用户输入敏感信息时,直接记录到日志中可能会导致敏感信息泄露; -- 垃圾日志或日志覆盖:当用户输入的是很长的字符串,直接记录到日志中可能会导致产生大量垃圾日志;当日志被循环覆盖时,这样还可能会导致有效日志被恶意覆盖。 - -所以外部数据应尽量避免直接记录到日志中,如果必须要记录到日志中,要进行必要的校验及过滤处理,对于较长字符串可以截断。对于记录到日志中的数据含有敏感信息时,对于秘钥、口令类的敏感信息,将这些敏感信息替换为固定长度的*,对于其他类的敏感信息(如手机号、邮箱等),先进行匿名化处理。 - -**【反例】** - -```java -String jsonData = getRequestBodyData(request); -if (!validateRequestData(jsonData)) { - LOG.error("Request data validate fail! Request Data : " + jsonData); -} -``` - -上述代码中,当请求的json数据校验失败,会直接将json字符串记录到日志中,当json字符串中含有敏感信息,会导致敏感信息泄露的风险,当恶意用户向json字符串中通过回车换行符注入伪造的日志会造成日志注入问题,当json字符串比较长时,会导致日志冗余。 - -**【正例】** - -外部数据记录到日志中前,将其中的\r\n等导致换行的字符进行替换,消除注入风险。如下代码为其中一种实现方式: - -```java -public String replaceCRLF(String message) { - if (message == null) { - return ""; - } - return message.replace('\n', '_').replace('\r', '_'); -} -``` - -#### 禁止在日志中记录口令、密钥等敏感信息 - -**【描述】** - -在日志中不能记录口令、密钥等敏感信息,包括这些敏感信息的加密密文,防止产生敏感信息泄露风险。若因为特殊原因必须要记录日志,应用固定长度的星号(*)代替这些敏感信息。 - -**【反例】** - -```java -private static final Logger LOGGER = Logger.getLogger(TestCase1.class); -... -LOGGER.info("Login success, user is " + userName + ", password is " + - encrypt(pwd.getBytes(StandardCharsets.UTF_8))); -``` - -**【正例】** - -```java -private static final Logger LOGGER = Logger.getLogger(TestCase1.class); -... -LOGGER.info("Login success, user is " + userName + ", password is ********."); -``` - -# 性能和资源管理 - -#### 进行IO类操作时,必须在try-with-resource或finally里关闭资源 - -**【描述】** - -申请的资源不再使用时,需要及时释放。而在产生异常时,资源释放常被忽视。因此要求在IO、数据库操作等需要显式调用关闭方法如`close()`释放资源时,必须在try-catch-finally的finally中调用关闭方法。如果有多个IO对象需要`close()`,需要分别对每个对象的`close()`方法进行try-catch,防止一个IO对象关闭失败导致其他IO对象都未关闭,保证产生异常时释放已申请的资源。 - -Java 7有自动资源管理的特性try-with-resource,不需手动关闭。它优先于try-finally,这样得到的代码将更加简洁、清晰,产生的异常也更有价值。特别是对于多个资源或异常时,try-finally可能丢失掉前面的异常,而try-with-resource会保留第一个异常,并把后续的异常作为Suppressed exceptions,可通过`getSuppressed()`返回的数组来检验。 - -try-finally也常用于`lock()`和`unlock()`等场景。 - -**【正例】** - -```java -try (FileInputStream in = new FileInputStream(inputFileName); - FileOutputStream out = new FileOutputStream(outputFileName)) { - copy(in, out); -} -``` - -# 其他 - -#### 全场景下必须使用密码学意义上的安全随机数 - -**【描述】** - -不安全的随机数可能被部分或全部预测到,导致系统存在安全隐患,安全场景下使用的随机数必须是密码学意义上的安全随机数。密码学意义上的安全随机数分为两类: - -- 真随机数产生器产生的随机数; -- 以真随机数产生器产生的少量随机数作为种子的密码学安全的伪随机数产生器产生的大量随机数。 - -Java中的`SecureRandom`是一种密码学安全的伪随机数产生器,对于使用非真随机数产生器产生随机数时,要使用少量真随机数作为种子。 - -常见安全场景包括但不限于以下场景: - -- 用于密码算法用途,如生成IV、盐值、密钥等; -- 会话标识(sessionId)的生成; -- 挑战算法中的随机数生成; -- 验证码的随机数生成; - -**【反例】** - -```java -public byte[] generateSalt() { - byte[] salt = new byte[8]; - Random random = new Random(123456L); - random.nextBytes(salt); - return salt; -} -``` - -`Random`生成是不安全随机数,不能用做盐值。 - -**【反例】** - -```java -public byte[] generateSalt() { - byte[] salt = new byte[8]; - SecureRandom random = new SecureRandom(); - random.nextBytes(salt); - return salt; -} -``` - -#### 必须使用SSLSocket代替Socket来进行安全数据交互 - -**【描述】** - -当网络通信中涉及明文的敏感信息时,需要使用SSLSocket而不是Socket,Socket是明文通信,攻击者可以通过网络监听获取其中的敏感信息,通过中间人攻击对报文进行恶意篡改。SSLSocket是在Socket的基础上进行了一个层安全性保护,包括身份认证、数据加密和完整性保护。 - -**【反例】** - -```java -try { - Socket socket = new Socket(); - socket.connect(new InetSocketAddress(ip, port), 10000); - os = socket.getOutputStream(); - os.write(userInfo.getBytes(StandardCharsets.UTF_8)); - ... -} catch (IOException ex) { - // 处理异常 -} finally { - // 关闭流 -} -``` - -上述代码中使用socket来明文传输报文信息,报文中的敏感信息存在泄露及篡改的风险。 - -**【正例】** - -```java -try { - SSLSocketFactory sslSocketFactory = - (SSLSocketFactory) SSLSocketFactory.getDefault(); - SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(ip, port); - os = sslSocket.getOutputStream(); - os.write(userInfo.getBytes(StandardCharsets.UTF_8)); - ... -} catch (IOException ex) { - // 处理异常 -} finally { - // 关闭流 -} -``` - -该正确代码示例中,SSLSocket来使用SSL/TLS安全协议保护传输的报文。 - -**【例外】** - -因为SSLSocket提供的报文安全传输机制,将造成巨大的性能开销。在以下情况下,普通的套接字就可以满足需求: - -- 套接字上传输的数据不敏感。 -- 数据虽然敏感,但是已经过恰当加密。 - -#### 禁止代码中包含公网地址 - -**【级别】** 要求 - -**【描述】** - -代码或脚本中包含用户不可见,不可知的公网地址,可能会引起客户质疑。 - -对产品发布的软件(包含软件包/补丁包)中包含的公网地址(包括公网IP地址、公网URL地址/域名、邮箱地址)要求如下: -1、禁止包含用户界面不可见、或产品资料未描述的未公开的公网地址。 -2、已公开的公网地址禁止写在代码或者脚本中,可以存储在配置文件或数据库中。 - -对于开源/第三方软件自带的公网地址必须至少满足上述第1条公开性要求。 - -**【例外】** - -对于标准协议中必须指定公网地址的场景可例外,如soap协议中函数的命名空间必须指定的一个组装的公网URL、http页面中包含w3.org网址、XML解析器中的Feature名等。 \ No newline at end of file diff --git a/website/docs/_posts/contribute/OpenHarmony-JavaScript-coding-style-guide.md b/website/docs/_posts/contribute/OpenHarmony-JavaScript-coding-style-guide.md deleted file mode 100644 index 14eb204b3ae6fe21cefd5e3a10c5fc39807630ed..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-JavaScript-coding-style-guide.md +++ /dev/null @@ -1,770 +0,0 @@ ---- -title: OpenHarmony-JavaScript-coding-style-guide.md -permalink: /pages/extra/b5a613/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# JavaScript语言通用编程规范 - -## 目的 -规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”, 如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。 -参考该规范之前,希望您具有相应的JavaScript语言基础能力,而不是通过该文档来学习JavaScript语言。 - -## 总体原则 -代码需要在保证功能正确的前提下,满足**可读、可维护、安全、可靠、可测试、高效、可移植**的特征要求。 - -## 约定 - -**规则**:编程时必须遵守的约定 -**建议**:编程时必须加以考虑的约定 - -无论是“规则”还是“建议”,都必须理解该条目这么规定的原因,并努力遵守。 - -## 例外 - -在不违背总体原则,经过充分考虑,有充足的理由的前提下,可以适当违背规范中约定。 -例外破坏了代码的一致性,请尽量避免。“规则”的例外应该是极少的。 - -下列情况,应风格一致性原则优先: -**修改外部开源代码、第三方代码时,应该遵守开源代码、第三方代码已有规范,保持风格统一。** - -## 编程规范 - -### 命名规范 - -#### 规则1.1 须使用正确的英文拼写进行命名,禁止使用拼音拼写。 - -**反例:**`xingming`、`zhanghao` - -**正例:**`username`、`account` - -#### 规则1.2 命名尽量少用缩写,除非是常见词或者业务线的领域词汇。比如:`context`可以简写成`ctx`,`request`可简写成`req`,`response`可简写成`resp`。 - -**说明:** 完整的单词拼写可以避免不必要的阅读障碍。 - -**例外:** 循环语种中可以使用`i`、`j`循环条件变量名。 - -#### 规则1.3 类名、枚举名、命名空间名采用`UpperCamelCase`风格。 - -**正例:** - -```javascript -// 类名 -class User { - constructor(username) { - this.username = username; - } - - sayHi() { - console.log(`hi, ${this.username}`); - } -} - -// 枚举名 -const UserType = { - TEACHER: 0, - STUDENT: 1 -}; - -// 命名空间 -const Base64Utils = { - encrypt: function(text) { - // todo encrypt - }, - decrypt: function(text) { - // todo decrypt - } -}; -``` - -#### 规则1.4 变量名、方法名、参数名采用`lowerCamelCase`风格。 - -**正例:** - -```javascript -let msg = 'Hello world'; - -function sendMsg(msg) { - // todo send message -} - -function findUser(userID) { - // todo find user by user ID -} -``` - -#### 规则1.5 静态常量名、枚举值名采用全部大写,单词间使用下划线隔开。 - -**正例:** - -```javascript -const MAX_USER_SIZE = 10000; - -const UserType = { - TEACHER: 0, - STUDENT: 1 -}; -``` - -#### 建议1.6 避免使用否定的布尔变量名,布尔型的局部变量或方法须加上表达是非意义的前缀。 - -**反例:** - -```javascript -let isNoError = true; -let isNotFound = false; -function empty() {} -function next() {} -``` - -**正例:** - -```javascript -let isError = false; -let isFound = true; -function isEmpty() {} -function hasNext() {} -``` - -### 代码格式 - -#### 规则2.1 采用2个空格缩进,禁止使用`tab`字符 - -**说明:** 只允许使用空格(space)进行缩进,每次缩进为2个空格。不允许使用Tab 符进行缩进。 - -**正例:** - -```javascript -const dataSource = [ - { - id: 1, - title: 'Title 1', - content: 'Content 1' - }, - { - id: 2, - title: 'Title 2', - content: 'Content 2' - } -]; - -function render(container, dataSource) { - if (!container || !dataSource || !dataSource.length) { - return void 0; - } - - const fragment = document.createDocumentFragment(); - for (let data of dataSource) { - if (!data || !data.id || !data.title || !data.content) { - continue; - } - const element = document.createElement("div"); - const textNode = document.createTextNode(`${data.title}: ${data.content}`); - element.appendChild(textNode); - element.setAttribute("id", data.id); - fragment.appendChild(element); - } - container.appendChild(fragment); -} - -``` - -#### 规则2.2 行宽不超过`120`个字符 - -**说明:** 建议每行字符数不要超过 120 个。如果超过120个字符,请选择合理的方式进行换行。 - -**例外:** 如果一行注释包含了超过120 个字符的命令或URL,则可以保持一行,以方便复制、粘贴和通过grep查找; 预处理的 error 信息在一行便于阅读和理解,即使超过 120 个字符。 - -#### 规则3.3 大括号的使用须遵循约定: - -1. 如果大括号内为空,则允许简写成`{}`,且无需换行; -2. 左大括号前不换行,括号后换行; -3. 右大括号前换行,括号后还有`else`、`catch`等情况下不换行,其他情况都换行。 - -#### 规则3.4 条件语句和循环语句的实现必须使用大括号包裹,即使只有一条语句。 - -**反例:** - -```javascript -if (condition) - console.log('success'); - -for(let idx = 0; idx < 5; ++idx) - console.log(idx); -``` - -**正例:** - -```javascript -if (condition) { - console.log('success'); -} - -for(let idx = 0; idx < 5; ++idx) { - console.log(idx); -} -``` - -#### 规则2.5 条件语句和循环语句都不允许写在同一行。 - -**反例:** - -```javascript -if (condition) { /* todo something */ } else { /* todo other */ } - -let idx = 0; -while(idx < 10) console.log(idx); -``` - -**正例:** - -```javascript -if (condition) { - /* todo something */ -} else { - /* todo other */ -} - -let idx = 0; -while(idx < 10) { - console.log(idx); -} -``` - -#### 规则2.6 `switch`语句的`case`和`default` 须缩进一层。 - -**正例:** - -```javascript -switch(condition) { - case 0: - doSomething(); - break; - case 1: { // 可以带括号也可以不带 - doOtherthing(); - break; - } - default: - break; -} -``` - -#### 规则2.7 表达式换行须保持一致性,运算符放行末。 - -**说明:** 较长的表达式,不满足行宽要求时,需要在适当的位置进行换行。一般在较低优先级运算符或连接符后面阶段,运算符或连接符放行末。运算符、连接符放在行末,表示“未结束,后续还有”。 - -**正例:** - -```javascript -// 假设条件语句超出行宽 -if (userCount > MAX_USER_COUNT || - userCount < MIN_USER_COUNT) { - doSomething(); -} - -const sum = - number1 + - number2 + - number3 + - number4 + - number5 + - number6 + - number7 + - number8 + - number9; -``` - -#### 规则2.8 多个变量定义和赋值语句不允许写在一行。 - -**反例:** - -```javascript -let maxCount = 10, isCompleted = false; - -let pointX, pointY; -pointX = 10; pointY = 0; -``` - -**正例:** - -```javascript -let maxCount = 10; -let isCompleted = false; - -let pointX = 0; -let pointY = 0; -``` - -#### 规则2.9 空格应该突出关键字和重要信息,避免不必要的空格。 - -**说明:** 空格可以减低代码密度,增加代码的可读性。总体规则如下: - -1. `if`、`elseif`、`else`、`switch`、`while`、`for`等关键字之后加空格; -2. 小括号内部两侧不加空格; -3. 大括号内部两侧须加空格,但`{}`等简单场景例外; -4. 多重括号之间不加空格; -5. 一元操作符(`&`、`*`、`+`、`-`、`!`等)之后不加空格; -6. 二元操作符(`=`、`+`、`-`、`*`、`/`、`%`、`|`、`&`、`||`、`&&`、`<`、`>`、`<=`、`>=`、`==`、`!=`、`===`、`!==`等)左右两侧加空格; -7. 三元运算符(`?: `)的两侧添加空格; -8. 前置或后置的自增、自减(`++`、`--`)和变量之间不加空格; -9. 逗号(`,`)前面不加空格,后面加空格; -10. 单行注释`//`后加空格; -11. 行尾不加空格。 - -#### 规则2.10 表达式语句须以分号结尾。 - -**反例:** - -```javascript -let username = 'jack' -let birthday = '1997-09-01' - -console.log(`${username}'s birthday is ${birthday}`) -``` - -**正例:** - -```javascript -let username = 'jack'; -let birthday = '1997-09-01'; - -console.log(`${username}'s birthday is ${birthday}`); -``` - -#### 建议2.11 优先使用单引号包裹字符串。 - -**正例:** - -```javascript -let message = 'wolrd'; -console.log(message); -``` - -### 代码规范 - -#### 规则3.1 声明变量时须使用`var`、`let`或`const`关键字进行声明,避免变量暴露到全局作用域上。 - -**说明:** 不使用`var`、`let`或`const`关键字声明变量,会导致将变量暴露到全局作用域上,这样可能会覆盖全局作用域上的同名变量,进而引发GC无法有效回收内存的问题;另外,当变量中包含敏感信息时,暴露到全局作用域可能会导致信息泄露问题。另外,**尽量对所有的引用使用`const`,不要使用 `var`;如果你一定需要可变动的引用,使用 `let` 代替 `var`**。因为`const`和`let`的作用域更小,写代码更容易控制;const可确保无法对引用重新赋值,const引用的指针不可变,重新赋值会报错,避免了不小心的重新赋值给覆盖了。 - -**反例:** - -```javascript -function open() { - url = 'http://127.0.0.1:8080'; //url会暴露到全局作用域上 - //todo something -} -open(); -console.log(url); //url可以被访问到,输出内容:http://127.0.0.1:8080 -``` - -**正例:** - -```javascript -function open() { - let url = 'http://127.0.0.1:8080'; - // todo something -} -open(); -console.log(url); //报错:Uncaught ReferenceError: url is not defined -``` - -```javascript -function open() { - const url = 'http://127.0.0.1:8080'; - //todo something -} -open(); -console.log(url); //报错:Uncaught ReferenceError: url is not defined -``` - -#### 规则3.2 函数块内须使用函数表达式声明函数 - -**说明:** 虽然很多 JS 引擎都支持块内声明函数,但它不属于 ECMAScript规范,各个浏览器糟糕的实现相互不兼容,有些也与未来 ECMAScript草案相违背。另外,ECMAScript5不支持块作用域,对于所有的控制流都不是独立的作用域,其内部声明的变量或者函数都是在其父函数或者脚本的作用域中,导致块内函数或者变量的声明会存在覆盖现象。如果确实需要在块中定义函数,应该使用函数表达式来初始化。 - -**反例:** - -```javascript -function bar(name) { - if (name === "hotel") { - // 1、定义一个foo函数,其作用域不是if代码块,而是bar函数作用域。 - function foo() { - console.log("hotel foo A"); - } - } else { - // 2、再重复定义一次foo函数,覆盖上面if条件分支下的foo函数定义。 - function foo() { - console.log("hotel foo 2"); - } - } - foo && foo(); -} -bar("hotel"); // 输出结果总是显示"hotel foo 2" -``` - -**正例:** - -```javascript -function bar(name) { - var foo; - if (name == "hotel") { - foo = function () { - console.log("hotel foo 1"); - }; - } else { - foo = function () { - console.log("hotel foo 2"); - } - } - foo && foo(); -} -bar("hotel"); // 正确输出"hotel foo 1" -``` - -#### 规则3.3 禁止封装基本类型 - -**说明:** JavaScript中有五种基本数据类型:Undefined、Null、Boolean、Number和String。基本数据类型的值是不可更改的。JavaScript中使用基本数据类型对象只是值,不包含器封装对象的方法和属性,在不需要使用属性和方法的时候,不需要使用其封装类型。 - -**反例:** - -```javascript -var isShow = new Boolean(false); -if (isShow) { - alert('hi'); //被执行,界面弹出显示:hi -} -``` - -**正例:** - -```javascript -var isShow = false; -if (isShow) { - alert('hi'); -} -``` - -#### 规则3.4 禁止使用`with` - -**说明:** 使用 with让你的代码在语义上变得不清晰,因为with的对象,可能会与局部变量产生冲突,从而改变程序原本的用义。 - -**反例:** - -```javascript -var foo = { x: 5 }; -with(foo) { - var x = 3; - console.log(x); //输出:5 -} -``` - -#### 规则3.5 `this`仅可在对象构造函数、方法、闭包中使用 - -**说明:** 在JavaScript里面,this指针代表的是执行当前代码的对象的所有者。this具有特殊的语义: - -+ 全局对象(大多数情况下) -+ 调用者的作用域(使用eval时) -+ DOM 树中的节点(添加事件处理函数时) -+ 新创建的对象(使用一个构造器) -+ 其他对象(如果函数被 call() 或 apply()) - -```javascript -var User = function(username) { - this.username = username; -}; -var user = new User('John'); -console.log(user.username); // 输出:John - -var ClickCounter = { - value: 0, - click: function() { - ++this.value; - }, - getValue() { - return this.value; - } -}; -console.log(Counter.getValue()); //输出:0 -Counter.click(); -console.log(Counter.getValue()); //输出:1 -``` - -#### 规则3.6 禁止使用IE下的条件注释 - -**说明:** 在IE下使用`\@cc_on`语句或使用`\@if`或`\@set`语句可以激活条件编译。尽管可以通过注释来兼容IE以外的浏览器,但它妨碍自动化工具的执行,因为在运行时,它们会改变JavaScript 语法树。 - -**反例:** - -```javascript -var f = function () { - /*@cc_on @*/ - /*@if (@_jscript_version >= 4) - alert("JavaScript version 4 or better"); - @else @*/ - alert("Conditional compilation not supported by this scripting engine."); - /*@end @*/ -}; -``` - -#### 规则3.7 禁止修改内置对象的原型 - -**说明:** 内置对象作为一套公共接口,具有约定俗成的行为方式,修改其原型,可能破坏接口语义,或导致调试时的诡异现象。 - -**反例:** - -```javascript -Array.prototype.indexOf = function () { return -1 } -var arr = [1, 1, 1, 1, 1, 2, 1, 1, 1]; -console.log(aar.indexOf(2)); // 输出:-1 -``` - -#### 规则3.8 禁止直接使用`Object.prototype`的内置属性 - -**说明:** ECMAScript5.1新增了`Object.create`,它创建一个新对象,使用现有的对象来提供新创建的对象的proto。`Object.create(null)`是用于创建用作map的对象的常用模式。当该对象具有`Object.prototype`同名的属性时,可能会导致意外行为或漏洞。例如,web服务器解析来自客户端的JSON输入并且使用`hasOwnProperty`直接调用生成的对象是不安全的,因为恶意客户端可能会发送类似的JSON值`'{ "hasOwnProperty": 1 }'` 并导致服务器崩溃。 - -**反例:** - -```javascript -var hasBarProperty = foo.hasOwnProperty("bar"); -var isPrototypeOfBar = foo.isPrototypeOf(bar); -var barIsEnumerable = foo.propertyIsEnumerable("bar"); -``` - -**正例:** - -```javascript -var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar"); -var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar); -var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar"); -``` - -#### 规则3.9 使用`Object.getPrototypeOf`函数而不要使用`_proto_` - -说明:ES5引入`Object.getPrototypeOf`函数作为获取对象原型的标准API,但在这之前大量的JavaScript引擎早就使用一个特殊的`proto`属性来达到相同的目的。然而,`proto`它本质上是一个内部属性,而不是一个正式的对外的API,目前浏览器必须部署这个属性,但其他运行环境不一定部署,因此,该属性并不是完全兼容的。例如,对于拥有null原型的对象,不同的环境处理的不一样。 - -```javascript -var empty = Object.create(null); -"_proto_" in empty; //有些环境返回false,有些环境返回true -``` - -所以无论从语义的角度,还是从兼容性的角度,都不要使用proto这个属性,而是使用`Object.getPrototypeOf()`来代替。无论在什么环境中,`Object.getPrototypeOf`函数都是有效的,而且也是提取对象原型更加标准、可移植的方法。 - -#### 规则3.10 不要使用函数构造器创建函数 - -说明:定义函数的方法包括3种:函数声明、Function构造函数和函数表达式。不管用哪种方法定义函数,它们都是Function对象的实例,并将继承Function对象所有默认或自定义的方法和属性。以函数构造器创建函数的方式类似于字符串`eval()`,可以接受任何字符串形式作为它的函数体,这就会有安全漏洞的风险。 - -**反例:** - -```javascript -var func = new Function('a', 'b', 'return a + b'); -var func2 = new Function('alert("Hello")'); -``` - -**正例:** - -```javascript -function func(a, b) { - return a + b; -} - -var func2 = function(a, b) { - return a + b; -} -``` - -#### 建议3.11 在使用原型`prototype`实现继承时,尽量使用现有稳定的库方法而非自行实现 - -**说明:** 多级原型结构是指JavaScript中的继承关系。当定义一个D类,且把B类作为其原型,那么就获得了一个多级原型结构。这些原型结构会变得很复杂。使用现有的稳定的库方法如`the Closure`库的`goog.inherits()`或其他类似的函数,可避免不必要的编码失误,将是更好的选择。 - -#### 建议3.12 定义类时,应在原型下定义方法,在构造方法内定义属性 - -**说明:** JavaScript中有多种方法可以给构造函数添加方法或成员,但是使用原型定义方法,可以降低内存占用,提高运行效率。 - -**反例:** - -```javascript -function Animals() { - this.walk = function() {}; // 这样会导致每个实例上都创建一个walk方法 -} -``` - -**正例:** - -```javascript -function Animals() {} - -Animals.prototype.walk = function() {}; -``` - -#### 建议3.13 使用闭包时,应避免构成循环引用,导致内存泄露 - -**说明:** JavaScript是一种垃圾收集式语言,其对象的内存是根据对象的创建分配给该对象的,并且会在没有对该对象的引用时由浏览器收回。JavaScript的垃圾收集机制本身并没有问题,但浏览器在为DOM对象分配和恢复内存的方式上有些出入。IE和Firefox均使用引用计数来为DOM对象处理内存。在引用计数系统中,每个所引用的对象都会保留一个计数,以获悉有多少对象正在引用它。如果计数为零,那么该对象就会被销毁,其占用的内存也会返回给堆。虽然这种解决方案总的来说还算有效,但是在循环引用方面却存在一些盲点。 当两个对象互相引用时,就构成了循环引用,其中对象的引用计数值都被赋为1。在纯垃圾收集系统中,循环引用问题不大:如果涉及的两个对象中有一个对象被任何其他对象引用,那么这两个对象都将被垃圾收集。而在引用计数系统中,这两个对象都不能被销毁,原因是引用计数永远不能为0。在同时使用了垃圾收集和引用计数的混合系统中,将会发生泄漏,因为系统不能正确识别循环引用。在这种情况下,DOM对象和JavaScript对象均不能被销毁。 循环引用很容易创建。在JavaScript最为方便的编程结构之一——闭包中,循环引用尤其突出。闭包会持有其外部作用域(包括局部变量、参数及方法)的引用,当闭包本身又被作用域成员(常见于DOM对象)持有时便构成循环引用,进一步导致内存泄露。 - -**反例:** - -```javascript -function setClickListener(element, a, b) { - element.onclick = function() { - // 在这里用到a和b - }; -}; -``` - -在上述代码中,即使没有使用element,闭包也保留了element、a和b的引用。由于element也保留了对闭包的引用,因此产生了循环引用,不能被GC回收。 - -**正例:** - -```javascript -function setClickListener(element, a, b) { - element.onclick = createHandler(a, b); -} - -function createHandler(a, b) { - // 通过添加另外一个函数来避免闭包本身,进而组织内存泄露 - return function() { - // 在这里用到a和b - } -} -``` - -#### 建议3.14 警惕JavaScript的浮点数 - -**说明:** JavaScript具有单一数字类型:`IEEE 754`双精度浮点数。拥有单一数字类型是JavaScript的最佳功能之一。多种数字类型可能是复杂性,混淆和错误的根源。但是,二进制浮点类型有一个最大的缺点是,它不能准确地表示小数部分,会导致让人意外的精度问题,见下面示例。 - -示例代码1: - -```javascript -console.log(0.1 + 0.2 === 0.3); // 输出:false。所以通常禁止直接使用==或===来比较浮点数。 -``` - -示例代码2: - -```javascript -var sum1 = (0.1 + 0.2) + 0.3; -console.log(sum1); // 输出:0.6000000000000001 - -var sum2 = 0.1 + (0.2 + 0.3); -console.log(sum2); // 输出:0.6。所以对于二进制浮点数,(a + b) + c 不能保证产生于a + (b + c)相同的结果。 -``` - -有效的解决方法有以下几种: - -1. 尽可能的采用整数值运算,因为整数在表示是不需要舍入; - -2. 使用JavaScript的原生方法`Number.prototype.toFixed(digits)`,`digist`参数表示小数点后数字的个数,不使用指数法,在必要时会进行四舍五入。使用该方法,在判断浮点数运算结果前对计算结果进行精度缩小。示例代码如下所示: - - ```javascript - parseFloat(0.1 + 0.2).toFixed(1); //0.3 - ``` - -3. ES6 新增了一个极小的常量`Number.EPSILON =.220446049250313e-16 `,约等于`0.00000000000000022204`。`Number.EPSILON`的出现是用来判断浮点数的计算误差,如果浮点数计算得到的误差不超过`Number.EPSILON`的值,就表示可以接受这样的误差。示例代码如下所示: - - ```javascript - function isNumberEquals(one, other) { - return Math.abs(one - other) < Number.EPSILON; - } - var one = 0.1 + 0.2; - var other = 0.3; - console.log(isNumberEquals(one, other)); // 输出:true - ``` - -4. 使用一些支持精确运算的类库方法,如`math.js` - - ```html - - - - - - - - - - - - ``` - -#### 建议3.15 不要使用可变参数的Array构造函数 - -**说明:** 通常不鼓励使用构造函数`new Array`的方法来构造新数组,因为当构造函数只有一个参数的时候,可能会导致意外情况,另外Array的全局定义也可能被重新修改,所以提倡使用数组文字表示法来创建数组,也就是`[]`表示法。 -**反例:** - -```javascript -const arr1 = new Array(x1, x2, x3); -const arr2 = new Array(x1, x2); -const arr3 = new Array(x1); -const arr4 = new Array(); -``` - -除了第三种情况之外,其他都可以正常工作,如果`x1`是个整数,那么`arr3`就是长度为`x1`,值都为`undefined`的数组。如果`x1`是其他任何数字,那么将抛出异常,如果它是其他任何东西,那么它将是单元数组。 - -**正例:** - -```javascript -const arr1 = [x1, x2, x3]; -const arr2 = [x1, x2]; -const arr3 = [x1]; -const arr4 = []; -``` - -这种写法,就会省去很多麻烦。 - -同理,对于对象,同样不要使用`new Object()`,而是使用`{}`来创建。 - -#### 规则3.16 构建字符串时,优先使用字符串模板而不是字符串链接。 - -**说明:** 模板字符串表达更简洁,更具可读性。 - -**反例:** - -```javascript -function sayHi(name) { - console.log('hi, ' + name); -} -``` - -**正例:** - -```javascript -function sayHi(name) { - console.log(`hi, ${name}`); -} -``` - -#### 规则3.17 数组遍历采用`for...of`,对象遍历采用`for...in`。 - -**反例:** - -```javascript -let numbers = [1, 2, 3, 4]; -let sum = 0; -for (let number in numbers) { - sum += number; -} -// sum === 00123; -``` - -**正例:** - -```javascript -let numbers = [1, 2, 3, 4]; -let sum = 0; -for (let number of numbers) { - sum += number; -} -// sum === 10 -``` - diff --git a/website/docs/_posts/contribute/OpenHarmony-c-coding-style-guide.md b/website/docs/_posts/contribute/OpenHarmony-c-coding-style-guide.md deleted file mode 100644 index b513cb2a6a0e405c33fbb3b8cc001bba989bfbd5..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-c-coding-style-guide.md +++ /dev/null @@ -1,2016 +0,0 @@ ---- -title: OpenHarmony-c-coding-style-guide.md -permalink: /pages/extra/29cfe8/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# C语言编程规范 - -## 目的 -规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”, 如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。 -参考该规范之前,希望您具有相应的C语言基础能力,而不是通过该文档来学习C语言。 -1. 了解C语言的ISO标准; -2. 熟知C语言的基本语言特性; -3. 了解C语言的标准库; - -## 总体原则 -代码需要在保证功能正确的前提下,满足**可读、可维护、安全、可靠、可测试、高效、可移植**的特征要求。 - -## 约定 - -**规则**:编程时必须遵守的约定 -**建议**:编程时必须加以考虑的约定 - -无论是“规则”还是“建议”,都必须理解该条目这么规定的原因,并努力遵守。 - -## 例外 - -在不违背总体原则,经过充分考虑,有充足的理由的前提下,可以适当违背规范中约定。 -例外破坏了代码的一致性,请尽量避免。“规则”的例外应该是极少的。 - -下列情况,应风格一致性原则优先: -**修改外部开源代码、第三方代码时,应该遵守开源代码、第三方代码已有规范,保持风格统一。** - - -# 1 命名 - -命名包括文件、函数、变量、类型、宏等命名。 - -命名被认为是软件开发过程中最困难,也是最重要的事情。 -标识符的命名要清晰、明了,有明确含义,符合阅读习惯,容易理解。 - -统一的命名风格是一致性原则最直接的体现。 - - -## 总体风格 - -**驼峰风格(CamelCase)** -大小写字母混用,单词连在一起,不同单词间通过单词首字母大写来分开。 -按连接后的首字母是否大写,又分: **大驼峰(UpperCamelCase)**和**小驼峰(lowerCamelCase)** - -**内核风格(unix_like)** -内核风格又称蛇形风格。单词小写,用下划线分割。 -如:'test_result' - -### 规则1.1 标识符命名使用驼峰风格 - -| 类型 | 命名风格 | -|-|-| -| 函数,结构体类型,枚举类型,联合体类型 | 大驼峰 | -| 变量,函数参数,宏参数,结构体中字段,联合体中成员 | 小驼峰 | -| 宏,常量,枚举值,goto 标签 | 全大写,下划线分割 | - -注意: -上表中`常量`是指,全局作用域下,const 修饰的基本数据类型、枚举、字符串类型的变量,不包括数组、结构体和联合体。 -上表中`变量`是指除常量定义以外的其他变量,均使用小驼峰风格。 -对于更亲和Linux/Unix的代码,可以使用内核风格。 -已使用内核命名风格的代码,可以选择继续使用内核风格。 -不管什么样的命名风格,都应该保证同一函数或结构体、联合体内的命名风格是一致的。 - -### 建议1.1 作用域越大,命名应越精确 - -C 与 C++ 不同,没有名字空间,没有类,所以全局作用域下的标识符命名要考虑不要冲突。 -对于全局函数、全局变量、宏、类型名、枚举名的命名,应当精确描述并全局唯一。 - -例: -```c -int GetCount(void); // Bad: 描述不精确 -int GetActiveConnectCount(void); // Good -``` - -为了命名更精确,必要时可以增加模块前缀。 -模块前缀与命名主体之间,按驼峰方式连接。 -示例: -```c -int PrefixFuncName(void); // OK: 驼峰方式,形式上无前缀,内容上有前缀 - -enum XxxMyEnum { // OK. - ... -}; -``` - -## 文件命名 - -### 建议1.2 文件命名统一采用小写字符 - -文件名命名只允许使用小写字母、数字以及下划线(\_)。 -文件名应尽量简短、准确、无二义性。 -不大小写混用的原因是,不同系统对文件名大小写处理会不同(如 MicroSoft 的 DOS, Windows 系统不区分大小写,但是 Unix / Linux, Mac 系统则默认区分)。 - -好的命名举例: -`dhcp_user_log.c` - -坏的命名举例: -`dhcp_user-log.c`: 不推荐用'\-'分隔 -`dhcpuserlog.c`: 未分割单词,可读性差 - -## 函数命名 - -函数命名统一使用大驼峰风格。 - -### 建议1.3 函数的命名遵循阅读习惯 - -动作类函数名,可以使用动宾结构。如: -```c -AddTableEntry() // OK -DeleteUser() // OK -GetUserInfo() // OK -``` -判断型函数,可以用形容词,或加 is: -```c -DataReady() // OK -IsRunning() // OK -JobDone() // OK -``` -数据型函数: -```c -TotalCount() // OK -GetTotalCount() // OK -``` - -## 变量命名 - -变量命名使用小驼峰风格,包括全局变量,局部变量,函数声明或定义中的参数,带括号宏中的参数。 - -### 规则1.2 全局变量应增加 'g_' 前缀,函数内静态变量命名不需要加特殊前缀 - -全局变量应当尽量少使用,使用时应特别注意,所以加上前缀用于视觉上的突出,促使开发人员对这些变量的使用更加小心。 -全局静态变量命名与全局变量相同,函数内的静态变量命名与普通局部变量相同。 - -```c -int g_activeConnectCount; - -void Func(void) -{ - static int pktCount = 0; - ... -} -``` - -注意: -常量本质也是全局变量,但如果命名风格是全大写,下划线连接的格式,则不适用当前规则。 - -### 建议1.4 局部变量应该简短,且能够表达相关含义 - -函数局部变量的命名,在能够表达相关含义的前提下,应该简短。 - -如下: -```c -int Func(...) -{ - enum PowerBoardStatus powerBoardStatusOfSlot; // Not good: 局部变量有点长 - powerBoardStatusOfSlot = GetPowerBoardStatus(slot); - if (powerBoardStatusOfSlot == POWER_OFF) { - ... - } - ... -} -``` -更好的写法: -```c -int Func(...) -{ - enum PowerBoardStatus status; // Good: 结合上下文,status 已经能明确表达意思 - status = GetPowerBoardStatus(slot); - if (status == POWER_OFF) { - ... - } - ... -} -``` -类似的, tmp 可以用来称呼任意类型的临时变量。 -过短的变量命名应慎用,但有时候,单字符变量也是允许的,如用于循环语句中的计数器变量: -```c -int i; -... -for (i = 0; i < COUNTER_RANGE; i++) { - ... -} -``` -或一些简单的数学计算函数中的变量: -```c -int Mul(int a, int b) -{ - return a * b; -} -``` - -## 类型命名 - -类型命名采用大驼峰命名风格。 -类型包括结构体、联合体、枚举类型名。 - -例: -```c -struct MsgHead { - enum MsgType type; - int msgLen; - char *msgBuf; -}; - -union Packet { - struct SendPacket send; - struct RecvPacket recv; -}; - -enum BaseColor { - RED, // 注意,枚举类型是大驼峰,枚举值应使用宏风格 - GREEN, - BLUE -}; - -typedef int (*NodeCmpFunc)(struct Node *a, struct Node *b); -``` - -通过 typedef 对结构体、联合体、枚举起别名时,尽量使用匿名类型。 -若需要指针自嵌套,可以增加 'tag' 前缀或下划线后缀。 -```c -typedef struct { // Good: 无须自嵌套,使用匿名结构体 - int a; - int b; -} MyType; // 结构体别名用大驼峰风格 -``` -```c -typedef struct tagNode { // Good: 使用 tag 前缀。这里也可以使用 'Node_'代替也可以。 - struct tagNode *prev; - struct tagNode *next; -} Node; // 类型主体用大驼峰风格 -``` - -## 宏、常量、枚举命名 - -宏、枚举值采用全大写,下划线连接的格式。 -常量推荐采用全大写,下划线连接风格。作为全局变量,也可以保持与普通全局变量命名风格相同。 -这里常量如前文定义,是指基本数据类型、枚举、字符串类型的全局 const 变量。 - -函数式宏,命名风格,采用全大写,下划线连接风格。 -例外情况: -1、用宏实现泛型功能的函数。如:实现list,map等功能的宏。可以与函数的命名方式相同,使用大驼峰命名风格。 -2、函数接口发生变更为兼容老版本时,使用函数同宏进行替代。可以与函数的命名方式相同,使用大驼峰命名风格。 -3、日志打印宏。可以与函数的命名方式相同,使用大驼峰命名风格。 -注:使用大驼峰命名的函数式宏,需要在接口说明中标注为宏。 - -宏举例: -```c -#define PI 3.14 -#define MAX(a, b) (((a) < (b)) ? (b) : (a)) -``` -```c -#ifdef SOME_DEFINE -void Bar(int); -#define Foo(a) Bar(a) // 特殊场景,用大驼峰风格命名函数式宏 -#else -void Foo(int); -#endif -``` - -常量举例: -```c -const int VERSION = 200; // OK. - -const enum Color DEFAULT_COLOR = BLUE; // OK. - -const char PATH_SEP = '/'; // OK. - -const char * const GREETINGS = "Hello, World!"; // OK. -``` - -非常量举例: -```c -// 结构体类型,不符合常量定义 -const struct MyType g_myData = { ... }; // OK: 用小驼峰 - -// 数组类型,不符合常量定义 -const int g_xxxBaseValue[4] = { 1, 2, 4, 8 }; // OK: 用小驼峰 - -int Foo(...) -{ - // 局部作用域,不符合常量定义 - const int bufSize = 100; // OK: 用小驼峰 - ... -} -``` - -枚举举例: -```c -// 注意,枚举类型名用大驼峰,其下面的取值是全大写,下划线相连 -enum BaseColor { - RED, - GREEN, - BLUE -}; -``` - -### 建议1.5 避免函数式宏中的临时变量命名污染外部作用域 - -首先,**定义函数式宏前,应考虑能否定义为函数。如果可以则不要定义为函数式宏。** - -当函数式宏需要定义局部变量时,为了防止跟外部函数中的局部变量有命名冲突。 - -后置下双划线,是一种解决方案。 例: -```c -#define SWAP_INT(a, b) do { \ - int tmp__ = a; \ - a = b; \ - b = tmp__; \ -} while (0) -``` - -# 2 排版格式 - -## 行宽 - -### 规则2.1 行宽不超过 120 个字符 - -代码行宽不宜过长,否则不利于阅读。 -控制行宽长度可以间接的引导开发去缩短函数、变量的命名,减少嵌套的层数,提升代码可读性。 -要求每行字符数不要超过 **120** 个;除非超过 **120** 能显著增加可读性,并且不会隐藏信息。 -虽然现代显示器分辨率已经很高,但是行宽过长,反而提高了阅读理解的难度;跟本规范提倡的“清晰”、“简洁”原则相背。 - -如下场景不宜换行,可以例外: -- 换行会导致内容截断,无法被方便查找(grep)的字符串,如命令行或 URL 等等。包含这些内容的代码或注释,可以适当例外。 -- \#include / \#error 语句可以超出行宽要求,但是也需要尽量避免。 - -例: -```c -#ifndef XXX_YYY_ZZZ -#error Header aaaa/bbbb/cccc/abc.h must only be included after xxxx/yyyy/zzzz/xyz.h -#endif -``` -## 缩进 - -### 规则2.2 使用空格进行缩进,每次缩进4个空格 - -只允许使用空格(space)进行缩进,每次缩进为 **4** 个空格。不允许使用Tab键进行缩进。 -当前几乎所有的集成开发环境(IDE)和代码编辑器都支持配置将Tab键自动扩展为**4**空格输入,请配置你的代码编辑器支持使用空格进行缩进。 - -## 大括号 - -### 规则2.3 使用 K&R 缩进风格 - -**K&R风格** -换行时,函数左大括号另起一行放行首,并独占一行;其他左大括号跟随语句放行末。 -右大括号独占一行,除非后面跟着同一语句的剩余部分,如 do 语句中的 while,或者 if 语句的 else/else if,或者逗号、分号。 - -如: -```c -struct MyType { // Good: 跟随语句放行末,前置1空格 - ... -}; // Good: 右大括号后面紧跟分号 - -int Foo(int a) -{ // Good: 函数左大括号独占一行,放行首 - if (...) { - ... - } else { // Good: 右大括号与 else 语句在同一行 - ... - } // Good: 右大括号独占一行 -} -``` - -## 函数声明和定义 - -### 规则2.4 函数声明、定义的返回类型和函数名在同一行;函数参数列表换行时应合理对齐 - -在声明和定义函数的时候,函数的返回值类型应该和函数名在同一行。 - -函数参数列表换行时,应合理对齐。 -参数列表的左圆括号总是和函数名在同一行,不要单独一行;右圆括号总是跟随最后一个参数。 - -换行举例: -```c -ReturnType FunctionName(ArgType paramName1, ArgType paramName2) // Good:全在同一行 -{ - ... -} - -ReturnType VeryVeryVeryLongFunctionName(ArgType paramName1, // 行宽不满足所有参数,进行换行 - ArgType paramName2, // Good:和上一行参数对齐 - ArgType paramName3) -{ - ... -} - -ReturnType LongFunctionName(ArgType paramName1, ArgType paramName2, // 行宽限制,进行换行 - ArgType paramName3, ArgType paramName4, ArgType paramName5) // Good: 换行后 4 空格缩进 -{ - ... -} - -ReturnType ReallyReallyReallyReallyLongFunctionName( // 行宽不满足第1个参数,直接换行 - ArgType paramName1, ArgType paramName2, ArgType paramName3) // Good: 换行后 4 空格缩进 -{ - ... -} -``` - -## 函数调用 - -### 规则2.5 函数调用参数列表换行时保持参数进行合理对齐 - -函数调用时,函数参数列表如果换行,应该进行合理的参数对齐。 -左圆括号总是跟函数名,右圆括号总是跟最后一个参数。 - -换行举例: -```c -ReturnType result = FunctionName(paramName1, paramName2); // Good:函数参数放在一行 - -ReturnType result = FunctionName(paramName1, - paramName2, // Good:保持与上方参数对齐 - paramName3); - -ReturnType result = FunctionName(paramName1, paramName2, - paramName3, paramName4, paramName5); // Good:参数换行,4 空格缩进 - -ReturnType result = VeryVeryVeryLongFunctionName( // 行宽不满足第1个参数,直接换行 - paramName1, paramName2, paramName3); // 换行后,4 空格缩进 -``` - -如果函数调用的参数存在内在关联性,按照可理解性优先于格式排版要求,对参数进行合理分组换行。 -```c -// Good:每行的参数代表一组相关性较强的数据结构,放在一行便于理解 -int result = DealWithStructureLikeParams(left.x, left.y, // 表示一组相关参数 - right.x, right.y); // 表示另外一组相关参数 -``` - -## 条件语句 - -### 规则2.6 条件语句必须要使用大括号 - -我们要求条件语句都需要使用大括号,即便只有一条语句。 -理由: -- 代码逻辑直观,易读; -- 在已有条件语句代码上增加新代码时不容易出错; -- 对于在条件语句中使用函数式宏时,没有大括号保护容易出错(如果宏定义时遗漏了大括号)。 - -```c -if (objectIsNotExist) { // Good:单行条件语句也加大括号 - return CreateNewObject(); -} -``` - -### 规则2.7 禁止 if/else/else if 写在同一行 - -条件语句中,若有多个分支,应该写在不同行。 - -如下是正确的写法: -```c -if (someConditions) { - ... -} else { // Good: else 与 if 在不同行 - ... -} -``` - -下面是不符合规范的案例: -```c -if (someConditions) { ... } else { ... } // Bad: else 与 if 在同一行 -``` - -## 循环 - -### 规则2.8 循环语句必须使用大括号 - -和条件表达式类似,我们要求for/while循环语句必须加上大括号,即便循环体是空的,或循环语句只有一条。 -```c -for (int i = 0; i < someRange; i++) { // Good: 使用了大括号 - DoSomething(); -} -``` -```c -while (condition) { } // Good:循环体是空,使用大括号 -``` -```c -while (condition) { - continue; // Good:continue 表示空逻辑,使用大括号 -} -``` - -坏的例子: -```c -for (int i = 0; i < someRange; i++) - DoSomething(); // Bad: 应该加上括号 -``` -```c -while (condition); // Bad:使用分号容易让人误解是while语句中的一部分 -``` - -## switch语句 - -### 规则2.9 switch 语句的 case/default 要缩进一层 - -switch 语句的缩进风格如下: -```c -switch (var) { - case 0: // Good: 缩进 - DoSomething1(); // Good: 缩进 - break; - case 1: { // Good: 带大括号格式 - DoSomething2(); - break; - } - default: - break; -} -``` - -```c -switch (var) { -case 0: // Bad: case 未缩进 - DoSomething(); - break; -default: // Bad: default 未缩进 - break; -} -``` - -## 表达式 - -### 建议2.1 表达式换行要保持换行的一致性,操作符放行末 - -较长的表达式,不满足行宽要求的时候,需要在适当的地方换行。一般在较低优先级操作符或连接符后面截断,操作符或连接符放在行末。 -操作符、连接符放在行末,表示“未结束,后续还有”。 - -例: -```c -// 假设下面第一行已经不满足行宽要求 -if ((currentValue > MIN) && // Good:换行后,布尔操作符放在行末 - (currentValue < MAX)) { - DoSomething(); - ... -} - -int result = reallyReallyLongVariableName1 + // Good: 加号留在行末 - reallyReallyLongVariableName2; -``` - -表达式换行后,注意保持合理对齐,或者4空格缩进。参考下面例子 -```c -int sum = longVaribleName1 + longVaribleName2 + longVaribleName3 + - longVaribleName4 + longVaribleName5 + longVaribleName6; // OK: 4空格缩进 - -int sum = longVaribleName1 + longVaribleName2 + longVaribleName3 + - longVaribleName4 + longVaribleName5 + longVaribleName6; // OK: 保持对齐 -``` - -## 变量赋值 - -### 规则2.10 多个变量定义和赋值语句不允许写在一行 - -每行最好只有一个变量初始化的语句,更容易阅读和理解。 - -```c -int maxCount = 10; -bool isCompleted = false; -``` - -下面是不符合规范的示例: -```c -int maxCount = 10; bool isCompleted = false; // Bad:多个初始化放在了同一行 -int x, y = 0; // Bad:多个变量定义需要分行,每行一个 - -int pointX; -int pointY; -... -pointX = 1; pointY = 2; // Bad:多个变量赋值语句放同一行 -``` - -例外情况: -对于多个相关性强的变量定义,且无需初始化时,可以定义在一行,减少重复信息,以便代码更加紧凑。 -```c -int i, j; // Good:多变量定义,未初始化,可以写在一行 -for (i = 0; i < row; i++) { - for (j = 0; j < col; j++) { - ... - } -} -``` - -## 初始化 - -初始化包括结构体、联合体及数组的初始化 - -### 规则2.11 初始化换行时要有缩进,或进行合理对齐 - -结构体或数组初始化时,如果换行应保持4空格缩进。 -从可读性角度出发,选择换行点和对齐位置。 -```c -// Good: 满足行宽要求时不换行 -int arr[4] = { 1, 2, 3, 4 }; - -// Good: 行宽较长时,换行让可读性更好 -const int rank[] = { - 16, 16, 16, 16, 32, 32, 32, 32, - 64, 64, 64, 64, 32, 32, 32, 32 -}; -``` - -对于复杂结构数据的初始化,尽量清晰、紧凑。 -参考如下格式: -```c -int a[][4] = { - { 1, 2, 3, 4 }, { 2, 2, 3, 4 }, // OK. - { 3, 2, 3, 4 }, { 4, 2, 3, 4 } -}; - -int b[][8] = { - { 1, 2, 3, 4, 5, 6, 7, 8 }, // OK. - { 2, 2, 3, 4, 5, 6, 7, 8 } -}; -``` -```c -int c[][8] = { - { - 1, 2, 3, 4, 5, 6, 7, 8 // OK. - }, { - 2, 2, 3, 4, 5, 6, 7, 8 - } -}; -``` - -注意: -- 左大括号放行末时,对应的右大括号需另起一行 -- 左大括号被内容跟随时,对应的右大括号也应跟随内容 - -### 规则2.12 结构体和联合体在按成员初始化时,每个成员初始化单独一行 - -C99标准支持结构体和联合体按照成员进行初始化,标准中叫"指定初始化"(designated initializer)。 如果按照这种方式进行初始化,每个成员的初始化单独一行。 -```c -struct Date { - int year; - int month; - int day; -}; - -struct Date date = { // Good:使用指定初始化方式时,每行初始化一个 - .year = 2000, - .month = 1, - .day = 1 -}; -``` - -## 指针 - -### 建议2.2 指针类型"\*"跟随变量名或者类型,不要两边都留有空格或都没有空格 - -声明或定义指针变量或者返回指针类型函数时,"\*" 靠左靠右都可以,但是不要两边都有或者都没有空格。 -```c -int *p1; // OK. -int* p2; // OK. - -int*p3; // Bad: 两边都没空格 -int * p4; // Bad: 两边都有空格 -``` - -选择一种风格,并保持一致性。 - -选择"\*"跟随类型风格时,避免一行同时声明带指针的多个变量。 -```c -int* a, b; // Bad: 很容易将 b 误理解成指针 -``` - -选择"\*"跟随变量风格时,可能会存在无法紧跟的情况。 -无法跟随时就不跟随,不要破坏风格一致性。 -```c -char * const VERSION = "V100"; // OK. -int Foo(const char * restrict p); // OK. -``` -注意,任何时候 "\*" 不要紧跟 const 或 restrict 关键字。 - -## 编译预处理 - -### 规则2.13 编译预处理的"#"默认放在行首,嵌套编译预处理语句时,"#"可以进行缩进 - -编译预处理的"#"统一放在行首;即便编译预处理的代码是嵌入在函数体中的,"#"也应该放在行首。 -注意,开发过程尽量不要使用编译预处理宏。如果需使用,则应由专人进行统一管理。 - -## 空格和空行 - -### 规则2.14 水平空格应该突出关键字和重要信息,避免不必要的留白 - -水平空格应该突出关键字和重要信息,每行代码尾部不要加空格。 总体规则如下: -- if, switch, case, do, while, for 等关键字之后加空格; -- 小括号内部的两侧,不要加空格 -- 二元操作符(= + ‐ < > * / % | & ^ <= >= == !=)左右两侧加空格 -- 一元操作符(& * + ‐ ~ !)之后不要加空格 -- 三目操作符(? :)符号两侧均需要空格 -- 结构体中表示位域的冒号,两侧均需要空格 -- 前置和后置的自增、自减(++ --)和变量之间不加空格 -- 结构体成员操作符(. ->)前后不加空格 -- 大括号内部两侧有无空格,左右必须保持一致 -- 逗号、分号、冒号(不含三目操作符和表示位域的冒号)紧跟前面内容无空格,其后需要空格 -- 函数参数列表的小括号与函数名之间无空格 -- 类型强制转换的小括号与被转换对象之间无空格 -- 数组的中括号与数组名之间无空格 -- 涉及到换行时,行末的空格可以省去 - -对于大括号内部两侧的空格,**建议**如下: -- 一般的,大括号内部两侧建议加空格 -- 对于空的,或单个标识符,或单个字面常量,空格不是必须 -如:'{}', '{0}', '{NULL}', '{"hi"}' 等 -- 连续嵌套的多重括号之间,空格不是必须 -如:'{{0}}', '{{ 1, 2 }}' 等 -错误示例:'{ 0, {1}}',不属于连续嵌套场景,而且最外侧大括号左右不一致 - -常规情况: -```c -int i = 0; // Good:变量初始化时,= 前后应该有空格,分号前面不要留空格 -int buf[BUF_SIZE] = {0}; // Good:数组初始化时,大括号内空格可选 -int arr[] = { 10, 20 }; // Good: 正常大括号内部两侧建议加空格 -``` - -函数定义和函数调用: -```c -int result = Foo(arg1,arg2); - ^ // Bad: 逗号后面应该有空格 - -int result = Foo( arg1, arg2 ); - ^ ^ // Bad: 小括号内部两侧不应该有空格 -``` - -指针和取地址 -```c -x = *p; // Good:*操作符和指针p之间不加空格 -p = &x; // Good:&操作符和变量x之间不加空格 -x = r.y; // Good:通过.访问成员变量时不加空格 -x = r->y; // Good:通过->访问成员变量时不加空格 -``` - -操作符: -```c -x = 0; // Good:赋值操作的=前后都要加空格 -x = -5; // Good:负数的符号和数值之前不要加空格 -++x; // Good:前置和后置的++/--和变量之间不要加空格 -x--; - -if (x && !y) // Good:布尔操作符前后要加上空格,!操作和变量之间不要空格 -v = w * x + y / z; // Good:二元操作符前后要加空格 -v = w * (x + z); // Good:括号内的表达式前后不需要加空格 -``` - -循环和条件语句: -```c -if (condition) { // Good:if关键字和括号之间加空格,括号内条件语句前后不加空格 - ... -} else { // Good:else关键字和大括号之间加空格 - ... -} - -while (condition) {} // Good:while关键字和括号之间加空格,括号内条件语句前后不加空格 - -for (int i = 0; i < someRange; ++i) { // Good:for关键字和括号之间加空格,分号之后加空格 - ... -} - -switch (var) { // Good: switch 关键字后面有1空格 - case 0: // Good:case语句条件和冒号之间不加空格 - ... - break; - ... - default: - ... - break; -} -``` - -注意:当前的集成开发环境(IDE)和代码编辑器都可以设置删除行尾的空格,请正确配置你的编辑器。 - -### 建议2.3 合理安排空行,保持代码紧凑 - -减少不必要的空行,可以显示更多的代码,方便代码阅读。下面有一些建议遵守的规则: -- 根据上下内容的相关程度,合理安排空行; -- 函数内部、类型定义内部、宏内部、初始化表达式内部,不使用连续空行 -- 不使用连续 **3** 个空行,或更多 -- 大括号内的代码块首行之前和末行之后不要加空行。 - -```c -ret = DoSomething(); - -if (ret != OK) { // Bad: 返回值判断应该紧跟函数调用 - return -1; -} -``` -```c -int Foo(void) -{ - ... -} - - - -int Bar(void) // Bad:最多使用连续2个空行。 -{ - ... -} -``` -```c -int Foo(void) -{ - - DoSomething(); // Bad:大括号内部首尾,不需要空行 - ... - -} -``` - -# 3 注释 - -一般的,尽量通过清晰的架构逻辑,好的符号命名来提高代码可读性;需要的时候,才辅以注释说明。 -注释是为了帮助阅读者快速读懂代码,所以要从读者的角度出发,**按需注释**。 - -注释内容要简洁、明了、无二义性,信息全面且不冗余。 - -**注释跟代码一样重要。** -写注释时要换位思考,用注释去表达此时读者真正需要的信息。在代码的功能、意图层次上进行注释,即注释解释代码难以表达的意图,不要重复代码信息。 -修改代码时,也要保证其相关注释的一致性。只改代码,不改注释是一种不文明行为,破坏了代码与注释的一致性,让阅读者迷惑、费解,甚至误解。 - -使用**英文**进行注释。 - -必须要加注释说明场合如下(包含但不限于列举的场合): -1、模块对外提供的接口头文件必须对函数进行注释。 -2、定义全局变量必须加注释。 -3、核心算法必须加注释。 -4、超过50行的函数必须加注释。 - -## 注释风格 - -在 C 代码中,使用 `/*` `*/`和 `//` 都是可以的。 -按注释的目的和位置,注释可分为不同的类型,如文件头注释、函数头注释、代码注释等等; -同一类型的注释应该保持统一的风格。 - -注意:本文示例代码中,大量使用 '//' 后置注释只是为了更精确的描述问题,并不代表这种注释风格更好。 - -## 文件头注释 - -### 规则3.1 文件头注释必须包含版权许可 - -/* - * Copyright (c) 2020 XXX - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -## 函数头注释 - -### 规则3.2 禁止空有格式的函数头注释 - -并不是所有的函数都需要函数头注释; -函数原型无法表达的信息,加函数头注释辅助说明; - -函数头注释统一放在函数声明或定义上方。 -选择使用如下风格之一: -**使用'//'写函数头** -```c -// 单行函数头 -int Func1(void); - -// 多行函数头 -// 第二行 -int Func2(void); -``` - -**使用'/\*' '\*/' 写函数头** -```c -/* 单行函数头 */ -int Func1(void); - -/* - * 单行或多行函数头 - * 第二行 - */ -int Func2(void); -``` - -函数尽量通过函数名自注释,**按需**写函数头注释。 -不要写无用、信息冗余的函数头;不要写空有格式的函数头。 - -函数头注释内容**可选**,但不限于:功能说明、返回值,性能约束、用法、内存约定、算法实现、可重入的要求等等。 -模块对外头文件中的函数接口声明,其函数头注释,应当将重要、有用的信息表达清楚。 - -例: -```c -/* - * 返回实际写入的字节数,-1表示写入失败 - * 注意,内存 buf 由调用者负责释放 - */ -int WriteString(char *buf, int len); -``` - -坏的例子: -```c -/* - * 函数名:WriteString - * 功能:写入字符串 - * 参数: - * 返回值: - */ -int WriteString(char *buf, int len); -``` -上面例子中的问题: -- 参数、返回值,空有格式没内容 -- 函数名信息冗余 -- 关键的 buf 由谁释放没有说清楚 - -## 代码注释 - -### 规则3.3 代码注释放于对应代码的上方或右边 -### 规则3.4 注释符与注释内容间要有1空格;右置注释与前面代码至少1空格 - -代码上方的注释,应该保持对应代码一样的缩进。 -选择并统一使用如下风格之一: -**使用'//'** -```c -// 这是单行注释 -DoSomething(); - -// 这是多行注释 -// 第二行 -DoSomething(); -``` -**使用'/\*' '\*/'** -```c -/* 这是单行注释 */ -DoSomething(); - -/* - * 这是单/多行注释 - * 第二行 - */ -DoSomething(); -``` - -代码右边的注释,与代码之间,至少留1空格,建议不超过4空格。 -通常使用扩展后的 TAB 键即可实现 1-4 空格的缩进。 - -选择并统一使用如下风格之一: -```c -int foo = 100; // 放右边的注释 -int bar = 200; /* 放右边的注释 */ -``` - -右置格式在适当的时候,上下对齐会更美观。 -对齐后的注释,离左边代码最近的那一行,保证1-4空格的间隔。 -例: -```c -#define A_CONST 100 /* 相关的同类注释,可以考虑上下对齐 */ -#define ANOTHER_CONST 200 /* 上下对齐时,与左侧代码保持间隔 */ -``` - -当右置的注释超过行宽时,请考虑将注释置于代码上方。 - -### 规则3.5 不用的代码段直接删除,不要注释掉 - -被注释掉的代码,无法被正常维护;当企图恢复使用这段代码时,极有可能引入易被忽略的缺陷。 -正确的做法是,不需要的代码直接删除掉。若再需要时,考虑移植或重写这段代码。 - -这里说的注释掉代码,包括用 /\* \*/ 和 //,还包括 #if 0, #ifdef NEVER_DEFINED 等等。 - -### 建议3.1 case语句块结束时如果不加break/return,需要有注释说明(fall-through) - -有时候需要对多个case标签做相同的事情,case语句在结束不加break或return,直接执行下一个case标签中的语句,这在C语法中称之为"fall-through"。 -这种情况下,需要在"fall-through"的地方加上注释,清晰明确的表达出这样做的意图;或者至少显式指明是 "fall-through"。 - -例,显式指明 fall-through: -```c -switch (var) { - case 0: - DoSomething(); - /* fall-through */ - case 1: - DoSomeOtherThing(); - ... - break; - default: - DoNothing(); - break; -} -``` - -如果 case 语句是空语句,则可以不用加注释特别说明: -```c -switch (var) { - case 0: - case 1: - DoSomething(); - break; - default: - DoNothing(); - break; -} -``` - -# 4 头文件 - -**对于C语言来说,头文件的设计体现了大部分的系统设计**。 -正确使用头文件可使代码在可读性、文件大小和编译构建性能上大为改观。 - -本章从编程规范的角度总结了一些方法,可用于帮助合理规划头文件。 - -## 头文件职责 - -头文件是模块或文件的对外接口。 -头文件中适合放置接口的声明,不允许放置实现(内联函数除外)。 -头文件应当职责单一。头文件过于复杂,依赖过于复杂还是导致编译时间过长的主要原因。 - -### 建议4.1 每一个.c文件都应该有相应的.h文件,用于声明需要对外公开的接口 - -通常情况下,每个.c文件都有一个相应的.h(并不一定同名),用于放置对外提供的函数声明、宏定义、类型定义等。 -如果一个.c文件不需要对外公布任何接口,则其就不应当存在。 - -例外:程序的入口(如main函数所在的文件),单元测试代码,动态库代码。 - -示例: -foo.h 内容 -```c -#ifndef FOO_H -#define FOO_H - -int Foo(void); // Good:头文件中声明对外接口 - -#endif -``` - -foo.c 内容 -```c -static void Bar(void); // Good: 对内函数的声明放在.c文件的头部,并声明为static限制其作用域 - -void Foo(void) -{ - Bar(); -} - -static void Bar(void) -{ - // Do something; -} -``` - -内部使用的函数声明,宏、枚举、结构体等定义不应放在头文件中。 - -有些产品中,习惯一个.c文件对应两个.h文件,一个用于存放对外公开的接口,一个用于存放内部需要用到的定义、声明等,以控制.c文件的代码行数。 -不提倡这种风格,产生这种风格的根源在于.c过大,应当首先考虑拆分.c文件。 -另外,一旦把私有定义、声明放到独立的头文件中,就无法从技术上避免别人包含。 - -本规则反过来并不一定成立。比如: -有些特别简单的头文件,如命令 ID 定义头文件,不需要有对应的.c存在。 -同一套接口协议下,有多个实例,由于接口相同且稳定,所以允许出现一个.h对应多个.c文件。 - -### 建议4.2 头文件的扩展名只使用.h,不使用非习惯用法的扩展名,如.inc - -有些产品中使用了 .inc 作为头文件扩展名,这不符合C语言的习惯用法。 -在使用 .inc 作为头文件扩展名的产品,习惯上用于标识此头文件为私有头文件。 -但是从产品的实际代码来看,这一条并没有被遵守,一个 .inc 文件被多个 .c 包含。 -本规范不提倡将私有定义单独放在头文件中,具体见[建议4.1](#a4-1)。 - -## 头文件依赖 - -头文件包含是一种依赖关系,头文件应向稳定的方向包含。 -一般来说,应当让不稳定的模块依赖稳定的模块,从而当不稳定的模块发生变化时,不会影响(编译)稳定的模块。 - -依赖的方向应该是:产品依赖于平台,平台依赖于标准库。 - -除了不稳定的模块依赖于稳定的模块外,更好的方式是每个模块都依赖于接口,这样任何一个模块的内部实现更改都不需要重新编译另外一个模块。 -在这里,假设接口本身是最稳定的。 - -### 规则4.1 禁止头文件循环依赖 - -头文件循环依赖,指 a.h 包含 b.h,b.h 包含 c.h,c.h 包含 a.h, 导致任何一个头文件修改,都导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。 -而如果是单向依赖,如a.h包含b.h,b.h包含c.h,而c.h不包含任何头文件,则修改a.h不会导致包含了b.h/c.h的源代码重新编译。 - -头文件循环依赖直接体现了架构设计上的不合理,可通过架构优化来避免。 - - -### 规则4.2 头文件必须编写#define保护,防止重复包含 - -为防止头文件被多重包含,所有头文件都应当使用 #define 作为包含保护;不要使用 #pragma once - -定义包含保护符时,应该遵守如下规则: -- 保护符使用唯一名称;统一使用子系统名_部件名_文件名的定义规则。 -- 不要在受保护部分的前后放置代码或者注释,文件头注释除外。 - -假定 util 子系统 timer 部件的 timer.h,其目录为 `timer/include/timer.h`。其保护符若使用 'TIME_H' 很容易不唯一,按规则定义如: -```c -#ifndef UTIL_TIMER_TIMER_H -#define UTIL_TIMER_TIMER_H - -... - -#endif // UTIL_TIMER_TIMER_H -``` - -### 规则4.3 禁止通过声明的方式引用外部函数接口、变量 - -只能通过包含头文件的方式使用其他模块或文件提供的接口。 -通过 extern 声明的方式使用外部函数接口、变量,容易在外部接口改变时可能导致声明和定义不一致。 -同时这种隐式依赖,容易导致架构腐化。 - -不符合规范的案例: -a.c 内容 -```c -extern int Foo(void); // Bad: 通过 extern 的方式引用外部函数 - -void Bar(void) -{ - int i = Foo(); // 这里使用了外部接口 Foo - ... -} -``` - -应该改为: -a.c 内容 -```c -#include "b.h" // Good: 通过包含头文件的方式使用其他.c提供的接口 - -void Bar(void) -{ - int i = Foo(); - ... -} -``` - -b.h 内容 -```c -int Foo(void); -``` - -b.c内容 -```c -int Foo(void) -{ - // Do something -} -``` - -例外,有些场景需要引用其内部函数,但并不想侵入代码时,可以 extern 声明方式引用。 -如: -针对某一内部函数进行单元测试时,可以通过 extern 声明来引用被测函数; -当需要对某一函数进行打桩、打补丁处理时,允许 extern 声明该函数。 - -### 规则4.4 禁止在 extern "C" 中包含头文件 - -在 extern "C" 中包含头文件,有可能会导致 extern "C" 嵌套,部分编译器对 extern "C" 嵌套层次有限制,嵌套层次太多会编译错误。 - -extern "C" 通常出现在 C,C++ 混合编程的情况下,在 extern "C" 中包含头文件,可能会导致被包含头文件的原有意图遭到破坏,比如链接规范被不正确地更改。 - -示例,存在a.h和b.h两个头文件: -a.h 内容 -```c -... -#ifdef __cplusplus -void Foo(int); -#define A(value) Foo(value) -#else -void A(int) -#endif -``` - -b.h 内容 -```c -... -#ifdef __cplusplus -extern "C" { -#endif - -#include "a.h" -void B(void); - -#ifdef __cplusplus -} -#endif -``` - -使用C++预处理器展开b.h,将会得到 -```c -extern "C" { - void Foo(int); - void B(void); -} -``` - -按照 a.h 作者的本意,函数 Foo 是一个 C++ 自由函数,其链接规范为 "C++"。 -但在 b.h 中,由于 `#include "a.h"` 被放到了 `extern "C"` 的内部,函数 Foo 的链接规范被不正确地更改了。 - -例外: -如果在 C++ 编译环境中,想引用纯C的头文件,这些C头文件并没有 `extern "C"` 修饰。非侵入式的做法是,在 `extern "C"` 中去包含C头文件。 - -# 5 函数 - -函数的作用:避免重复代码、增加可重用性;分层,降低复杂度、隐藏实现细节,使程序更加模块化,从而更有利于程序的阅读,维护。 - -函数应该简洁、短小。 -一个函数只完成一件事情。 - -## 函数设计 - -函数设计的精髓:编写整洁函数,同时把代码有效组织起来。代码简单直接、不隐藏设计者的意图、用干净利落的抽象和直截了当的控制语句将函数有机组织起来。 - -### 规则5.1 避免函数过长,函数不超过50行(非空非注释) - -函数应该可以一屏显示完 (50行以内),只做一件事情,而且把它做好。 - -过长的函数往往意味着函数功能不单一,过于复杂,或过分呈现细节,未进行进一步抽象。 - -例外: -考虑代码的聚合性与功能的全面性,某些函数可能会超过50行,但前提是不影响代码的可读性与简洁。 -这些例外的函数应该是极少的,例如特定算法处理。 - -即使一个长函数现在工作的非常好, 一旦有人对其修改, 有可能出现新的问题, 甚至导致难以发现的bug。 -建议将其拆分为更加简短并易于管理的若干函数,以便于他人阅读和修改代码。 - -### 规则5.2 避免函数的代码块嵌套过深,不要超过4层 - -函数的代码块嵌套深度指的是函数中的代码控制块(例如:if、for、while、switch等)之间互相包含的深度。 -每级嵌套都会增加阅读代码时的脑力消耗,因为需要在脑子里维护一个“栈”(比如,进入条件语句、进入循环等等)。 -应该做进一步的功能分解,从而避免使代码的阅读者一次记住太多的上下文。 - -使用`卫语句`可以有效的减少 if 相关的嵌套层次。例: -原代码嵌套层数是 3: -```c -int Foo(...) -{ - if (received) { - type = GetMsgType(msg); - if (type != UNKNOWN) { - return DealMsg(...); - } - } - return -1; -} -``` - -使用`卫语句`重构,嵌套层数变成 2: -```c -int Foo(...) -{ - if (!received) { // Good: 使用'卫语句' - return -1; - } - - type = GetMsgType(msg); - if (type == UNKNOWN) { - return -1; - } - - return DealMsg(..); -} -``` -例外: -考虑代码的聚合性与功能的全面性,某些函数嵌套可能会超过4层,但前提是不影响代码的可读性与简洁。 -这些例外的函数应该是极少的。 - -### 建议5.1 对函数的错误返回码要全面处理 - -一个函数(标准库中的函数/第三方库函数/用户定义的函数)能够提供一些指示错误发生的方法。 -这可以通过使用错误标记、特殊的返回数据或者其他手段,不管什么时候函数提供了这样的机制,调用程序应该在函数返回时立刻检查错误指示。 - -示例: -```c -char fileHead[128]; -ReadFileHead(fileName, fileHead, sizeof(fileHead)); // Bad: 未检查返回值 - -DealWithFileHead(fileHead, sizeof(fileHead)); // fileHead 可能无效 -``` - -正确写法: -```c -char fileHead[128]; -ret = ReadFileHead(fileName, fileHead, sizeof(fileHead)); -if (ret != OK) { // Good: 确保 fileHead 被有效写入 - return ERROR; -} - -DealWithFileHead(fileHead, sizeof(fileHead)); // 处理文件头 -``` - - -注意,当函数返回值被大量的显式(void)忽略掉时,应当考虑函数返回值的设计是否合理。 -如果所有调用者都不关注函数返回值时,请将函数设计成`void`型。 - -## 函数参数 - -### 建议5.2 设计函数时,优先使用返回值而不是输出参数 - -使用返回值而不是输出参数,可以提高可读性,并且通常提供相同或更好的性能。 - -函数名为 GetXxx、FindXxx、IsXxx、OnXxx或直接名词作函数名的函数,直接返回对应对象,可读性更好。 -例外: -1、多值返回时,可以设计为输出参数返回。 -2、涉及内存分配时,可以设计为输出参数返回。调用者将申请的内存做为出参传入,而函数内由不再分配内存。 - -### 建议5.3 设计函数的参数时,统一按输入、输出、出入的顺序定义参数。 - -函数参数的定义统一按输入参数、输出参数、出入参的顺序进行定义。 - -### 规则5.3 设计函数的资源时,涉及内存、锁、队列等资源分配的,需要同时提供释放函数。 - -本着资源从那儿申请,向那儿释放的原则。如果函数申请了内存、锁、队列等资源,则模块需要同时提供资源的函数。 - -### 建议5.4 使用强类型参数,避免使用void\* - -尽管不同的语言对待强类型和弱类型有自己的观点,但是一般认为c/c++是强类型语言,既然我们使用的语言是强类型的,就应该保持这样的风格。 -好处是尽量让编译器在编译阶段就检查出类型不匹配的问题。 - -使用强类型便于编译器帮我们发现错误,如下代码中注意函数 `FooListAddNode` 的使用: -```c -struct FooNode { - struct List link; - int foo; -}; - -struct BarNode { - struct List link; - int bar; -} - -void FooListAddNode(void *node) // Bad: 这里用 void * 类型传递参数 -{ - FooNode *foo = (FooNode *)node; - ListAppend(&g_fooList, &foo->link); -} - -void MakeTheList(...) -{ - FooNode *foo; - BarNode *bar; - ... - - FooListAddNode(bar); // Wrong: 这里本意是想传递参数 foo,但错传了 bar,却没有报错 -} - -``` - -上述问题有可能很隐晦,不易轻易暴露,从而破坏性更大。 -如果明确 `FooListAddNode` 的参数类型,而不是 `void *`,则在编译阶段就能发现上述问题。 -```c -void FooListAddNode(FooNode *foo) -{ - ListAppend(&g_fooList, &foo->link); -} -``` - -例外:某些通用泛型接口,需要传入不同类型指针的,可以用 `void *` 入参。 - -### 建议5.5 模块内部函数参数的合法性检查,由调用者负责 - -对于模块外部传入的参数,必须进行合法性检查,保护程序免遭非法输入数据的破坏。 -模块内部函数调用,缺省由调用者负责保证参数的合法性,如果都由被调用者来检查参数合法性,可能会出现同一个参数,被检查多次,产生冗余代码,很不简洁。 - -由调用者保证入参的合法性,这种契约式编程能让代码逻辑更简洁,可读性更好。 -示例: -```c -int SomeProc(...) -{ - int data; - - bool dataOK = GetData(&data); // 获取数据 - if (!dataOK) { // 检查上一步结果,其实也就保证了数据合法 - return -1; - } - - DealWithData(data); // 调用数据处理函数 - ... -} - -void DealWithData(int data) -{ - if (data < MIN || data > MAX) { // Bad: 调用者已经保证了数据合法性 - return; - } - - ... -} -``` - -### 建议5.5 函数的指针参数如果不是用于修改所指向的对象就应该声明为指向const的指针 - -const 指针参数,将限制函数通过该指针修改所指向对象,使代码更牢固、安全。 - -示例:C99标准 7.21.4.4 中strncmp 的例子,不变参数声明为const。 -```c -int strncmp(const char *s1, const char *s2, size_t n); // Good:不变参数声明为const -``` - -注意: -指针参数要不要加 const 取决于函数设计,而不是看函数实体内有没有发生“修改对象”的动作。 - -### 建议5.6 函数的参数个数不超过5个 - -函数的参数过多,会使得该函数易于受外部(其他部分的代码)变化的影响,从而影响维护工作。函数的参数过多同时也会增大测试的工作量。 - -函数的参数个数不要超过5个,如果超过可以考虑: -- 看能否拆分函数 -- 看能否将相关参数合在一起,定义结构体 - -## 内联函数 - -内联函数是**C99**引入的一种函数优化手段。函数内联能消除函数调用的开销;并得益于内联实现跟调用点代码的合并,编译器有更大的视角,从而完成更多的代码优化。内联函数跟函数式宏比较类似,两者的分析详见[建议6.1](#a6-1)。 - -### 建议5.7 内联函数不超过10行(非空非注释) - -将函数定义成内联一般希望提升性能,但是实际并不一定能提升性能。 -如果函数体短小,则函数内联可以有效的缩减目标代码的大小,并提升函数执行效率。 -反之,函数体比较大,内联展开会导致目标代码的膨胀,特别是当调用点很多时,膨胀得更厉害,反而会降低执行效率。 -内联函数规模建议控制在 **10** 行以内。 - -不要为了提高性能而滥用内联函数。不要过早优化。一般情况,当有实际测试数据证明内联性能更高时,再将函数定义为内联。 -对于类似 setter/getter 短小而且调用频繁的函数,可以定义为内联。 - -### 规则5.3 被多个源文件调用的内联函数要放在头文件中定义 - -内联函数是在编译时内联展开,因此要求内联函数定义必须在调用此函数的每个源文件内可见。 -如下所示代码,inline.h 只有`SomeInlineFunc`函数的声明而没有定义。other.c包含inline.h,调用`SomeInlineFunc`时无法内联。 - -inline.h -```c -inline int SomeInlineFunc(void); -``` - -inline.c -```c -inline int SomeInlineFunc(void) -{ - // 实现代码 -} -``` - -other.c -```c -#include "inline.h" -int OtherFunc(void) -{ - int ret = SomeInlineFunc(); -} -``` - -由于这个限制,多个源文件如果要调用同一个内联函数,需要将内联函数的定义放在头文件中。 -**gnu89** 在内联函数实现上跟**C99**标准有差异,兼容做法是将函数声明为 **static inline**。 - -# 6 宏 - -## 函数式宏(function-like macro) - -函数式宏是指形如函数的宏(示例代码如下所示),其包含若干条语句来实现某一特定功能。 -```c -#define ASSERT(x) do { \ - if (!(x)) { \ - printk(KERN_EMERG "assertion failed %s: %d: %s\n", \ - __FILE__, __LINE__, #x); \ - BUG(); \ - } \ -} while (0) -``` - -### 建议6.1 使用函数代替函数式宏 - -定义函数式宏前,应考虑能否用函数替代。对于可替代场景,建议用函数替代宏。 -函数式宏的缺点如下: - -- 函数式宏缺乏类型检查,不如函数调用检查严格。示例代码[见下](#macro_lack_of_type_check__example)。 -- 宏展开时宏参数不求值,可能会产生非预期结果,详见[规则6.1](#r6-1)和[规则6.3](#r6-3)。 -- 宏没有独立的作用域,跟控制流语句配合时,可能会产生如[规则6.2](#r6-2)描述的非预期结果。 -- 宏的技巧性太强(参见下面的规则),例如`#`的用法和无处不在的括号,影响可读性。 -- 在特定场景下必须用特定编译器对宏的扩展,如 `gcc` 的 `statement expression`,可移植性也不好。 -- 宏在预编译阶段展开后,在其后编译、链接和调试时都不可见;而且包含多行的宏会展开为一行。函数式宏难以调试、难以打断点,不利于定位问题。 -- 对于包含大量语句的宏,在每个调用点都要展开。如果调用点很多,会造成代码空间的膨胀。 - -函数式宏缺乏类型检查的示例代码: - -```c -#define MAX(a, b) (((a) < (b)) ? (b) : (a)) - -int Max(int a, int b) -{ - return (a < b) ? b : a; -} - -int TestMacro(void) -{ - unsigned int a = 1; - int b = -1; - - (void)printf("MACRO: max of a(%u) and b(%d) is %d\n", a, b, MAX(a, b)); - (void)printf("FUNC : max of a(%u) and b(%d) is %d\n", a, b, Max(a, b)); - return 0; -} -``` - -由于宏缺乏类型检查,`MAX`中的`a`和`b`的比较提升为无符号数的比较,结果是**a < b**。输出结果是: - -``` -MACRO: max of a(1) and b(-1) is -1 -FUNC : max of a(1) and b(-1) is 1 -``` - -函数没有宏的上述缺点。但是,函数相比宏,最大的劣势是执行效率不高(增加函数调用的开销和编译器优化的难度)。 -为此,C99标准引入了内联函数(gcc在标准之前就引入了内联函数)。 - -内联函数跟宏类似,也是在调用点展开。不同之处在于内联函数是在编译时展开。 -内联函数兼具函数和宏的优点: - -- 内联函数/函数执行严格的类型检查 -- 内联函数/函数的入参求值只会进行一次 -- 内联函数就地展开,没有函数调用的开销 -- 内联函数比函数优化得更好 - -对于性能敏感的代码,可以考虑用内联函数代替函数式宏。 -函数和内联函数不能完全替代函数式宏,函数式宏在某些场景更适合。 -比如,在日志记录场景下,使用带可变参和默认参数的函数式宏更方便: - -```c -int ErrLog(const char *file, unsigned long line, const char *fmt, ...); -#define ERR_LOG(fmt, ...) ErrLog(__FILE__, __LINE__, fmt, ##__VA_ARGS__) -``` - - -### 规则6.1 定义宏时,宏参数要使用完备的括号 - -宏参数在宏展开时只是文本替换,在编译时再求值。文本替换后,宏包含的语句跟调用点代码合并。 -合并后的表达式因为操作符的优先级和结合律,可能会导致计算结果跟期望的不同,尤其是当宏参数在一个表达式中时。 - -如下所示,是一种错误的写法: -```c -#define SUM(a, b) a + b // Bad. -``` - -下面这样调用宏,执行结果跟预期不符: -`100 / SUM(2, 8)` 将扩展成 `(100 / 2) + 8`,预期结果则是`100 / (2 + 8)`。 -这个问题可以通过将整个表示式加上括号来解决,如下所示: -```c -#define SUM(a, b) (a + b) // Bad. -``` - -但是这种改法在下面这种场景又有问题: -`SUM(1 << 2, 8)`扩展成`1 << (2 + 8)`(因为`<<`优先级低于`+`),跟预期结果`(1 << 2) + 8`不符。 - -这个问题可以通过将每个宏参数都加上括号来解决,如下所示: -```c -#define SUM(a, b) (a) + (b) // Bad. -``` - -再看看第三种问题场景:`SUM(2, 8) * 10` 。扩展后的结果为 `(2) + ((8) * 10)`,跟预期结果`(2 + 8) * 10`不符。 - -综上所述,正确的写法如下: -```c -#define SUM(a, b) ((a) + (b)) // Good. -``` - -但是要避免滥用括号。如下所示,单独的数字或标识符加括号毫无意义。 -```c -#define SOME_CONST 100 // Good: 单独的数字无需括号 -#define ANOTHER_CONST (-1) // Good: 负数需要使用括号 - -#define THE_CONST SOME_CONST // Good: 单独的标识符无需括号 -``` - -下列情况需要注意: -- 宏参数参与 '#', '##' 操作时,不要加括号 -- 宏参数参与字符串拼接时,不要加括号 -- 宏参数作为独立部分,在赋值(包括+=, -=等)操作的某一边时,无需括号 -- 宏参数作为独立部分,在逗号表达式,函数或宏调用列表中,无需括号 - -举例: -```c -#define MAKE_STR(x) #x // x 不要加括号 - -#define HELLO_STR(obj) "Hello, " obj // obj 不要加括号 - -#define ADD_3(sum, a, b, c) (sum = (a) + (b) + (c)) // a, b, c 需要括号;而 sum 无需括号 - -#define FOO(a, b) Bar((a) + 1, b) // a 需要括号;而 b 无需括号 -``` - - -### 规则6.2 包含多条语句的函数式宏的实现语句必须放在 do-while(0) 中 - -宏本身没有代码块的概念。当宏在调用点展开后,宏内定义的表达式和变量融合到调用代码中,可能会出现变量名冲突和宏内语句被分割等问题。 -通过 do-while(0) 显式为宏加上边界,让宏有独立的作用域,并且跟分号能更好的结合而形成单条语句,从而规避此类问题。 - -如下所示的宏是错误的用法(为了说明问题,下面示例代码稍不符规范): - -```c -// Not Good. -#define FOO(x) \ - (void)printf("arg is %d\n", (x)); \ - DoSomething((x)); -``` - -当像下面示例代码这样调用宏,for循环只执行了宏的第一条语句,宏的后一条语句只在循环结束后执行一次。 - -```c -for (i = 1; i < 10; i++) - FOO(i); -``` - -用大括号将`FOO`定义的语句括起来可以解决上面的问题: - -```c -#define FOO(x) { \ - (void)printf("arg is %d\n", (x)); \ - DoSomething((x)); \ -} -``` - -由于大括号跟分号没有关联。大括号后紧跟的分号,是另外一个语句。 -如下示例代码,会出现'悬挂else' 编译报错: - -```c -if (condition) - FOO(10); -else - FOO(20); -``` - -正确的写法是用 do-while(0) 把执行体括起来,如下所示: - -```c -// Good. -#define FOO(x) do { \ - (void)printf("arg is %d\n", (x)); \ - DoSomething((x)); \ -} while (0) -``` - -例外: -- 包含 break, continue 语句的宏可以例外。使用此类宏务必特别小心。 -- 宏中包含不完整语句时,可以例外。比如用宏封装 for 循环的条件部分。 -- 非多条语句,或单个 if/for/while/switch 语句,可以例外。 - -### 规则6.3 不允许把带副作用的表达式作为参数传递给函数式宏 - -由于宏只是文本替换,对于内部多次使用同一个宏参数的函数式宏,将带副作用的表达式作为宏参数传入会导致非预期的结果。 -如下所示,宏`SQUARE`本身没有问题,但是使用时将带副作用的`a++`传入导致`a`的值在`SQUARE`执行后跟预期不符: - -```c -#define SQUARE(a) ((a) * (a)) - -int a = 5; -int b; -b = SQUARE(a++); // Bad: 实际 a 自增加了 2 次 -``` - -`SQUARE(a++)`展开后为`((a++) * (a++))`,变量`a`自增了两次,其值为`7`,而不是预期的`6`。 - -正确的写法如下所示: - -```c -b = SQUARE(a); -a++; // 结果:a = 6,只自增了一次。 -``` - -此外,如果参数包含函数调用,宏展开后,函数可能会被重复调用。 -如果函数执行结果相同,则存在浪费;如果函数多次调用结果不一样,执行结果可能不符合预期。 - - -### 建议6.2 函数式宏定义中慎用 return、goto、continue、break 等改变程序流程的语句 - -宏中使用 return、goto、continue、break 等改变流程的语句,虽然能简化代码,但同时也隐藏了真实流程,不易于理解,容易导致资源泄漏等问题。 - -首先,宏封装 return 容易导致过度封装和使用。 -如下代码,`status`的判断是主干流程的一部分,用宏封装起来后,变得不直观了,阅读时习惯性把`RETURN_IF`宏忽略掉了,从而导致对主干流程的理解有偏差。 - -```c -#define LOG_AND_RETURN_IF_FAIL(ret, fmt, ...) do { \ - if ((ret) != OK) { \ - (void)ErrLog(fmt, ##__VA_ARGS__); \ - return (ret); \ - } \ -} while (0) - -#define RETURN_IF(cond, ret) do { \ - if (cond) { \ - return (ret); \ - } \ -} while (0) - -ret = InitModuleA(a, b, &status); -LOG_AND_RETURN_IF_FAIL(ret, "Init module A failed!"); // OK. - -RETURN_IF(status != READY, ERR_NOT_READY); // Bad: 重要逻辑不明显 - -ret = InitModuleB(c); -LOG_AND_RETURN_IF_FAIL(ret, "Init module B failed!"); // OK. -``` - -其次,宏封装 return 也容易引发内存泄漏。再看一个例子: -```c -#define CHECK_PTR(ptr, ret) do { \ - if ((ptr) == NULL) { \ - return (ret); \ - } \ -} while (0) - -... - -mem1 = MemAlloc(...); -CHECK_PTR(mem1, ERR_CODE_XXX); - -mem2 = MemAlloc(...); -CHECK_PTR(mem2, ERR_CODE_XXX); // Wrong: 内存泄漏 -``` - -如果 `mem2` 申请内存失败了,`CHECK_PTR` 会直接返回,而没有释放 `mem1`。 -除此之外,`CHECK_PTR` 宏命名也不好,宏名只反映了检查动作,没有指明结果。只有看了宏实现才知道指针为空时返回失败。 - -综上所述: -不推荐宏定义中封装 return、goto、continue、break 等改变程序流程的语句; -对于返回值判断等异常处理场景可以例外。 - -注意: -**包含 return、goto、continue、break 等改变流程语句的宏命名,务必要体现对应关键字。** - - -### 建议6.3 函数式宏不超过10行(非空非注释) - -函数式宏本身的一大问题是比函数更难以调试和定位,特别是宏过长,调试和定位的难度更大。 -而且宏扩展会导致目标代码的膨胀。建议函数式宏不要超过10行。 - -# 7 变量 - -在C语言编码中,除了函数,最重要的就是变量。 -变量在使用时,应始终遵循“职责单一”原则。 -按作用域区分,变量可分为全局变量和局部变量。 - -## 全局变量 - -尽量不用或少用全局变量。 -在程序设计中,全局变量是在所有作用域都可访问的变量。通常,使用不必要的全局变量被认为是坏习惯。 - -使用全局变量的缺点: -- 破坏函数的独立性和可移植性,使函数对全局变量产生依赖,存在耦合; -- 降低函数的代码可读性和可维护性。当多个函数读写全局变量时,某一时刻其取值可能不是确定的,对于代码的阅读和维护不利; -- 在并发编程环境中,使用全局变量会破坏函数的可重入性,需要增加额外的同步保护处理才能确保数据安全。 - -如不可避免,对全局变量的读写应集中封装。 - -### 规则7.1 模块间,禁止使用全局变量作接口 - -全局变量是模块内部的具体实现,不推荐但允许跨文件使用,但禁止作为模块接口暴露出去。 -对全局变量的使用应该尽量集中,如果本模块的数据需要对外部模块开放,应提供对应函数接口。 - -## 局部变量 - -### 规则7.2 严禁使用未经初始化的变量 - -这里的变量,指的是局部动态变量,并且还包括内存堆上申请的内存块。 -因为他们的初始值都是不可预料的,所以禁止未经有效初始化就直接读取其值。 - -```c -void Foo(...) -{ - int data; - Bar(data); // Bad: 未初始化就使用 - ... -} -``` - -如果有不同分支,要确保所有分支都得到初始化后才能使用: -```c -void Foo(...) -{ - int data; - if (...) { - data = 100; - } - Bar(data); // Bad: 部分分支该值未初始化 - ... -} -``` - -未经初始化就使用,一般静态检查工具是可以检查出来的。 -如 PCLint 工具,针对上述两个例子分别会报错: ->Warning 530: Symbol 'data' (line ...) not initialized ->Warning 644: Variable 'data' (line ...) may not have been initialized - -### 规则7.3 禁止无效、冗余的变量初始化 - -如果没有确定的初始值,而仍然进行初始化,不仅不简洁,反而不安全,可能会引入更难发现的问题。 - -常见的冗余初始化: -```c -int cnt = 0; // Bad: 冗余初始化,将会被后面直接覆盖 -... -cnt = GetXxxCnt(); -... -``` - -对于后续有条件赋值的变量,可以在定义时初始化成默认值 -```c -char *buf = NULL; // Good: 这里用 NULL 代表默认值 -if (condition) { - buf = malloc(MEM_SIZE); -} -... -if (buf != NULL) { // 判断是否申请过内存 - free(buf); -} -``` - -针对大数组的冗余清零,更是会影响到性能。 -```c -char buf[VERY_BIG_SIZE] = {0}; -memset(buf, 0, sizeof(buf)); // Bad: 冗余清零 -``` - -无效初始化,隐藏更大问题的反例: -```c -void Foo(...) -{ - int data = 0; // Bad: 习惯性的进行初始化 - - UseData(data); // 使用数据,本应该写在获取数据后面 - data = GetData(...); // 获取数据 - ... -} -``` -上例代码,如果没有赋 0 初始化,静态检查工具可以帮助发现“未经初始化就直接使用”的问题。 -但因为无效初始化,“使用数据”与“获取数据”写颠倒的缺陷,不能被轻易发现。 - -因此,应该写简洁的代码,对变量或内存块进行正确、必要的初始化。 - -C99不再限制局部变量定义必须在语句之前,可以按需定义,即在靠近变量使用的地方定义变量。 -这种简洁的做法,不仅将变量作用域限制更小,而且更方便阅读和维护,还能解决定义变量时不知该怎么初始化的问题。 -如果编译环境支持,建议按需定义。 - -**例外:** -**遵从“安全规范”要求,指针变量、表示资源描述符的变量、BOOL变量不作要求。** - -### 规则7.4 不允许使用魔鬼数字 - -所谓魔鬼数字即看不懂、难以理解的数字。 -魔鬼数字并非一个非黑即白的概念,看不懂也有程度,需要结合代码上下文和业务相关知识来判断 - -例如数字 12,在不同的上下文中情况是不一样的: -`type = 12;` 就看不懂,但 `month = year * 12;` 就能看懂。 -数字 0 有时候也是魔鬼数字,比如 `status = 0;` 并不能表达是什么状态。 - -解决途径: -对于单点使用的数字,可以增加注释说明 -对于多处使用的数字,必须定义宏或const 变量,并通过符号命名自注释。 - -禁止出现下列情况: -没有通过符号来解释数字含义,如 `#define ZERO 0` -符号命名限制了其取值,如 `#define XX_TIMER_INTERVAL_300MS 300` - -# 8 编程实践 - -## 表达式 - -### 建议8.1 表达式的比较,应当遵循左侧倾向于变化、右侧倾向于不变的原则 - -当变量与常量比较时,如果常量放左边,如 `if (MAX == v)` 不符合阅读习惯,而 `if (MAX > v)` 更是难于理解。 -应当按人的正常阅读、表达习惯,将常量放右边。写成如下方式: -```c -if (v == MAX) ... -if (v < MAX) ... -``` - -也有特殊情况,如:`if (MIN < v && v < MAX)` 用来描述区间时,前半段是常量在左的。 - -不用担心将 '==' 误写成 '=',因为 `if (v = MAX)` 会有编译告警,其他静态检查工具也会报错。让工具去解决笔误问题,代码要符合可读性第一。 - -### 规则8.1 含有变量自增或自减运算的表达式中禁止再次引用该变量 - -含有变量自增或自减运算的表达式中,如果再引用该变量,其结果在C标准中未明确定义。各个编译器或者同一个编译器不同版本实现可能会不一致。 -为了更好的可移植性,不应该对标准未定义的运算次序做任何假设。 - -注意,运算次序的问题不能使用括号来解决,因为这不是优先级的问题。 - -示例: -```c -x = b[i] + i++; // Bad: b[i]运算跟 i++,先后顺序并不明确。 -``` -正确的写法是将自增或自减运算单独放一行: -```c -x = b[i] + i; -i++; // Good: 单独一行 -``` - -函数参数: -```c -Func(i++, i); // Bad: 传递第2个参数时,不确定自增运算有没有发生 -``` -正确的写法: -```c -i++; // Good: 单独一行 -x = Func(i, i); -``` - - -### 建议8.2 用括号明确表达式的操作顺序,避免过分依赖默认优先级 - -可以使用括号强调表达式操作顺序,防止因默认的优先级与设计思想不符而导致程序出错。 -然而过多的括号会分散代码使其降低了可读性,应适度使用。 - -当表达式包含不常用,优先级易混淆的操作符时,推荐使用括号,比如位操作符: -```c -c = (a & 0xFF) + b; /* 涉及位操作符,需要括号 */ -``` - -## 语句 - -### 规则8.2 switch语句要有default分支 - -大部分情况下,switch语句中要有default分支,保证在遗漏case标签处理时能够有一个缺省的处理行为。 - -特例: -如果switch条件变量是枚举类型,并且 case 分支覆盖了所有取值,则加上default分支处理有些多余。 -现代编译器都具备检查是否在switch语句中遗漏了某些枚举值的case分支的能力,会有相应的warning提示。 -```c -enum Color { - RED, - BLUE -}; - -// 因为switch条件变量是枚举值,这里可以不用加default处理分支 -switch (color) { - case RED: - DoRedThing(); - break; - case BLUE: - DoBlueThing(); - ... - break; -} -``` - -### 建议8.3 慎用 goto 语句 - -goto语句会破坏程序的结构性,所以除非确实需要,最好不使用goto语句。使用时,也只允许跳转到本函数goto语句之后的语句。 - -goto语句通常用来实现函数单点返回。 -同一个函数体内部存在大量相同的逻辑但又不方便封装成函数的情况下,譬如反复执行文件操作, -对文件操作失败以后的处理部分代码(譬如关闭文件句柄,释放动态申请的内存等等), -一般会放在该函数体的最后部分,在需要的地方就goto到那里,这样代码反而变得清晰简洁。 -实际也可以封装成函数或者封装成宏,但是这么做会让代码变得没那么直接明了。 - -示例: -```c -// Good: 使用 goto 实现单点返回 -int SomeInitFunc(void) -{ - void *p1; - void *p2 = NULL; - void *p3 = NULL; - - p1 = malloc(MEM_LEN); - if (p1 == NULL) { - goto EXIT; - } - - p2 = malloc(MEM_LEN); - if (p2 == NULL) { - goto EXIT; - } - - p3 = malloc(MEM_LEN); - if (p3 == NULL) { - goto EXIT; - } - - DoSomething(p1, p2, p3); - return 0; // OK. - -EXIT: - if (p3 != NULL) { - free(p3); - } - if (p2 != NULL) { - free(p2); - } - if (p1 != NULL) { - free(p1); - } - return -1; // Failed! -} -``` - -## 类型转换 - -### 建议8.4 尽量减少没有必要的数据类型默认转换与强制转换 - -当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患。 - -如下赋值,多数编译器不产生告警,但值的含义还是稍有变化。 -```c -char ch; -unsigned short int exam; - -ch = -1; -exam = ch; // Bad: 编译器不产生告警,此时exam为0xFFFF。 -``` diff --git a/website/docs/_posts/contribute/OpenHarmony-c-cpp-secure-coding-guide.md b/website/docs/_posts/contribute/OpenHarmony-c-cpp-secure-coding-guide.md deleted file mode 100644 index a1f4aa9e3fa10768af2ce45dabe80c23d880c280..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-c-cpp-secure-coding-guide.md +++ /dev/null @@ -1,3173 +0,0 @@ ---- -title: OpenHarmony-c-cpp-secure-coding-guide.md -permalink: /pages/extra/191e89/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# OpenHarmony C&C++ 安全编程指南 - -本文档基于C&C++ 语言提供一些安全编程建议,用于指导开发实践。 - -# 函数 - -## 对所有外部数据进行合法性校验 - -**【描述】** -外部数据的来源包括但不限于:网络、用户输入、命令行、文件(包括程序的配置文件)、环境变量、用户态数据(对于内核程序)、进程间通信(包括管道、消息、共享内存、socket、RPC等,特别需要注意的是设备内部不同单板间通讯也属于进程间通信)、API参数、全局变量。 - -来自程序外部的数据通常被认为是不可信的,在使用这些数据之前,需要进行合法性校验。 -如果不对这些外部数据进行校验,将可能导致不可预期的安全风险。 - -注意:不要使用断言检查外部输入数据,断言应该用于防止不正确的程序假设,而不能用在发布版本上检查程序运行过程中发生的错误。 - -对来自程序外部的数据要校验处理后才能使用。典型场景包括: - -**作为数组索引** -将不可信的数据作为数组索引,可能导致超出数组上限,从而造成非法内存访问。 -**作为内存偏移地址** -将不可信数据作为指针偏移访问内存,可能造成非法内存访问,并可以造成进一步的危害,如任意地址读/写。 -**作为内存分配的尺寸参数** -使用0长度分配内存可能造成非法内存访问;未限制分配内存大小会造成过度资源消耗。 -**作为循环条件** -将不可信数据作为循环限定条件,可能会引发缓冲区溢出、内存越界读/写、死循环等问题。 -**作为除数** -可能产生除零错误(被零除)。 -**作为命令行参数** -可能产生命令注入漏洞。 -**作为数据库查询语句的参数** -可能产生SQL注入漏洞。 -**作为输入/输出格式化字符串** -可能产生格式化字符串漏洞。 -**作为内存复制长度** -可能造成缓冲区溢出问题。 -**作为文件路径** -直接打开不可信路径,可能会导致目录遍历攻击,攻击者操作了无权操作的文件,使得系统被攻击者所控制。 - -输入校验包括但不局限于: - -- API接口参数合法性 -- 校验数据长度 -- 校验数据范围 -- 校验数据类型和格式 -- 校验输入只包含可接受的字符(“白名单”形式),尤其需要注意一些特殊情况下的特殊字符。 - -**外部数据校验原则** -**1.信任边界** -由于外部数据不可信,因此系统在运行过程中,如果数据传输与处理跨越不同的信任边界,为了防止攻击蔓延,必须对来自信任边界外的其他模块的数据进行合法性校验。 -(a)so(或者dll)之间 -so或dll作为独立的第三方模块,用于对外导出公共的api函数,供其他模块进行函数调用。so/dll无法确定上层调用者是否传递了合法参数,因此so/dll的公共函数需要检查调用者提供参数的合法性。so/dll应该设计成低耦合、高复用性,尽管有些软件的so/dll当前设计成只在本软件中使用,但仍然应该将不同的so/dll模块视为不同的信任边界。 -(b)进程与进程之间 -为防止通过高权限进程提权,进程与进程之间的IPC通信(包括单板之间的IPC通信、不同主机间的网络通信),应视为不同信任边界。 -(c)应用层进程与操作系统内核 -操作系统内核具有比应用层更高的权限,内核向应用层提供的接口,应该将来自应用层的数据作为不可信数据处理。 -(d)可信执行环境内外环境 -为防止攻击蔓延至可信执行环境,TEE、SGX等对外提供的接口,应该将来自外部的数据作为不可信数据处理。 - -**2.外部数据校验** -外部数据进入到本模块后,必须经过合法性校验才能使用。被校验后的合法数据,在本模块内,后续传递到内部其他子函数,不需要重复校验。 - -**【反例】** -函数Foo处理外部数据,由于buffer不一定是’\0’结尾, strlen 的返回值 nameLen 有可能超过 len,导致越界读取数据。 - -```cpp -void Foo(const unsigned char* buffer, size_t len) -{ - // buffer可能为空指针,不保证以'\0'结尾 - const char* s = reinterpret_cast(buffer); - size_t nameLen = strlen(s); - std::string name(s, nameLen); - Foo2(name); - ... -} -``` - -**【正例】** -对外部参数做合法性校验,本例中使用 strnlen 进行字符串长度计算,缓解读越界风险。 - -```cpp -void Foo(const unsigned char* buffer, size_t len) -{ - // 必须做参数合法性校验 - if (buffer == nullptr || len == 0 || len >= MAX_BUFFER_LEN) { - ... // 错误处理 - } - - const char* s = reinterpret_cast(buffer); - size_t nameLen = strnlen(s, len); // 使用strnlen缓解读越界风险 - if (nameLen == len) { - ... // 错误处理 - } - std::string name(s, nameLen); - ... - Foo2(name); - ... -} -``` - -```cpp -namespace ModuleA { -// Foo2 为模块内部函数,约定为由调用者保证参数的合法性 -static void Foo2(const std::string& name) -{ - ... - Bar(name.c_str()); // 调用MODULE_B中的函数 -} - -// Foo 为模块的外部接口,需要校验参数的合法性 -void Foo(const unsigned char* buffer, size_t len) -{ - // 检查空指针、参数合法范围等 - if (buffer == nullptr || len <= sizeof(int)) { - // 错误处理 - ... - } - - int nameLen = *(reinterpret_cast(buffer)); // 从报文中获取name字符串长度 - // nameLen 是不可信数据,必须检查合法性 - if (nameLen <= 0 || static_cast(nameLen) > len - sizeof(int)) { - // 错误处理 - ... - } - - std::string name(reinterpret_cast(buffer), nameLen); - Foo2(name); // 调用本模块内内部函数 - ... -} -} -``` - -以下是使用C语言编写的`MODULE_B`模块中的代码: - -```cpp -// Bar 为 MODULE_B 模块的公共函数, -// 其约定为,如果参数name不为nullptr,那么必须是一个具有’\0’结尾的合法字符串并且长度大于0 -void Bar(const char* name) -{ - // 必须做参数合法性校验 - if (name == nullptr || name[0] == '\0') { - // 错误处理 - ... - } - size_t nameLen = strlen(name); // 不需要使用strnlen - ... -} -``` - -对于模块A来说, buffer 是外部不可信输入,必须做严格的校验,从 buffer 解析出来的 name,在解析过程中进行了合法性校验,在模块A内部属于合法数据,作为参数传递给内部子函数时不需要再做合法性校验(如果要继续对 name 内容进行解析,那么仍然必须对 name 内容进行校验)。 -如果模块A中的 name 继续跨越信任面传递给其他模块(在本例中是直接调用模块B的公共函数,也可以是通过文件、管道、网络等方式),那么对于B模块来说, name 属于不可信数据,必须做合法性校验。 - -# 类 - -## 类的成员变量必须显式初始化 - -**【描述】** -如果没有对类成员变量显示初始化,会使对象处于一种不确定状态。如果类的成员变量具有默认构造函数,那么可以不需要显式初始化。 - -**【反例】** - -```cpp -class Message { -public: - void Process() - { - ... - } - -private: - uint32_t msgId; // 不符合:成员变量没有被初始化 - size_t msgLength; // 不符合:成员变量没有被初始化 - unsigned char* msgBuffer; // 不符合:成员变量没有被初始化 - std::string someIdentifier; // 默认构造函数仅会初始化该成员 -}; - -Message message; // message成员变量没有被完全初始化 -message.Process(); // 后续使用存在隐患 -``` - -**【正例】** -一种做法是在类成员变量声明时显示初始化。 - -```cpp -class Message { -public: - void Process() - { - ... - } - -private: - uint32_t msgId{0}; - size_t msgLength{0}; - unsigned char* msgBuffer{nullptr}; - std::string someIdentifier; // 具有默认构造函数,不需要显式初始化 -}; -``` - -另一种做法是使用构造函数初始化列表初始化。 - -```cpp -class Message { -public: - Message() : msgId(0), msgLength(0), msgBuffer(nullptr) {} - void Process() - { - ... - } - -private: - uint32_t msgId; - size_t msgLength; - unsigned char* msgBuffer; - std::string someIdentifier; // 具有默认构造函数,不需要显式初始化 -}; -``` - -## 明确需要实现哪些特殊成员函数 - -**【描述】** -**三之法则(Rule of three):** -若某个类需要用户定义的析构函数、用户定义的拷贝构造函或拷贝赋值操作符,则它基本三者全部都需要。 - -```cpp -class Foo { -public: - Foo(const char* buffer, size_t size) { Init(buffer, size); } - Foo(const Foo& other) { Init(other.buf, other.size); } - - Foo& operator=(const Foo& other) - { - Foo tmp(other); - Swap(tmp); - return *this; - } - - ~Foo() { delete[] buf; } - - void Swap(Foo& other) noexcept - { - using std::swap; - swap(buf, other.buf); - swap(size, other.size); - } - -private: - void Init(const char* buffer, size_t size) - { - this->buf = new char[size]; - memcpy(this->buf, buffer, size); - this->size = size; - } - - char* buf; - size_t size; -}; -``` - -如果类对某种资源进行管理,而资源句柄是非类类型的对象(裸指针、文件描述符等),则这些隐式定义的成员函数通常都不正确,其析构函数不做任何事,而拷贝构造函数/拷贝赋值操作符则进行“浅拷贝”。 - -通过可复制句柄来管理不可复制资源的类,可能必须将其拷贝赋值和拷贝构造函数声明为私有的并且不提供其定义,或将它们定义为delete的。 - -**五之法则(Rule of five):** -如果定义了析构函数、拷贝构造函数或拷贝赋值操作符,会阻止移动构造函数和移动赋值操作符的隐式定义,所以任何想要移动语义的类必须声明全部五个特殊成员函数。 - -```cpp -class Foo { -public: - Foo(const char* buffer, size_t size) { Init(buffer, size); } - Foo(const Foo& other) { Init(other.buf, other.size); } - - Foo& operator=(const Foo& other) - { - Foo tmp(other); - Swap(tmp); - return *this; - } - - Foo(Foo&& other) noexcept : buf(std::move(other.buf)), size(std::move(other.size)) - { - other.buf = nullptr; - other.size = 0; - } - - Foo& operator=(Foo&& other) noexcept - { - Foo tmp(std::move(other)); - Swap(tmp); - return *this; - } - - ~Foo() { delete[] buf; } - - void Swap(Foo& other) noexcept - { - using std::swap; - swap(buf, other.buf); - swap(size, other.size); - } - -private: - void Init(const char* buffer, size_t size) - { - this->buf = new char[size]; - memcpy(this->buf, buffer, size); - this->size = size; - } - - char* buf; - size_t size; -}; -``` - -但是如果不提供移动构造函数和移动赋值操作符通常不会发生错误,但会导致失去优化机会。 - -**零之法则(Rule of zero):** -如果类不需要专门处理资源的所有权,那么就不应该有自定义的析构函数、拷贝/移动构造函数或拷贝/移动赋值操作符。 - -```cpp -class Foo { -public: - Foo(const std::string& text) : text(text) {} - -private: - std::string text; -}; -``` - -只要声明了拷贝构造函数、拷贝赋值操作符或析构函数,编译器将不会隐式生成移动构造函数和移动赋值操作符,导致该类的移动操作都变成了代价更高的复制操作。 -只要声明了移动构造函数或移动赋值操作符,编译器会将隐式生成的拷贝构造函数或拷贝赋值操作符定义为delete的,导致改类只能被移动、不能被复制。 -因此,只要声明了其中的任何一个函数,就应当声明其他全部函数,避免出现非预期的结果。 - -类似地,如果基类需要定义public的虚析构函数,那么需要显示定义全部相关的特殊成员函数: - -```cpp -class Base { -public: - ... - Base(const Base&) = default; - Base& operator=(const Base&) = default; - Base(Base&&) = default; - Base& operator=(Base&&) = default; - virtual ~Base() = default; - ... -}; -``` - -但是,如果基类声明了拷贝构造/拷贝赋值操作符,可能会发生切片,所以经常会将基类中的拷贝构造/拷贝赋值操作符显式定义为delete, 并且同时将其他的特殊成员函数也显式定义为delete: - -```cpp -class Base { -public: - ... - Base(const Base&) = delete; - Base& operator=(const Base&) = delete; - Base(Base&&) = delete; - Base& operator=(Base&&) = delete; - virtual ~Base() = default; - ... -}; -``` - -## 基类中的拷贝构造函数、拷贝赋值操作符、移动构造函数、移动赋值操作符必须为非public函数或者为delete函数 - -**【描述】** -如果把一个派生类对象直接赋值给基类对象,会发生切片,只拷贝或者移动了基类部分,损害了多态行为。 - -**【反例】** -如下代码中,基类的拷贝构造函数和拷贝赋值操作符为default,如果派生类对象赋值给基类对象时会发生切片。 -可以将此例中的拷贝构造函数和拷贝赋值操作符声明为delete,编译器可检查出此类赋值行为。 - -```cpp -class Base { -public: - Base() = default; - Base(const Base&) = default; - Base& operator=(const Base&) = default; - ... - virtual void Fun() { std::cout << "Base" << std::endl; } -}; - -class Derived : public Base { - ... - void Fun() override { std::cout << "Derived" << std::endl; } -}; - -void Foo(const Base& base) -{ - Base other = base; // 不符合:发生切片 - other.Fun(); // 调用的是Base类的Fun函数 -} -Derived d; -Foo(d); -``` - -## 在移动构造函数和移动赋值操作符中必须将源对象的资源正确重置 - -**【描述】** -移动构造函数和移动赋值操作符将资源的所有权从一个对象移动到另外一个资源。一旦资源被移动,则应将源对象的资源正确重置。这样可以防止源对象在析构函数中释放了被移动的资源。 - -在被移动的对象中允许保留部分非资源相关数据,但必须保证被移动的对象处于可被正常析构的状态。 -因此,当一个对象被move以后,除非该对象处于明确指定的状态,否则不要依赖已move对象的值,否则可能产生非预期行为。 - -**【反例】** - -```cpp -class Foo { -public: - ... - Foo(Foo&& foo) noexcept : data(foo.data) - { - } - - Foo& operator=(Foo&& foo) - { - data = foo.data; - return *this; - } - - ~Foo() - { - delete[] data; - } - -private: - char* data = nullptr; -}; -``` - -上述Foo的移动构造函数和移动赋值操作符没有正确将源对象的资源重置,源对象析构的时候会将资源释放,导致新创建的对象中接管的资源成为无效资源。 - -**【正例】** - -```cpp -class Foo { -public: - ... - Foo(Foo&& foo) noexcept : data(foo.data) - { - foo.data = nullptr; - } - - Foo& operator=(Foo&& foo) - { - if (this == &foo) { - return *this; - } - delete[] data; - data = foo.data; - foo.data = nullptr; - return *this; - } - - ~Foo() - { - delete[] data; - } - -private: - char* data = nullptr; -}; -``` - -此外,不要依赖已经被move对象的值。 -某些标准库std::string的实现可能对短字节做优化,在实现移动语义时可能不会修改被移动字符串的内容,导致如下代码输出不一定是预期的b, 有可能输出为ab,存在兼容性问题。 - -```cpp -std::string str{"a"}; -std::string other = std::move(str); - -str.append(1, 'b'); -std::cout << str << std::endl; -``` - -## 通过基类指针释放派生类时,必须将基类中析构函数声明为虚函数 - -**【描述】** -只有基类析构函数是虚函数时,才能保证通过多态调用的时候调用到派生类的析构函数。 -如果没有将基类的析构函数声明为虚函数,当通过基类指针释放派生类时,只会调用基类的析构函数,不会调用派生类的析构函数,导致内存泄漏。 - -**【反例】** -没有将基类的析构函数声明为虚函数,导致了内存泄漏。 - -```cpp -class Base { -public: - Base() = default; - ~Base() { std::cout << "~Base" << std::endl; } - virtual std::string GetVersion() = 0; -}; -class Derived : public Base { -public: - Derived() - { - const size_t numberCount = 100; - numbers = new int[numberCount]; - } - - ~Derived() - { - delete[] numbers; - std::cout << "~Derived" << std::endl; - } - - std::string GetVersion() - { - return std::string("hello!"); - } - -private: - int* numbers; -}; -void Foo() -{ - Base* base = new Derived(); - delete base; // 调用的是 Base 的析构函数,造成资源泄漏 -} -``` - -## 对象赋值或初始化避免切片操作 - -**【描述】** - -将派生类对象按值赋值给基类对象时会发生切片,损害了多态行为。 - -如果确实需要将对象切片处理,建议定义一个显式操作完成这个功能,以避免理解错误,增加可维护性。 - -**【反例】** - -```cpp -class Base { - virtual void Fun(); -}; - -class Derived : public Base { - ... -}; -void Foo(const Base& base) -{ - Base other = base; // 不符合:发生切片 - other.Fun(); // 调用的是Base类的Fun函数 -} -Derived d; -Base b{d}; // 不符合:仅构造了Base部分 -b = d; // 不符合:仅赋值Base部分 - -Foo(d); -``` - -# 表达式与语句 - -## 确保对象在使用之前已被初始化 - -**【描述】** -本条款中的“初始化”指的是通过定义时显示初始化、默认构造初始化、赋值等方式使对象拥有期望的值。 -读取一个未初始化的值时,程序可能产生未定义行为,因此需要确保对象在使用之前已被初始化。 - -**【反例】** - -```cpp -void Bar(int data); -... -void Foo() -{ - int data; - Bar(data); // 不符合:未初始化就使用 - ... -} -``` - -如果有不同分支,要确保所有分支都得到初始化后才能使用。 - -```cpp -void Bar(int data); -... -void Foo(int condition) -{ - int data; - if (condition > 0) { - data = CUSTOMIZED_SIZE; - } - Bar(data); // 不符合:部分分支该值未初始化 - ... -} -``` - -**【正例】** - -```cpp -void Bar(int data); -... -void Foo() -{ - int data{0}; // 符合:显示初始化 - Bar(data); - ... -} -void InitData(int& data); -... -void Foo() -{ - int data; - InitData(data); // 符合:通过函数初始化 - ... -} -std::string data; // 符合:默认构造函数初始化 -... -``` - -## 避免使用reinterpret_cast - -**【描述】** -`reinterpret_cast`用于转换不相关类型。尝试用`reinterpret_cast`将一种类型强制转换另一种类型,这破坏了类型的安全性与可靠性,是一种不安全的转换。不同类型之间尽量避免转换。 - -## 避免使用const_cast - -**【描述】** -`const_cast`用于移除对象的`const`和`volatile`性质。 - -使用const_cast转换后的指针或者引用来修改const对象或volatile对象,程序会产生未定义行为。 - -**【反例】** - -```cpp -const int i = 1024; -int* p = const_cast(&i); -*p = 2048; // 未定义行为 -class Foo { -public: - void SetValue(int v) { value = v; } - -private: - int value{0}; -}; - -int main() -{ - const Foo foo; - Foo* p = const_cast(&foo); - p->SetValue(2); // 未定义行为 - return 0; -} -``` - -## 确保有符号整数运算不溢出 - -**【描述】** -在C++标准中,有符号整数溢出会使程序产生未定义行为。 -因此,不同的实现可以自由处理有符号整数溢出。例如:在将有符号整数类型定义为模数的实现中,编译器可以不检测整数溢出。 - -使用溢出后的数值可能导致程序缓冲区读写越界等风险。出于安全考虑,对外部数据中的有符号整数值在如下场景中使用时,需要确保运算不会导致溢出: - -- 指针运算的整数操作数(指针偏移值) -- 数组索引 -- 变长数组的长度(及长度运算表达式) -- 内存复制长度 -- 内存分配函数的参数 -- 循环判断条件 - -在精度低于int的整数类型上进行运算时,需要考虑整数提升。程序员还需要掌握整数转换规则,包括隐式转换规则,以便设计安全的算术运算。 - -**【反例】** -如下代码示例中,参与减法运算的整数是外部数据,在使用前未做校验,可能出现整数溢出,进而造成后续的内存复制操作出现缓冲区溢出。 - -```cpp -unsigned char* content = ... // 指向报文头的指针 -size_t contentSize = ... // 缓冲区的总长度 -int totalLen = ... // 报文总长度 -int skipLen = ... // 从消息中解析出来的需要忽略的数据长度 - -std::vector dest; - -// 用 totalLen - skipLen 计算剩余数据长度,可能出现整数溢出 -std::copy_n(&content[skipLen], totalLen - skipLen, std::back_inserter(dest)); -... -``` - -**【正例】** -如下代码示例中,重构为使用`size_t`类型的变量表示数据长度,并校验外部数据长度是否在合法范围内。 - -```cpp -unsigned char* content = ... //指向报文头的指针 -size_t contentSize = ... // 缓冲区的总长度 -size_t totalLen = ... // 报文总长度 -size_t skipLen = ... // 从消息中解析出来的需要忽略的数据长度 - -if (skipLen >= totalLen || totalLen > contentSize) { - ... // 错误处理 -} - -std::vector dest; -std::copy_n(&content[skipLen], totalLen - skipLen, std::back_inserter(dest)); -... -``` - -**【反例】** -如下代码示例中,对来自外部数据的数值范围做了校验,但是由于second是`int`类型,而校验条件中错误的使用了`std::numeric_limits::max()`进行限制,导致整数溢出。 - -```cpp -int second = ... // 来自外部数据 - - // 错误的使用了unsigned long的取值范围做上限校验 -if (second < 0 || second > (std::numeric_limits::max() / 1000)) { - return -1; -} -int millisecond = second * 1000; // 可能出现整数溢出 -... -``` - -**【正例】** -一种改进方案是将second的类型修改为`unsigned long`类型,这种方案适用于修改了变量类型更符合业务逻辑的场景。 - -```cpp -unsigned long second = ... // 将类型重构为 unsigned long 类型 - -if (second > (std::numeric_limits::max() / 1000)) { - return -1; -} -int millisecond = second * 1000; -... -``` - -另一种改进方案是将数值上限修改为`std::numeric_limits::max()`。 - -```cpp -int second = ... // 来自外部数据 - -if (second < 0 || second > (std::numeric_limits::max() / 1000)) { - return -1; -} -int millisecond = second * 1000; -``` - -**【影响】** -整数溢出可能导致程序缓冲区溢出以及执行任意代码。 - -## 确保无符号整数运算不回绕 - -**【描述】** -无符号整数的算术运算结果可能会发生整数回绕,使用回绕后的数值其可能导致程序缓冲区读写越界等风险。 -出于安全考虑,对外部数据中的无符号整数值在如下场景中使用时,需要确保运算不会导致回绕: - -- 指针偏移值(指针算术运算的整数操作数) -- 数组索引值 -- 内存拷贝的长度 -- 内存分配函数的参数 -- 循环判断条件 - -**【反例】** -如下代码示例中,校验下一个子报文的长度加上已处理报文的长度是否超过了整体报文的最大长度,在校验条件中的加法运算可能会出现整数回绕,造成绕过该校验的问题。 - -```cpp -size_t totalLen = ... // 报文的总长度 -size_t readLen = 0; // 记录已经处理报文的长度 -... -size_t pktLen = ParsePktLen(); // 从网络报文中解析出来的下一个子报文的长度 -if (readLen + pktLen > totalLen) { // 可能出现整数回绕 - ... // 错误处理 -} -... -readLen += pktLen; -... -``` - -**【正例】** -由于readLen变量记录的是已经处理报文的长度,必然会小于totalLen,因此将代码中的加法运算修改为减法运算,不会导致条件绕过。 - -```cpp -size_t totalLen = ... // 报文的总长度 -size_t readLen = 0; // 记录已经处理报文的长度 -... -size_t pktLen = ParsePktLen(); // 来自网络报文 -if (pktLen > totalLen - readLen) { - ... // 错误处理 -} -... -readLen += pktLen; -... -``` - -**【反例】** -如下代码示例中,校验len合法范围的运算可能会出现整数回绕,导致条件绕过。 - -```cpp -size_t len = ... // 来自用户态输入 - -if (SCTP_SIZE_MAX - len < sizeof(SctpAuthBytes)) { // 减法操作可能出现整数回绕 - ... // 错误处理 -} -... = kmalloc(sizeof(SctpAuthBytes) + len, gfp); // 可能出现整数回绕 -... -``` - -**【正例】** -如下代码示例中,调整减法运算的位置(需要确保在编译期间减法表达式的值不回绕),避免整数回绕问题。 - -```cpp -size_t len = ... // 来自用户态输入 - -if (len > SCTP_SIZE_MAX - sizeof(SctpAuthBytes)) { // 确保在编译期间减法表达式的值不翻转 - ... // 错误处理 -} -... = kmalloc(sizeof(SctpAuthBytes) + len, gfp); -... -``` - -**【例外】** -为正确执行程序,必要时无符号整数可能表现出模态(回绕)。建议将变量声明明确注释为支持模数行为,并且对该整数的每个操作也应明确注释为支持模数行为。 - -**【影响】** -整数回绕可能导致程序缓冲区溢出以及执行任意代码。 - -## 确保除法和余数运算不会导致除零错误(被零除) - -**【描述】** -整数的除法运算或取余运算的除数为0会导致程序产生未定义的行为。如果涉及到除法或者取余运算,必须确保除数不为0。 - -在二进制浮点数算数标准ISO/IEEE Std 754-1985中规定了浮点数被零除的行为及结果,但是仍然取决于程序所运行的软硬件环境是否遵循该标准。 -因此,在做浮点数被零除的运算前,应确保软硬件环境已遵循二进制浮点数算数标准,否则仍然存在未定义行为。 - -**【反例】** - -```c -size_t a = ReadSize(); // 来自外部数据 -size_t b = 1000 / a; // 不符合:a可能是0 -size_t c = 1000 % a; // 不符合:a可能是0 -... -``` - -**【正例】** -如下代码示例中,添加a是否为0的校验,防止除零错误。 - -```c -size_t a = ReadSize(); // 来自外部数据 -if (a == 0) { - ... // 错误处理 -} -size_t b = 1000 / a; // 符合:确保a不为0 -size_t c = 1000 % a; // 符合:确保a不为0 -... -``` - -**【影响】** -除零错误可能导致拒绝服务。 - -## 只能对无符号整数进行位运算 - -**【描述】** -对有符号整数进行位运算时可能产生未定义行为,本条款要求只能对无符号整数进行位运算,避免出现未定义行为。 -此外,对精度低于int类型的无符号整数进行位运算时,编译器会进行整数提升,再对提升后的整数进行位运算,因此要特别注意对于这类无符号整数的位运算,避免出现非预期的结果。 -本条款涉及的位操作符包括: - -- `~`(求反) -- `&`(与) -- `|`(或) -- `^`(异或) -- `>>`(右移位) -- `<<`(左移位) -- `&=` -- `^=` -- `|=` -- `>>=` -- `<<=` - -在C++20中有符号整数的移位操作具有良好的定义,可以对有符号整数进行移位运算。 - -**【反例】** -在C++20之前,如下代码中的右移操作`data >> 24`可以实现为算术(有符号)移位或逻辑(无符号)移位;在左移操作`value << data`中,如果value为负数或者左移后的结果超出其整数提升后类型的表示范围,会导致程序产生未定义行为。 - -```cpp -int32_t data = ReadByte(); -int32_t value = data >> 24; // 对有符号整数进行右移运算,其结果是实现定义的 - -... // 检查 data 的合法范围 - -int32_t mask = value << data; // 对有符号整数进行左移运算,程序可能产生未定义行为 -``` - -**【正例】** - -```cpp -uint32_t data = static_cast(ReadByte()); -uint32_t value = data >> 24; // 只对无符号整数进行位运算 - -... // 检查 data 的合法范围 - -uint32_t mask = value << data; -``` - -对于精度低于`int`的无符号整数进行位运算,由于整数提升,其结果可能是非预期的,应将操作结果立即转换为期望的类型, 避免因整数提升而导致非预期结果。 - -**【反例】** - -```cpp -uint8_t mask = 1; -uint8_t value = (~mask) >> 4; // 不符合:~运算的结果会包含高位数据,可能不符合预期 -``` - -**【正例】** - -```cpp -uint8_t mask = 1; -uint8_t value = (static_cast(~mask)) >> 4; // 符合:~运算后立即转换为期望的类型 -``` - -**【例外】** - -- 作为位标志使用的有符号整数常量或枚举值,可以作为 & 和 | 操作符的操作数。 - -```cpp -int fd = open(fileName, O_CREAT | O_EXCL, S_IRWXU | S_IRUSR); -``` - -- 一个在编译时就可以确定的有符号正整数,可以作为移位操作符的右操作数。 - -```cpp -constexpr int SHIFT_BITS = 3; -... -uint32_t id = ...; -uint32_t type = id >> SHIFT_BITS; -``` - -# 资源管理 - -## 外部数据作为数组索引或者内存操作长度时,需要校验其合法性 - -**【描述】** -外部数据作为数组索引对内存进行访问时,必须对数据的大小进行严格的校验,确保数组索引在有效范围内,否则会导致严重的错误。 -将数据复制到容量不足以容纳该数据的内存中会导致缓冲区溢出。为了防止此类错误,必须根据目标容量的大小限制被复制的数据大小,或者必须确保目标容量足够大以容纳要复制的数据。 - -**【反例】** -如下代码示例中,SetDevId()函数存在差一错误,当 index 等于 `DEV_NUM` 时,恰好越界写一个元素。 - -```cpp -struct Dev { - int id; - char name[MAX_NAME_LEN]; -}; - -static Dev devs[DEV_NUM]; - -int SetDevId(size_t index, int id) -{ - if (index > DEV_NUM) { // 存在差一错误 - ... // 错误处理 - } - - devs[index].id = id; - return 0; -} -``` - -**【正例】** -如下代码示例中,修改校验索引的条件,避免差一错误。 - -```cpp -struct Dev { - int id; - char name[MAX_NAME_LEN]; -}; - -static Dev devs[DEV_NUM]; - -int SetDevId(size_t index, int id) -{ - if (index >= DEV_NUM) { - ... // 错误处理 - } - devs[index].id = id; - return 0; -} -``` - -**【反例】** -外部输入的数据不一定会直接作为内存复制长度使用,还可能会间接参与内存复制操作。 -如下代码示例中,inputTable.count来自设备外部报文,虽然没有直接作为内存复制长度使用,而是作为for循环体的上限使用,间接参与了内存复制操作。由于没有校验其大小,可造成缓冲区溢出: - -```cpp -struct ValueTable { - size_t count; - int val[MAX_NUMBERS]; -}; - -void ValueTableDup(const ValueTable& inputTable) -{ - ValueTable outputTable = {0, {0}}; - ... - for (size_t i = 0; i < inputTable.count; i++) { - outputTable.val[i] = inputTable.val[i]; - } - ... -} -``` - -**【正例】** -如下代码示例中,对inputTable.count做了校验。 - -```cpp -struct ValueTable { - size_t count; - int val[MAX_NUMBERS]; -}; - -void ValueTableDup(const ValueTable& inputTable) -{ - ValueTable outputTable = {0, {0}}; - ... - // 根据业务场景,对来自外部报文的循环长度inputTable.count - // 与outputTable.val数组大小做校验,避免造成缓冲区溢出 - if (inputTable->count > - sizeof(outputTable.val) / sizeof(outputTable.val[0])) { - ... // 错误处理 - } - for (size_t i = 0; i < inputTable.count; i++) { - outputTable.val[i] = inputTable.val[i]; - } - ... -} -``` - -**【影响】** -如果复制数据的长度是外部可控的,则复制数据的过程中可能出现缓冲区溢出,在某些情况下可以造成任意代码执行漏洞。 - -## 内存申请前,必须对申请内存大小进行合法性校验 - -**【描述】** -当申请内存大小由程序外部输入时,内存申请前,要求对申请内存大小进行合法性校验,防止申请0长度内存,或者过多地、非法地申请内存。 -因为内存的资源是有限的,是可以被耗尽的。当申请内存的数值过大(可能一次就申请了非常大的超预期的内存;也可能循环中多次申请内存),很可能会造成非预期的资源耗尽。 -大小不正确的参数、不当的范围检查、整数溢出或者截断都可能造成实际分配的缓冲区不符合预期。如果申请内存受攻击者控制,还可能会发生缓冲区溢出等安全问题。 - -**【反例】** -如下代码示例中,将动态分配size大小的内存。但是未对size做合法性校验。 - -```c -// 这里的size在传入DoSomething()函数之前还未做过合法性校验 -int DoSomething(size_t size) -{ - ... - char* buffer = new char[size]; // 本函数内,size使用前未做校验 - ... - delete[] buffer; -} -``` - -**【正例】** -如下代码示例中,动态分配size大小的内存前,进行了符合程序需要的合法性校验。 - -```c -// 这里的size在传入DoSomething()函数之前还未做过合法性校验 -int DoSomething(size_t size) -{ - // 本函数内,对size做合法性校验,FOO_MAX_LEN被定义为符合程序设计预期的最大内存空间 - if (size == 0 || size > FOO_MAX_LEN) { - ... // 错误处理 - } - char* buffer = new char[size]; - ... - delete[] buffer; -} -``` - -**【影响】** -如果申请内存的大小是外部可控的,可能导致资源耗尽,造成拒绝服务。 - -## 在传递数组参数时,不应单独传递指针 - -**【描述】** -当函数参数类型为数组(不是数组的引用)或者指针时,若调用者传入数组,则在参数传递时数组会退化为指针,其数组长度信息会丢失,容易引发越界读写等问题。 -如果函数只接收固定长度的数组为参数,可以定义参数类型为数组引用或者`std::array`。 -如果函数接受的是不带长度的指针,那么应该把长度作为另外一个参数也传递进去。 - -**【反例】** - -```cpp -constexpr int MAX_LEN = 1024; -constexpr int SIZE = 10; - -void UseArr(int arr[]) -{ - for (int i = 0; i < MAX_LEN; i++) { - std::cout << arr[i] << std::endl; - } -} - -void Test() -{ - int arr[SIZE] = {0}; - UseArr(arr); -} -``` - -**【正例】** - -可以把指针和长度合起来做成一个类型,方便使用。例如:类似下面的简单封装: - -```cpp -template -class Slice { -public: - template - Slice(T (&arr)[N]) : data(arr), len(N) {} - - template - Slice(std::array arr) : data(arr.data()), len(N) {} - - Slice(T* arr, size_t n) : data(arr), len(n) {} - ... - -private: - T* data; - size_t len; -}; - -void UseArr(Slice arr) -{ - for (int i = 0; i < arr.size(); i++) { - std::cout << arr[i] << std::endl; - } -} - -constexpr int SIZE = 10; - -void Test() -{ - int arr[SIZE] = {0}; - Slice s{arr}; - UseArr(s); -} -``` - -如果项目允许的话,推荐使用成熟的库来做这个事情,例如C++20中的`std::span`类型。 - -在不使用这些工具类的情况下,可以把指针和长度作为两个参数传递。 - -```cpp -void UseArr(int arr[], size_t len) -{ - for (int i = 0; i < len; i++) { - std::cout << arr[i] << std::endl; - } -} - -constexpr int SIZE = 10; - -void Test() -{ - int arr[SIZE] = {0}; - UseArr(arr, sizeof(arr)); -} -``` - -## 当lambda会逃逸出函数外面时,禁止按引用捕获局部变量 - -**【描述】** -如果一个 lambda 不止在局部范围内使用,禁止按引用捕获局部变量,比如它被传递到了函数的外部,或者被传递给了其他线程的时候。lambda按引用捕获就是把局部对象的引用存储起来。如果 lambda 的生命周期会超过局部变量生命周期,则可能导致内存不安全。 - -**【反例】** - -```cpp -void Foo() -{ - int local = 0; - // 按引用捕获 local,当函数返回后,local 不再存在,因此 Process() 的行为未定义 - threadPool.QueueWork([&] { Process(local); }); -} -``` - -**【正例】** - -```cpp -void Foo() -{ - int local = 0; - // 按值捕获 local, 在Process() 调用过程中,local 总是有效的 - threadPool.QueueWork([local] { Process(local); }); -} -``` - -## 指向资源句柄或描述符的变量,在资源释放后立即赋予新值 - -**【描述】** -指向资源句柄或描述符的变量包括指针、文件描述符、socket描述符以及其他指向资源的变量。 -以指针为例,当指针成功申请了一段内存之后,在这段内存释放以后,如果其指针未立即设置为nullptr,也未分配一个新的对象,那这个指针就是一个悬空指针。 -如果再对悬空指针操作,可能会发生重复释放或访问已释放内存的问题,造成安全漏洞。 -消减该漏洞的有效方法是将释放后的指针立即设置为一个确定的新值,例如设置为nullptr。对于全局性的资源句柄或描述符,在资源释放后,应该马上设置新值,以避免使用其已释放的无效值;对于只在单个函数内使用的资源句柄或描述符,应确保资源释放后其无效值不被再次使用。 - -**【反例】** -如下代码示例中,根据消息类型处理消息,处理完后释放掉body指向的内存,但是释放后未将指针设置为nullptr。如果还有其他函数再次处理该消息结构体时,可能出现重复释放内存或访问已释放内存的问题。 - -```c -int Fun() -{ - SomeStruct *msg = nullptr; - - ... // 使用new分配msg、msg->body的内存空间并初始化msg - - if (msg->type == MESSAGE_A) { - ... - delete msg->body; // 不符合:释放内存后,未置空 - } - - ... - - // 将msg存入全局队列,后续可能使用已释放的body成员 - if (!InsertMsgToQueue(msg)) { - delete msg->body; // 可能再次释放了body的内存 - delete msg; - return -1; - } - return 0; -} -``` - -**【正例】** -如下代码示例中,立即对释放后的指针设置为nullptr,避免重复释放指针。 - -```c -int Fun() -{ - SomeStruct *msg = nullptr; - - ... // 使用new分配msg、msg->body的内存空间并初始化msg - - if (msg->type == MESSAGE_A) { - ... - delete msg->body; - msg->body = nullptr; - } - - ... - - // 将msg存入全局队列 - if (!InsertMsgToQueue(msg)) { - delete msg->body; // 马上离开作用域,不必赋值 nullptr - delete msg; // 马上离开作用域,不必赋值 nullptr - return -1; - } - return 0; -} -``` - -默认的内存释放函数针对空指针不执行任何动作。 - -**【反例】** -如下代码示例中文件描述符关闭后未赋新值。 - -```c -SOCKET s = INVALID_SOCKET; -int fd = -1; -... -closesocket(s); -... -close(fd); -... -``` - -**【正例】** -如下代码示例中,在资源释放后,对应的变量应该立即赋予新值。 - -```c -SOCKET s = INVALID_SOCKET; -int fd = -1; -... -closesocket(s); -s = INVALID_SOCKET; -... -close(fd); -fd = -1; -... -``` - -**【影响】** -再次使用已经释放的内存,或者再次释放已经释放的内存,或其他使用已释放资源的行为,可能导致拒绝服务或执行任意代码。 - -## new和delete配对使用,new[]和delete[]配对使用 - -**【描述】** -使用 new 操作符创造的对象,只能使用 delete 操作符来销毁。 -使用 new[] 创造的对象数组只能由 delete[] 操作符来销毁。 - -**【反例】** - -```cpp -class C { -public: - C(size_t len) : arr(new int[len]) {} - ~C() - { - delete arr; // 此处应该是 delete[] arr; - } - -private: - int* arr; -}; -``` - -**【正例】** - -```cpp -class C { -public: - C(size_t len) : arr(new int[len]) {} - ~C() { delete[] arr; } - -private: - int* arr; -}; -``` - -## 自定义new/delete操作符需要配对定义,且行为与被替换的操作符一致 - -**【描述】** -自定义操作符的时候,new 和 delete 要配对定义,new[] 和 delete[] 要配对定义。 -自定义 new/delete 操作符的行为要与被替换的 new/delete 的行为一致。 - -**【反例】** - -```cpp -// 如果自定义了 operator new,必须同时自定义对应的 operator delete -struct S { - static void* operator new(size_t sz) - { - ... // 自定义操作 - return ::operator new(sz); - } -}; -``` - -**【正例】** - -```cpp -struct S { - static void* operator new(size_t sz) - { - ... // 自定义操作 - return ::operator new(sz); - } - static void operator delete(void* ptr, size_t sz) - { - ... // 自定义操作 - ::operator delete(ptr); - } -}; -``` - -默认的 new 操作符在内存分配失败时,会抛出`std::bad_alloc`异常,而使用了`std::nothrow`参数的 new 操作符在内存分配失败时,会返回 nullptr。 -自定义的 new/delete 操作符要和内置的操作符行为保持一致。 - -**【反例】** - -```cpp -// 在内存管理模块头文件中声明的函数 -extern void* AllocMemory(size_t size); // 分配失败返回 nullptr -void* operator new(size_t size) -{ - return AllocMemory(size); -} -``` - -**【正例】** - -```cpp -// 在内存管理模块头文件中声明的函数 -extern void* AllocMemory(size_t size); // 分配失败返回 nullptr -void* operator new(size_t size) -{ - void* ret = AllocMemory(size); - if (ret != nullptr) { - return ret; - } - throw std::bad_alloc(); // 分配失败抛出异常 -} - -void* operator new(size_t size, const std::nothrow_t& tag) -{ - return AllocMemory(size); -} -``` - -# 错误处理 - -## 抛异常时,抛对象本身,而不是指向对象的指针 - -**【描述】** -C++中推荐的抛异常方式是抛对象本身,而不是指向对象的指针。 - -用throw语句抛出异常的时候,会构造一个临时对象,称为“异常对象(exception object)”。这个异常对象的生命周期在C++语言中很明确:异常对象在throw时被构造;在某个捕获它的catch语句以`throw`以外的方式结束(即没有重新抛出)时,或者指向这个异常的`std::exception_ptr`对象被析构时析构。 - -抛出指针,会使回收被抛出对象的责任不明确。捕获异常的地方是否有义务对该指针进行`delete`操作,取决于该对象是如何分配的(例如静态变量,或者用`new`分配),以及这个对象是否被共享了。但是指针类型本身并不能表明这个对象的生命周期以及所有权,也就无法判断是否应该`delete`。如果应该`delete`却没有做,会造成内存泄露;如果不该`delete`却做了,会造成重复释放。 - -**【反例】** - -不要抛指针。 - -```cpp -static SomeException exc1("reason 1"); - -try { - if (SomeFunction()) { - throw &exc1; // 不符合:这是静态对象的指针,不应该delete - } else { - throw new SomeException("reason 2"); // 不符合:这是动态分配的,应该delete - } -} catch (const SomeException* e) { - delete e; // 不符合:这里不能确定是否需要delete -} -``` - -**【正例】** - -永远抛异常对象本身。 - -```cpp -try { - if (SomeFunction()) { - throw SomeException("reason 1"); - } else { - throw SomeException("reason 2"); - } -} catch (const SomeException& e) { - ... // 符合:这里可以确定不需要delete -} -``` - -## 禁止从析构函数中抛出异常 - -**【描述】** - -析构函数默认自带`noexcept`属性,如果析构函数抛出异常,会直接导致`std::terminate`。自C++11起,允许析构函数被标记为`noexcept(false)`,但即便如此,如果析构函数在stack unwinding的过程中被调用(例如另一个异常抛出,导致栈上的局部变量被析构),结果也是`std::terminate`,而析构函数最大的作用就是在不论正常返回还是抛出异常的情况下都能清理局部变量。因此,让析构函数抛出异常一般都是不好的。 - -# 标准库 - -## 禁止从空指针创建std::string - -**【描述】** -将空指针传递给std::string构造函数,会解引用空指针,从而导致程序产生未定义行为。 - -**【反例】** - -```cpp -void Foo() -{ - const char* path = std::getenv("PATH"); - std::string str(path); // 错误:这里没有判断getenv的返回值是否为nullptr - std::cout << str << std::endl; -} -``` - -**【正例】** - -```cpp -void Foo() -{ - const char* path = std::getenv("PATH"); - if (path == nullptr) { - ... // 报告错误 - return; - } - std::string str(path); - ... - std::cout << str << std::endl; -} -void Foo() -{ - const char* path = std::getenv("PATH"); - std::string str(path == nullptr ? path : ""); - ... // 判断空字符串 - std::cout << str << std::endl; // 必要时判断空字符串 -} -``` - -## 不要保存std::string类型的c_str和data成员函数返回的指针 - -**【描述】** -为保证调用std::string对象的c_str()和data()成员函数返回的引用值结果的有效性,不应保存std::string类型的c_str()和data()的结果,而是在每次需要时直接调用(调用的开销会被编译器内联优化)。否则,当调用此std::string对象的修改方法修改对象后,或超出std::string对象作用域时,之前存储的指针将会失效。使用失效的指针将导致未定义行为。 - -**【反例】** - -```cpp -void Bar(const char* data) -{ - ... -} - -void Foo1() -{ - std::string name{"demo"}; - const char* text = name.c_str(); // 表达式结束以后,name的生命周期还在,指针有效 - - // 如果中间调用了std::string的非const成员函数,导致name被修改,例如operator[], begin()等, - // 可能会导致text的内容不可用,或者不是原来的字符串 - name = "test"; - name[1] = '2'; - ... - Bar(text); // 此处text已不再指向合法内存空间 -} - -void Foo2() -{ - std::string name{"demo"}; - std::string test{"test"}; - const char* text = (name + test).c_str(); // 表达式结束以后,+号产生的临时对象被销毁 - ... - Bar(text); // 此处text已不再指向合法内存空间 -} - -void Foo3(std::string& s) -{ - const char* data = s.data(); - ... - s.replace(0, 3, "***"); - ... - Bar(data); // 此处text已不再指向合法内存空间 -} -``` - -**【正例】** - -```cpp -void Foo1() -{ - std::string name{"demo"}; - - name = "test"; - name[1] = '2'; - ... - Bar(name.c_str()); -} - -void Foo2() -{ - std::string name{"demo"}; - std::string test{"test"}; - name += test; - ... - Bar(name.c_str()); -} - -void Foo3(std::string& s) -{ - ... - s.replace(0, 3, "***"); - ... - Bar(s.data()); -} -``` - -**【例外】** -在少数对性能要求非常高的代码中,为了适配已有的只接受`const char*`类型入参的函数,可以临时保存std::string对象的c_str()方法返回的指针。但是必须严格保证std::string对象的生命周期长于所保存指针的生命周期,并且保证在所保存指针的生命周期内,std::string对象不会被修改。 - -## 确保用于字符串操作的缓冲区有足够的空间容纳字符数据和结束符,并且字符串以null结束符结束 - -**【描述】** -C风格字符串是一个连续的字符序列,由字符序列中的第一个出现的null字符终止并包含该null字符。 - -复制或存储C风格字符串时,必须确保缓冲区有足够的空间容纳字符序列包括null结束符,并且字符串以null结束符结束,否则可能会导致缓冲区溢出问题: - -- 优先使用std::string表示字符串,std::string表示字符串操作更简便,更容易被正确的使用,避免由于C风格字符串使用不当而导致溢出、没有null结束符的问题。 -- 使用C/C++标准库提供的C风格字符串操作函数时,需要确保输入的字符串以null结束符结束、不能超出字符串缓冲区的范围读写字符串、确保进存储操作后的字符串以null结束符结束。 - -**【反例】** - -```cpp -char buf[BUFFER_SIZE]; -std::cin >> buf; -void Foo(std::istream& in) -{ - char buffer[BUFFER_SIZE]; - if (!in.read(buffer, sizeof(buffer))) { // 注意:in.read()不能保证'\0'结尾 - ... // 错误处理 - return; - } - - std::string str(buffer); // 不符合:字符串没有结尾的'\0' - ... -} -void Foo(std::istream& in) -{ - std::string s; - in >> s; // 不符合:没有限制待读取的长度,可能导致资源消耗或攻击 - ... -} -``` - -**【正例】** - -```cpp -char buf[BUFFER_SIZE] = {0}; -std::cin.width(sizeof(buf) - 1); // 注意需要缓冲区长度-1,以留出字符串末尾'\0'的空间 -std::cin >> buf; -void Foo(std::istream& in) -{ - char buffer[BUFFER_SIZE]; - - if (!in.read(buffer, sizeof(buffer)) { // 注意in.read()不能保证'\0'结尾 - ... // 错误处理 - return; - } - - std::string str(buffer, in.gcount()); // 让std::string构造函数,只读取指定长度的字符内容 - ... -} -void Foo(std::istream& in) -{ - std::string s; - in.width(MAX_NEED_SIZE); - in >> s; // 符合:已经限制读取的最大长度 - ... -} -``` - -**【影响】** -未对外部数据中的整数值进行限制可能导致拒绝服务,缓冲区溢出,信息泄露,或执行任意代码。 - -## 禁止使用std::string存储敏感信息 - -**【描述】** -std::string类是C++内部定义的字符串管理类,如果口令等敏感信息通过std::string进行操作,在程序运行过程中,敏感信息可能会散落到内存的各个地方,并且无法清除。 - -**【反例】** -如下代码中,Foo函数中获取密码,保存到std::string变量password中,随后传递给VerifyPassword函数,在这个过程中,password实际上在内存中出现了两份。 - -```cpp -bool VerifyPassword(std::string password) -{ - ... -} - -void Foo() -{ - std::string password = GetPassword(); - VerifyPassword(password); -} -``` - -**【影响】** -未及时清理敏感信息,可能导致信息泄露。 - -## 外部数据用于容器索引或迭代器时必须确保在有效范围内 - -**【描述】** -外部数据是不可信数据,当将外部数据用于容器或数组的索引时,应确保其值在容器或数组可被访问元素的有效范围内;当将外部数据用于迭代器偏移时,应确保偏移后的迭代器值在与迭代器关联容器(从容器对象c的begin()方法创建)的[begin(), end())之间(即大于等于c.begin(),小于等于c.end())。 - -对于具有at()方法的容器(如std::vector, std::set, std::map),对应索引越界或键值内容不存在时,方法将抛出异常;而其对应的operator[]出现索引越界时,将导致未定义行为;或者因键值内容不存在而构造对应键值的默认值不成功时,也将导致未定义行为。 - -**【反例】** - -```cpp -int main() -{ - // 得到一个来自外部输入的整数 (index) - int index; - if (!(std::cin >> index)) { - ... // 错误处理 - return -1; - } - - std::vector c{'A', 'B', 'C', 'D'}; - - // 不符合:没有正确校验index的范围,溢出读取:需要确保index在容器元素的位置范围 - std::cout << c[index] << std::endl; - - // 不符合:需要确保index在容器/数组元素的位置范围 - for (auto pos = std::cbegin(c) + index; pos < std::cend(c); ++pos) { - std::cout << *pos << std::endl; - } - return 0; -} -void Foo(size_t n) -{ - std::vector v{0, 1, 2, 3}; - - // n为外部的API传入的索引,可能导致越界访问 - for_each_n(v.cbegin(), n, [](int x) { std::cout << x; }); -} -``` - -**【正例】** - -```cpp -int main() -{ - // 得到一个来自外部输入的整数 (index) - int index; - if (!(std::cin >> index)) { - ... // 错误处理 - return -1; - } - - // 这里仅以std::vector来举例,std::cbegin(c)等代码也适用于std::string字符串、 - // 和C数组(但不适应于char*变量以及char*表示的静态字符串) - std::vector c{'A', 'B', 'C', 'D'}; - - try { - std::cout << c.at(index) << std::endl; // 符合:索引越界时,at函数将抛出异常 - } catch (const std::out_of_range& e) { - ... // 越界异常处理 - } - - // 后续代码必须使用检验合法的 index 进行容器元素索引或迭代器偏移 - // 正确校验index的范围:已确保index在容器元素的位置范围 - if (index < 0 || index >= c.size()) { - ... // 错误处理 - return -1; - } - - std::cout << c[index] << std::endl; // 符合:已检验index的范围 - - // 符合:已检验index - for (auto pos = std::cbegin(c) + index; pos < std::cend(c); ++pos) { - std::cout << *pos << std::endl; - } - return 0; -} -void Foo(size_t n) -{ - std::vector v{0, 1, 2, 3}; - - // 必须确保for_each_n的迭代范围[first, first + count)有效 - if (n > v.size()) { - ... // 错误处理 - return; - } - for_each_n(v.cbegin(), n, [](int x) { std::cout << x; }); -} -``` - -## 调用格式化输入/输出函数时,使用有效的格式字符串 - -**【描述】** -使用C风格的格式化输入/输出函数时,需要确保格式串是合法有效的,并且格式串与相应的实参类型是严格匹配的,否则会使程序产生非预期行为。 - -除C风格的格式化输入/输出函数以外,C++中类似的函数也需要确保使用有效的格式串,如C++20的std::format()函数。 - -对于自定义C风格的格式化函数,可以使用编译器支持的属性自动检查使用自定义格式化函数的正确性。 -例如:GCC支持自动检测类似printf, scanf, strftime, strfmon的自定义格式化函数,参考GCC手册的Common Function Attributes: - -```c -extern int CustomPrintf(void* obj, const char* format, ...) - __attribute__ ((format (printf, 2, 3))); -``` - -**【反例】** -如下代码示例中,格式化输入一个整数到macAddr变量中,但是macAddr为unsigned char类型,而%x对应的是int类型参数,函数执行完成后会发生写越界。 - -```c -unsigned char macAddr[6]; -... -// macStr中的数据格式为 e2:42:a4:52:1e:33 -int ret = sscanf(macStr, "%x:%x:%x:%x:%x:%x\n", - &macAddr[0], &macAddr[1], - &macAddr[2], &macAddr[3], - &macAddr[4], &macAddr[5]); -... -``` - -**【正例】** -如下代码中,使用%hhx确保格式串与相应的实参类型严格匹配。 - -```c -unsigned char macAddr[6]; -... -// macStr中的数据格式为 e2:42:a4:52:1e:33 -int ret = sscanf(macStr, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx\n", - &macAddr[0], &macAddr[1], - &macAddr[2], &macAddr[3], - &macAddr[4], &macAddr[5]); -... -``` - -注:在C++中不推荐使用sscanf, sprintf等C库函数,可以替换为:std::istringstream, std::ostringstream, std::stringstream等。 - -**【影响】** -错误的格式串可能造成内存破坏或者程序异常终止。 - -## 调用格式化输入/输出函数时,禁止format参数受外部数据控制 - -**【描述】** -调用格式化函数时,如果format参数由外部数据提供,或由外部数据拼接而来,会造成字符串格式化漏洞。 -以C标准库的格式化输出函数为例,当其format参数外部可控时,攻击者可以使用%n转换符向指定地址写入一个整数值、使用%x或%d转换符查看栈或寄存器内容、使用%s转换符造成进程崩溃等。 - -常见格式化函数有: - -- 格式化输出函数: sprintf, vsprintf, snprintf, vsnprintf等等 -- 格式化输入函数: sscanf, vsscanf, fscanf, vscanf等等 -- 格式化错误消息函数: err(), verr(), errx(), verrx(), warn(), vwarn(), warnx(), vwarnx(), error(), error_at_line() -- 格式化日志函数: syslog(), vsyslog() -- C++20提供的std::format() - -调用格式化函数时,应使用常量字符串作为格式串,禁止格式串外部可控: - -```cpp -Box v{MAX_COUNT}; -std::cout << std::format("{:#x}", v); -``` - -**【反例】** -如下代码示例中,使用Log()函数直接打印外部数据,可能出现格式化字符串漏洞。 - -```c -void Foo() -{ - std::string msg = GetMsg(); - ... - syslog(priority, msg.c_str()); // 不符合:存在格式化字符串漏洞 -} -``` - -**【正例】** -下面是推荐做法,使用%s转换符打印外部数据,避免格式化字符串漏洞。 - -```c -void Foo() -{ - std::string msg = GetMsg(); - ... - syslog(priority, "%s", msg.c_str()); // 符合:这里没有格式化字符串漏洞 -} -``` - -**【影响】** -如果格式串被外部可控,攻击者可以使进程崩溃、查看栈内容、查看内存内容或者在任意内存位置写入数据,进而以被攻击进程的权限执行任意代码。 - -## 禁止外部可控数据作为进程启动函数的参数或者作为dlopen/LoadLibrary等模块加载函数的参数 - -**【描述】** -本条款中进程启动函数包括system、popen、execl、execlp、execle、execv、execvp等。 -system()、popen()等函数会创建一个新的进程,如果外部可控数据作为这些函数的参数,会导致注入漏洞。 -使用execl()等函数执行新进程时,如果使用shell启动新进程,则同样存在命令注入风险。 -使用execlp()、execvp()、execvpe()函数依赖于系统的环境变量PATH来搜索程序路径,使用它们时应充分考虑外部环境变量的风险,或避免使用这些函数。 - -因此,总是优先考虑使用C标准函数实现需要的功能。如果确实需要使用这些函数,应使用白名单机制确保这些函数的参数不受任何外来数据的影响。 - -dlopen、LoadLibrary函数会加载外部模块,如果外部可控数据作为这些函数的参数,有可能会加载攻击者事先预制的模块。如果要使用这些函数,可以采用如下措施之一: - -- 使用白名单机制,确保这些函数的参数不受任何外来数据的影响。 -- 使用数字签名机制保护要加载的模块,充分保证其完整性。 -- 在设备本地加载的动态库通过权限与访问控制措施保证了本身安全性后,通过特定目录自动被程序加载。 -- 在设备本地的配置文件通过权限与访问控制措施保证了本身安全性后,自动加载配置文件中指定的动态库。 - -**【反例】** -如下代码从外部获取数据后直接作为LoadLibrary函数的参数,有可能导致程序被植入木马。 - -```c -char* msg = GetMsgFromRemote(); -LoadLibrary(msg); -``` - -如下代码示例中,使用 system() 函数执行 cmd 命令串来自外部,攻击者可以执行任意命令: - -```c -std::string cmd = GetCmdFromRemote(); -system(cmd.c_str()); -``` - -如下代码示例中,使用 system() 函数执行 cmd 命令串的一部分来自外部,攻击者可能输入 `some dir;reboot`字符串,创造成系统重启: - -```cpp -std::string name = GetDirNameFromRemote(); -std::string cmd{"ls " + name}; -system(cmd.c_str()); -``` - -使用exec系列函数来避免命令注入时,注意exec系列函数中的path、file参数禁止使用命令解析器(如/bin/sh)。 - -```c -int execl(const char* path, const char* arg, ...); -int execlp(const char* file, const char* arg, ...); -int execle(const char* path, const char* arg, ...); -int execv(const char* path, char* const argv[]); -int execvp(const char* file, char* const argv[]); -int execvpe(const char* file, char* const argv[], char* const envp[]); -``` - -例如,禁止如下使用方式: - -```c -std::string cmd = GetDirNameFromRemote(); -execl("/bin/sh", "sh", "-c", cmd.c_str(), nullptr); -``` - -可以使用库函数,或者可以通过编写少量的代码来避免使用system函数调用命令,如`mkdir()`函数可以实现`mkdir`命令的功能。 -如下代码中,应该避免使用`cat`命令实现文件内容复制的功能。 - -```c -int WriteDataToFile(const char* dstFile, const char* srcFile) -{ - ... // 入参的合法性校验 - std::ostringstream oss; - oss << "cat " << srcFile << " > " << dstFile; - - std::string cmd{oss.str()}; - system(cmd.c_str()); - ... -} -``` - -**【正例】** - -如下代码中,通过少量的代码来实现。如下代码实现了文件复制的功能,避免了对`cat`或`cp`命令的调用。需要注意的是,为简化描述,下面代码未考虑信号中断的影响。 - -```cpp -bool WriteDataToFile(const std::string& dstFilePath, const std::string& srcFilePath) -{ - const int bufferSize = 1024; - std::vector buffer (bufferSize + 1, 0); - - std::ifstream srcFile(srcFilePath, std::ios::binary); - std::ofstream dstFile(dstFilePath, std::ios::binary); - - if (!dstFile || !dstFile) { - ... // 错误处理 - return false; - } - - while (true) { - // 从srcFile读取内容分块 - srcFile.read(buffer.data(), bufferSize); - std::streamsize size = srcFile ? bufferSize : srcFile.gcount(); - - // 写入分块内容到dstFile - if (size > 0 && !dstFile.write(buffer.data(), size)) { - ... // 错误处理 - break; - } - - if (!srcFile) { - ... // 检查错误:当不是eof()时记录错误 - break; - } - } - // srcFile 和 dstFile 在退出作用域时会自动被关闭 - return true; -} -``` - -可以通过库函数简单实现的功能(如上例),需要避免调用命令处理器来执行外部命令。 -如果确实需要调用单个命令,应使用exec*函数来实现参数化调用,并对调用的命令实施白名单管理。同时应避免使用execlp、execvp、execvpe函数,因为这几个函数依赖外部的PATH环境变量。 -此时,外部输入的fileName仅作为some_tool命令的参数,没有命令注入的风险。 - -```cpp -pid_t pid; -char* const envp[] = {nullptr}; -... -std::string fileName = GetDirNameFromRemote(); -... -pid = fork(); -if (pid < 0) { - ... -} else if (pid == 0) { - // 使用some_tool对指定文件进行加工 - execle("/bin/some_tool", "some_tool", fileName.c_str(), nullptr, envp); - _Exit(-1); -} -... -int status; -waitpid(pid, &status, 0); -std::ofstream ofs(fileName, std::ios::in); -... -``` - -在必须使用system等命令解析器执行命令时,应对输入的命令字符串基于合理的白名单检查,避免命令注入。 - -```cpp -std::string cmd = GetCmdFromRemote(); - -// 使用白名单检查命令是否合法,仅允许"some_tool_a", "some_tool_b"命令,外部无法随意控制 -if (!IsValidCmd(cmd.c_str())) { - ... // 错误处理 -} -system(cmd.c_str()); -... -``` - -**【影响】** - -- 如果传递给system()、popen()或其他命令处理函数的命令字符串是外部可控的,则攻击者可能会以被攻击进程的权限执行系统上存在的任意命令。 -- 如果动态库文件是外部可控的,则攻击者可替换该库文件,在某些情况下可以造成任意代码执行漏洞。 - -# 其他C语言编程规范 - -## 禁止通过对数组类型的函数参数变量进行sizeof来获取数组大小 - -**【描述】** - -使用sizeof操作符求其操作数的大小(以字节为单位),其操作数可以是一个表达式或者加上括号的类型名称,例如:`sizeof(int)`或`sizeof(int *)`。 -参考C11标准6.5.3.4中的脚注103: - -> 当将sizeof应用于具有数组或函数类型的参数时,sizeof操作符将得出调整后的(指针)类型的大小。 - -函数参数列表中声明为数组的参数会被调整为相应类型的指针。例如:`void Func(int inArray[LEN])`函数参数列表中的inArray虽然被声明为数组,但是实际上会被调整为指向int类型的指针,即调整为`void Func(int *inArray)`。 -在这个函数内使用`sizeof(inArray)`等同于`sizeof(int *)`,得到的结果通常与预期不相符。例如:在IA-32架构上,`sizeof(inArray)` 的值是 4,并不是inArray数组的大小。 - -**【反例】** -如下代码示例中,函数ArrayInit的功能是初始化数组元素。该函数有一个声明为`int inArray[]`的参数,被调用时传递了一个长度为256的int类型数组data。 -ArrayInit函数实现中使用`sizeof(inArray) / sizeof(inArray[0])`方法来计算入参数组中元素的数量。 -但由于inArray是函数参数,所以具有指针类型,结果,`sizeof(inArray)`等同于`sizeof(int *)`。 -无论传递给ArrayInit函数的数组实际长度如何,表达式的`sizeof(inArray) / sizeof(inArray[0])`计算结果均为1,与预期不符。 - -```c -#define DATA_LEN 256 -void ArrayInit(int inArray[]) -{ - // 不符合:这里使用sizeof(inArray)计算数组大小 - for (size_t i = 0; i < sizeof(inArray) / sizeof(inArray[0]); i++) { - ... - } -} - -void FunctionData(void) -{ - int data[DATA_LEN]; - - ... - ArrayInit(data); // 调用ArrayInit函数初始化数组data数据 - ... -} -``` - -**【正例】** -如下代码示例中,修改函数定义,添加数组长度参数,并在调用处正确传入数组长度。 - -```c -#define DATA_LEN 256 -// 函数说明:入参len是入参inArray数组的长度 -void ArrayInit(int inArray[], size_t len) -{ - for (size_t i = 0; i < len; i++) { - ... - } -} - -void FunctionData(void) -{ - int data[DATA_LEN]; - - ArrayInit(data, sizeof(data) / sizeof(data[0])); - ... -} -``` - -**【反例】** -如下代码示例中,`sizeof(inArray)`不等于`ARRAY_MAX_LEN * sizeof(int)`,因为将sizeof操作符应用于声明为具有数组类型的参数时,即使参数声明指定了长度,也会被调整为指针,`sizeof(inArray)`等同于 `sizeof(int *)`: - -```c -#define ARRAY_MAX_LEN 256 - -void ArrayInit(int inArray[ARRAY_MAX_LEN]) -{ - // 不符合:sizeof(inArray),得到的长度是指针的大小,不是数组的长度,和预期不符。 - for (size_t i = 0; i < sizeof(inArray) / sizeof(inArray[0]); i++) { - ... - } -} - -int main(void) -{ - int masterArray[ARRAY_MAX_LEN]; - - ... - ArrayInit(masterArray); - - return 0; -} -``` - -**【正例】** -如下代码示例中,使用入参len表示指定数组的长度: - -```c -#define ARRAY_MAX_LEN 256 - -// 函数说明:入参len是入参数组的长度 -void ArrayInit(int inArray[], size_t len) -{ - for (size_t i = 0; i < len; i++) { - ... - } -} - -int main(void) -{ - int masterArray[ARRAY_MAX_LEN]; - - ArrayInit(masterArray, ARRAY_MAX_LEN); - ... - - return 0; -} -``` - -## 禁止通过对指针变量进行sizeof操作来获取数组大小 - -**描述】** -将指针当做数组进行sizeof操作时,会导致实际的执行结果与预期不符。例如:变量定义 `char *p = array`,其中array的定义为`char array[LEN]`,表达式`sizeof(p)`得到的结果与 `sizeof(char *)`相同,并非array的长度。 - -**【反例】** -如下代码示例中,buffer和path分别是指针和数组,程序员想对这2个内存进行清0操作,但由于程序员的疏忽,将内存大小误写成了`sizeof(buffer)`,与预期不符。 - -```c -char path[MAX_PATH]; -char *buffer = (char *)malloc(SIZE); -... - -... -memset(path, 0, sizeof(path)); - -// sizeof与预期不符,其结果为指针本身的大小而不是缓冲区大小 -memset(buffer, 0, sizeof(buffer)); -``` - -**【正例】** -如下代码示例中,将`sizeof(buffer)`修改为申请的缓冲区大小: - -```c -char path[MAX_PATH]; -char *buffer = (char *)malloc(SIZE); -... - -... -memset(path, 0, sizeof(path)); -memset(buffer, 0, SIZE); // 使用申请的缓冲区大小 -``` - -## 禁止直接使用外部数据拼接SQL命令 - -**【描述】** -SQL注入是指SQL查询被恶意更改成一个与程序预期完全不同的查询。执行更改后的查询可能会导致信息泄露或者数据被篡改。而SQL注入的根源就是使用外部数据来拼接SQL语句。C/C++语言中常见的使用外部数据拼接SQL语句的场景有(包括但不局限于): - -- 连接MySQL时调用mysql_query(),Execute()时的入参 -- 连接SQL Server时调用db-library驱动的dbsqlexec()的入参 -- 调用ODBC驱动的SQLprepare()连接数据库时的SQL语句的参数 -- C++程序调用OTL类库中的otl_stream(),otl_column_desc()时的入参 -- C++程序连接Oracle数据库时调用ExecuteWithResSQL()的入参 - -防止SQL注入的方法主要有以下几种: - -- 参数化查询(通常也叫作预处理语句):参数化查询是一种简单有效的防止SQL注入的查询方式,应该被优先考虑使用。支持的数据库有MySQL,Oracle(OCI)。 -- 参数化查询(通过ODBC驱动):支持ODBC驱动参数化查询的数据库有Oracle、SQLServer、PostgreSQL和GaussDB。 -- 对外部数据进行校验(对于每个引入的外部数据推荐“白名单”校验)。 -- 对外部数据中的SQL特殊字符进行转义。 - -**【反例】** -下列代码拼接用户输入,没有进行输入检查,存在SQL注入风险: - -```c -char name[NAME_MAX]; -char sqlStatements[SQL_CMD_MAX]; -int ret = GetUserInput(name, NAME_MAX); -... -ret = sprintf(sqlStatements, - "SELECT childinfo FROM children WHERE name= ‘%s’", - name); -... -ret = mysql_query(&myConnection, sqlStatements); -... -``` - -**【正例】** -使用预处理语句进行参数化查询可以防御SQL注入攻击: - -```c -char name[NAME_MAX]; -... -MYSQL_STMT *stmt = mysql_stmt_init(myConnection); -char *query = "SELECT childinfo FROM children WHERE name= ?"; -if (mysql_stmt_prepare(stmt, query, strlen(query))) { - ... -} -int ret = GetUserInput(name, NAME_MAX); -... -MYSQL_BIND params[1]; -(void)memset(params, 0, sizeof(params)); -... -params[0].bufferType = MYSQL_TYPE_STRING; -params[0].buffer = (char *)name; -params[0].bufferLength = strlen(name); -params[0].isNull = 0; - -bool isCompleted = mysql_stmt_bind_param(stmt, params); -... -ret = mysql_stmt_execute(stmt); -... -``` - -**【影响】** - -如果拼接SQL语句的字符串是外部可控的,则攻击者可以通过注入特定的字符串欺骗程序执行恶意的SQL命令,造成信息泄露、权限绕过、数据被篡改等问题。 - -## 内存中的敏感信息使用完毕后立即清0 - -**【描述】** -内存中的口令、密钥等敏感信息使用完毕后立即清0,避免被攻击者获取或者无意间泄露给低权限用户。这里所说的内存包括但不限于: - -- 动态分配的内存 -- 静态分配的内存 -- 自动分配(堆栈)内存 -- 内存缓存 -- 磁盘缓存 - -**【反例】** -通常内存在释放前不需要清除内存数据,因为这样在运行时会增加额外开销,所以在这段内存被释放之后,之前的数据还是会保留在其中。如果这段内存中的数据包含敏感信息,则可能会意外泄露敏感信息。为了防止敏感信息泄露,必须先清除内存中的敏感信息,然后再释放。 -在如下代码示例中,存储在所引用的动态内存中的敏感信息secret被复制到新动态分配的缓冲区newSecret,最终通过free()释放。因为释放前未清除这块内存数据,这块内存可能被重新分配到程序的另一部分,之前存储在newSecret中的敏感信息可能会无意中被泄露。 - -```c -char *secret = NULL; -/* - * 假设 secret 指向敏感信息,敏感信息的内容是长度小于SIZE_MAX个字符, - * 并且以null终止的字节字符串 - */ - -size_t size = strlen(secret); -char *newSecret = NULL; -newSecret = (char *)malloc(size + 1); -if (newSecret == NULL) { - ... // 错误处理 -} else { - errno_t ret = strcpy(newSecret, secret); - ... // 处理 ret - - ... // 处理 newSecret... - - free(newSecret); - newSecret = NULL; -} -... -``` - -**【正例】** -如下代码示例中,为了防止信息泄露,应先清除包含敏感信息的动态内存(用’\0’字符填充空间),然后再释放它。 - -```c -char *secret = NULL; -/* - * 假设 secret 指向敏感信息,敏感信息的内容是长度小于SIZE_MAX个字符, - * 并且以null终止的字节字符串 - */ -size_t size = strlen(secret); -char *newSecret = NULL; -newSecret = (char *)malloc(size + 1); -if (newSecret == NULL) { - ... // 错误处理 -} else { - errno_t ret = strcpy(newSecret, secret); - ... // 处理 ret - - ... // 处理 newSecret... - - (void)memset(newSecret, 0, size + 1); - free(newSecret); - newSecret = NULL; -} -... -``` - -**【正例】** -下面是另外一个涉及敏感信息清理的场景,在代码获取到密码后,将密码保存到password中,进行密码验证,使用完毕后,通过`memset()`函数对password清0。 - -```c -int Foo(void) -{ - char password[MAX_PWD_LEN]; - if (!GetPassword(password, sizeof(password))) { - ... - } - if (!VerifyPassword(password)) { - ... - } - ... - (void)memset(password, 0, sizeof(password)); - ... -} -``` - -要特别**注意**:对敏感信息清理的时候要同时防止因编译器优化而使清理代码无效。 - -例如,下列代码使用了可能被编译器优化掉的语句。 - -```c -int SecureLogin(void) -{ - char pwd[PWD_SIZE]; - if (RetrievePassword(pwd, sizeof(pwd))) { - ... // 口令检查及其他处理 - } - memset(pwd, 0, sizeof(pwd)); // 编译器优化有可能会使该语句失效 - ... -} -``` - -某些编译器在优化时候不会执行它认为不会改变程序执行结果的代码,因此memset()操作会被优化掉。 - -如果编译器支持#pragma指令,那么可以使用该指令指示编译器不作优化。 - -```c -void SecureLogin(void) -{ - char pwd[PWD_SIZE]; - if (RetrievePassword(pwd, sizeof(pwd))) { - ... // 口令检查及其他处理 - } - #pragma optimize("", off) - // 清除内存 - ... - #pragma optimize("", on) - ... -} -``` - -**【影响】** - -未及时清理敏感信息,可能导致信息泄露。 - -## 创建文件时必须显式指定合适的文件访问权限 - -**【描述】** -创建文件时,如果不显式指定合适访问权限,可能会让未经授权的用户访问该文件,造成信息泄露,文件数据被篡改,文件中被注入恶意代码等风险。 - -虽然文件的访问权限也依赖于文件系统,但是当前许多文件创建函数(例如POSIX open函数)都具有设置(或影响)文件访问权限的功能,所以当使用这些函数创建文件时,必须显式指定合适的文件访问权限,以防止意外访问。 - -**【反例】** -使用POSIX open()函数创建文件但未显示指定该文件的访问权限,可能会导致文件创建时具有过高的访问权限。这可能会导致漏洞(例如CVE-2006-1174)。 - -```c -void Foo(void) -{ - int fd = -1; - char *filename = NULL; - - ... // 初始化 filename - - fd = open(filename, O_CREAT | O_WRONLY); // 没有显式指定访问权限 - if (fd == -1) { - ... // 错误处理 - } - ... -} -``` - -**【正例】** -应该在open的第三个参数中显式指定新创建文件的访问权限。可以根据文件实际的应用情况设置何种访问权限。 - -```c -void Foo(void) -{ - int fd = -1; - char *filename = NULL; - - ... // 初始化 filename 和指定其访问权限 - - // 此处根据文件实际需要,显式指定其访问权限 - int fd = open(filename, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); - if (fd == -1) { - ... // 错误处理 - } - ... -} -``` - -**【影响】** - -创建访问权限弱的文件,可能会导致对这些文件的非法访问。 - -## 使用文件路径前必须进行规范化并校验 - -**【描述】** -当文件路径来自外部数据时,必须对其做合法性校验,如果不校验,可能造成系统文件的被任意访问。但是禁止直接对其进行校验,正确做法是在校验之前必须对其进行路径规范化处理。这是因为同一个文件可以通过多种形式的路径来描述和引用,例如既可以是绝对路径,也可以是相对路径;而且路径名、目录名和文件名可能包含使校验变得困难和不准确的字符(如:“.”、“..”)。此外,文件还可以是符号链接,这进一步模糊了文件的实际位置或标识,增加了校验的难度和校验准确性。所以必须先将文件路径规范化,从而更容易校验其路径、目录或文件名,增加校验准确性。 - -因为规范化机制在不同的操作系统和文件系统之间可能有所不同,所以最好使用符合当前系统特性的规范化机制。 - -一个简单的案例说明如下: - -```c -当文件路径来自外部数据时,需要先将文件路径规范化,如果没有作规范化处理,攻击者就有机会通过恶意构造文件路径进行文件的越权访问。 -例如,攻击者可以构造“../../../etc/passwd”的方式进行任意文件访问。 -``` - -**【反例】** -在此错误的示例中,inputFilename包含一个源于受污染源的文件名,并且该文件名已打开以进行写入。在使用此文件名操作之前,应该对其进行验证,以确保它引用的是预期的有效文件。 -不幸的是,inputFilename引用的文件名可能包含特殊字符,例如目录字符,这使验证变得困难,甚至不可能。而且,inputFilename中可能包含可以指向任意文件路径的符号链接,即使该文件名通过了验证,也会导致该文件名是无效的。 -这种场景下,对文件名的直接验证即使被执行也是得不到预期的结果,对fopen()的调用可能会导致访问一个意外的文件。 - -```c -... - -if (!verify_file(inputFilename) { // 没有对inputFilename做规范化,直接做校验 - ... // 错误处理 -} - -if (fopen(inputFilename, "w") == NULL) { - ... // 错误处理 -} - -... -``` - -**【正例】** -规范化文件名是具有一定难度的,因为这需要了解底层文件系统。 -POSIX realpath()函数可以帮助将路径名转换为规范形式。参考信息技术标准-POSIX®,基本规范第7期[IEEE std 1003.1:2013]: - -- 该realpath()函数应从所指向的路径名派生一个filename的绝对路径名,两者指向同一文件,绝对路径其文件名不涉及“ .”,“ ..”或符号链接。 - 在规范化路径之后,还必须执行进一步的验证,例如确保两个连续的斜杠或特殊文件不会出现在文件名中。有关如何执行路径名解析的更多详细信息,请参见[IEEE Std 1003.1: 2013]第4.12节“路径名解析”。 - 使用realpath()函数有许多需要注意的地方。 - 在了解了以上原理之后,对上面的错误代码示例,我们采用如下解决方案: - -```c -char *realpathRes = NULL; - -... - -// 在校验之前,先对inputFilename做规范化处理 -realpathRes = realpath(inputFilename, NULL); -if (realpathRes == NULL) { - ... // 规范化的错误处理 -} - -// 规范化以后对路径进行校验 -if (!verify_file(realpathRes) { - ... // 校验的错误处理 -} - -// 使用 -if (fopen(realpathRes, "w") == NULL) { - ... // 实际操作的错误处理 -} - -... - -free(realpathRes); -realpathRes = NULL; -... -``` - -**【正例】** -根据我们的实际场景,我们还可以采用的第二套解决方案,说明如下: -如果`PATH_MAX`被定义为 limits.h 中的一个常量,那么使用非空的`resolved_path`调用realpath()也是安全的。 -在本例中realpath()函数期望`resolved_path`引用一个字符数组,该字符数组足够大,可以容纳规范化的路径。 -如果定义了PATH_MAX,则分配一个大小为`PATH_MAX`的缓冲区来保存realpath()的结果。正确代码示例如下: - -```c -char *realpathRes = NULL; -char *canonicalFilename = NULL; -size_t pathSize = 0; - -... - -pathSize = (size_t)PATH_MAX; - -if (VerifyPathSize(pathSize) == true) { - canonicalFilename = (char *)malloc(pathSize); - - if (canonicalFilename == NULL) { - ... // 错误处理 - } - - realpathRes = realpath(inputFilename, canonicalFilename); -} - -if (realpathRes == NULL) { - ... // 错误处理 -} - -if (VerifyFile(realpathRes) == false) { - ... // 错误处理 -} - -if (fopen(realpathRes, "w") == NULL ) { - ... // 错误处理 -} - -... - -free(canonicalFilename); -canonicalFilename = NULL; -... -``` - -**【反例】** -下面的代码场景是从外部获取到文件名称,拼接成文件路径后,直接对文件内容进行读取,导致攻击者可以读取到任意文件的内容: - -```c -char *filename = GetMsgFromRemote(); -... -int ret = sprintf(untrustPath, "/tmp/%s", filename); -... -char *text = ReadFileContent(untrustPath); -``` - -**【正例】** -正确的做法是,对路径进行规范化后,再判断路径是否是本程序所认为的合法的路径: - -```c -char *filename = GetMsgFromRemote(); -... -sprintf(untrustPath, "/tmp/%s", filename); -char path[PATH_MAX]; -if (realpath(untrustPath, path) == NULL) { - ... // 处理错误 -} -if (!IsValidPath(path)) { // 检查文件的位置是否正确 - ... // 处理错误 -} -char *text = ReadFileContent(path); -``` - -**【例外】** - -运行于控制台的命令行程序,通过控制台手工输入文件路径,可以作为本条款例外。 - -```c -int main(int argc, char **argv) -{ - int fd = -1; - - if (argc == 2) { - fd = open(argv[1], O_RDONLY); - ... - } - - ... - return 0; -} -``` - -**【影响】** - -未对不可信的文件路径进行规范化和校验,可能造成对任意文件的访问。 - -## 不要在共享目录中创建临时文件 - -**【描述】** -共享目录是指其它非特权用户可以访问的目录。程序的临时文件应当是程序自身独享的,任何将自身临时文件置于共享目录的做法,将导致其他共享用户获得该程序的额外信息,产生信息泄露。因此,不要在任何共享目录创建仅由程序自身使用的临时文件。 - -临时文件通常用于辅助保存不能驻留在内存中的数据或存储临时的数据,也可用作进程间通信的一种手段(通过文件系统传输数据)。例如,一个进程在共享目录中创建一个临时文件,该文件名可能使用了众所周知的名称或者一个临时的名称,然后就可以通过该文件在进程间共享信息。这种通过在共享目录中创建临时文件的方法实现进程间共享的做法很危险,因为共享目录中的这些文件很容易被攻击者劫持或操纵。这里有几种缓解策略: - -1. 使用其他低级IPC(进程间通信)机制,例如套接字或共享内存。 -2. 使用更高级别的IPC机制,例如远程过程调用。 -3. 使用仅能由程序本身访问的安全目录(多线程/进程下注意防止条件竞争)。 - -同时,下面列出了几项临时文件创建使用的方法,产品根据具体场景执行以下一项或者几项,同时产品也可以自定义合适的方法。 - -1. 文件必须具有合适的权限,只有符合权限的用户才能访问 -2. 创建的文件名是唯一的、或不可预测的 -3. 仅当文件不存在时才创建打开(原子创建打开) -4. 使用独占访问打开,避免竞争条件 -5. 在程序退出之前移除 - -同时也需要注意到,当某个目录被开放读/写权限给多个用户或者一组用户时,该共享目录潜在的安全风险远远大于访问该目录中临时文件这个功能的本身。 - -在共享目录中创建临时文件很容易受到威胁。例如,用于本地挂载的文件系统的代码在与远程挂载的文件系统一起共享使用时可能会受到攻击。安全的解决方案是不要在共享目录中创建临时文件。 - -**【反例】** -如下代码示例,程序在系统的共享目录/tmp下创建临时文件来保存临时数据,且文件名是硬编码的。 -由于文件名是硬编码的,因此是可预测的,攻击者只需用符号链接替换文件,然后链接所引用的目标文件就会被打开并写入新内容。 - -```c -void ProcData(const char *filename) -{ - FILE *fp = fopen(filename, "wb+"); - if (fp == NULL) { - ... // 错误处理 - } - - ... // 写文件 - - fclose(fp); -} - -int main(void) -{ - // 不符合:1.在系统共享目录中创建临时文件;2.临时文件名硬编码 - char *pFile = "/tmp/data"; - ... - - ProcData(pFile); - - ... - return 0; -} -``` - -**【正确案例】** - -```c -不应在该目录下创建仅由程序自身使用的临时文件。 -``` - -**【影响】** - -不安全的创建临时文件,可能导致文件非法访问,并造成本地系统上的权限提升。 - -## 不要在信号处理函数中访问共享对象 - -**【描述】** -如果在信号处理程序中访问和修改共享对象,可能会造成竞争条件,使数据处于不确定的状态。 -这条规则有两个不适用的场景(参考C11标准5.1.2.3第5段): - -- 读写不需要加锁的原子对象; -- 读写volatile sig_atomic_t类型的对象,因为具有volatile sig_atomic_t类型的对象即使在出现异步中断的时候也可以作为一个原子实体访问,是异步安全的。 - -**【反例】** -在这个信号处理过程中,程序打算将`g_msg`作为共享对象,当产生SIGINT信号时更新共享对象的内容,但是该`g_msg`变量类型不是`volatile sig_atomic_t`,所以不是异步安全的。 - -```c -#define MAX_MSG_SIZE 32 -static char g_msgBuf[MAX_MSG_SIZE] = {0}; -static char *g_msg = g_msgBuf; - -void SignalHandler(int signum) -{ - // 下面代码操作g_msg不合规,因为不是异步安全的 - (void)memset(g_msg,0, MAX_MSG_SIZE); - errno_t ret = strcpy(g_msg, "signal SIGINT received."); - ... // 处理 ret -} - -int main(void) -{ - errno_t ret = strcpy(g_msg, "No msg yet."); // 初始化消息内容 - ... // 处理 ret - - signal(SIGINT, SignalHandler); // 设置SIGINT信号对应的处理函数 - - ... // 程序主循环代码 - - return 0; -} -``` - -**【正例】** -如下代码示例中,在信号处理函数中仅将`volatile sig_atomic_t`类型作为共享对象使用。 - -```c -#define MAX_MSG_SIZE 32 -volatile sig_atomic_t g_sigFlag = 0; - -void SignalHandler(int signum) -{ - g_sigFlag = 1; // 符合 -} - -int main(void) -{ - signal(SIGINT, SignalHandler); - char msgBuf[MAX_MSG_SIZE]; - errno_t ret = strcpy(msgBuf, "No msg yet."); // 初始化消息内容 - ... // 处理 ret - - ... // 程序主循环代码 - - if (g_sigFlag == 1) { // 在退出主循环之后,根据g_sigFlag状态再刷新消息内容 - ret = strcpy(msgBuf, "signal SIGINT received."); - ... // 处理 ret - } - - return 0; -} -``` - -**【影响】** - -在信号处理程序中访问或修改共享对象,可能造成以不一致的状态访问数据。 - -## 禁用rand函数产生用于安全用途的伪随机数 - -**【描述】** -C语言标准库rand()函数生成的是伪随机数,所以不能保证其产生的随机数序列质量。根据C11标准,rand()函数产生的随机数范围是`[0, RAND_MAX(0x7FFF)]`,因为范围相对较短,所以这些数字可以被预测。 -所以禁止使用rand()函数产生的随机数用于安全用途,必须使用安全的随机数产生方式。 - -典型的安全用途场景包括(但不限于)以下几种: - -- 会话标识SessionID的生成; -- 挑战算法中的随机数生成; -- 验证码的随机数生成; -- 用于密码算法用途(例如用于生成IV、盐值、密钥等)的随机数生成。 - -**【反例】** -程序员期望生成一个唯一的不可被猜测的HTTP会话ID,但该ID是通过调用rand()函数产生的数字随机数,它的ID是可猜测的,并且随机性有限。 - -**【影响】** - -使用rand()函数可能造成可预测的随机数。 - -## 禁止在发布版本中输出对象或函数的地址 - -**【描述】** -禁止在发布版本中输出对象或函数的地址,如:将变量或函数的地址输出到客户端、日志、串口中。 - -当攻击者实施高级攻击时,通常需要先获取目标程序中的内存地址(如变量地址、函数地址等),再通过修改指定内存的内容,达到攻击目的。 -如果程序中主动输出对象或函数的地址,则为攻击者提供了便利条件,可以根据这些地址以及偏移量计算出其他对象或函数的地址,并实施攻击。 -另外,由于内存地址泄露,也会造成地址空间随机化的保护功能失效。 - -**【反例】** -如下代码中,使用%p格式将指针指向的地址记录到日志中。 - -```c -int Encode(unsigned char *in, size_t inSize, unsigned char *out, size_t maxSize) -{ - ... - Log("in=%p, in size=%zu, out=%p, max size=%zu\n", in, inSize, out, maxSize); - ... -} -``` - -备注:这里仅用%p打印指针作为示例,代码中将指针转换为整数再打印也存在同样的风险。 - -**【正例】** -如下代码中,删除打印地址的代码。 - -```c -int Encode(unsigned char *in, size_t inSize, unsigned char *out, size_t maxSize) -{ - ... - Log("in size=%zu, max size=%zu\n", inSize, maxSize); - ... -} -``` - -**【例外】** -当程序崩溃退出时,在记录崩溃的异常信息中可以输出内存地址等信息。 - -**【影响】** - -内存地址信息泄露,为攻击者实施攻击提供有利信息,可能造成地址空间随机化防护失效。 - -## 禁止代码中包含公网地址 - -**【描述】** - -代码或脚本中包含用户不可见,不可知的公网地址,可能会引起客户质疑。 - -对产品发布的软件(包含软件包/补丁包)中包含的公网地址(包括公网IP地址、公网URL地址/域名、邮箱地址)要求如下: -1、禁止包含用户界面不可见、或产品资料未描述的未公开的公网地址。 -2、已公开的公网地址禁止写在代码或者脚本中,可以存储在配置文件或数据库中。 - -对于开源/第三方软件自带的公网地址必须至少满足上述第1条公开性要求。 - -**【例外】** - -- 对于标准协议中必须指定公网地址的场景可例外,如soap协议中函数的命名空间必须指定的一个组装的公网URL、http页面中包含w3.org网址等。 - -# 内核安全编程 - -## 内核mmap接口实现中,确保对映射起始地址和大小进行合法性校验 - -**【描述】** - -**说明:**内核 mmap接口中,经常使用remap_pfn_range()函数将设备物理内存映射到用户进程空间。如果映射起始地址等参数由用户态控制并缺少合法性校验,将导致用户态可通过映射读写任意内核地址。如果攻击者精心构造传入参数,甚至可在内核中执行任意代码。 - -**【错误代码示例】** - -如下代码在使用remap_pfn_range()进行内存映射时,未对用户可控的映射起始地址和空间大小进行合法性校验,可导致内核崩溃或任意代码执行。 - -```c -static int incorrect_mmap(struct file *file, struct vm_area_struct *vma) -{ - unsigned long size; - size = vma->vm_end - vma->vm_start; - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - //错误:未对映射起始地址、空间大小做合法性校验 - if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, size, vma->vm_page_prot)) { - err_log("%s, remap_pfn_range fail", __func__); - return EFAULT; - } else { - vma->vm_flags &= ~VM_IO; - } - - return EOK; -} -``` - -**【正确代码示例】** - -增加对映射起始地址等参数的合法性校验。 - -```c -static int correct_mmap(struct file *file, struct vm_area_struct *vma) -{ - unsigned long size; - size = vma->vm_end - vma->vm_start; - //修改:添加校验函数,验证映射起始地址、空间大小是否合法 - if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size)) { - return EINVAL; - } - - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, size, vma->vm_page_prot)) { - err_log( "%s, remap_pfn_range fail ", __func__); - return EFAULT; - } else { - vma->vm_flags &= ~VM_IO; - } - - return EOK; -} -``` - -## 内核程序中必须使用内核专用函数读写用户态缓冲区 - -**【描述】** - -用户态与内核态之间进行数据交换时,如果在内核中不加任何校验(如校验地址范围、空指针)而直接引用用户态传入指针,当用户态传入非法指针时,可导致内核崩溃、任意地址读写等问题。因此,应当禁止使用memcpy()、sprintf()等危险函数,而是使用内核提供的专用函数:copy_from_user()、copy_to_user()、put_user()和get_user()来读写用户态缓冲区,这些函数内部添加了入参校验功能。 - -所有禁用函数列表为:memcpy()、bcopy()、memmove()、strcpy()、strncpy()、strcat()、strncat()、sprintf()、vsprintf()、snprintf()、vsnprintf()、sscanf()、vsscanf()。 - -**【错误代码示例】** - -内核态直接使用用户态传入的buf指针作为snprintf()的参数,当buf为NULL时,可导致内核崩溃。 - -```c -ssize_t incorrect_show(struct file *file, char__user *buf, size_t size, loff_t *data) -{ - // 错误:直接引用用户态传入指针,如果buf为NULL,则空指针异常导致内核崩溃 - return snprintf(buf, size, "%ld\n", debug_level); -} -``` - -**【正确代码示例】** - -使用copy_to_user()函数代替snprintf()。 - -```c -ssize_t correct_show(struct file *file, char __user *buf, size_t size, loff_t *data) -{ - int ret = 0; - char level_str[MAX_STR_LEN] = {0}; - snprintf(level_str, MAX_STR_LEN, "%ld \n", debug_level); - if(strlen(level_str) >= size) { - return EFAULT; - } - - // 修改:使用专用函数copy_to_user()将数据写入到用户态buf,并注意防止缓冲区溢出 - ret = copy_to_user(buf, level_str, strlen(level_str)+1); - return ret; -} -``` - -**【错误代码示例】** - -内核态直接使用用户态传入的指针user_buf作为数据源进行memcpy()操作,当user_buf为NULL时,可导致内核崩溃。 - -```c -size_t incorrect_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) -{ - ... - char buf [128] = {0}; - int buf_size = 0; - buf_size = min(count, (sizeof(buf)-1)); - // 错误:直接引用用户态传入指针,如果user_buf为NULL,则可导致内核崩溃 - (void)memcpy(buf, user_buf, buf_size); - ... -} -``` - -**【正确代码示例】** - -使用copy_from_user()函数代替memcpy()。 - -```c -ssize_t correct_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) -{ - ... - char buf[128] = {0}; - int buf_size = 0; - - buf_size = min(count, (sizeof(buf)-1)); - // 修改:使用专用函数copy_from_user()将数据写入到内核态buf,并注意防止缓冲区溢出 - if (copy_from_user(buf, user_buf, buf_size)) { - return EFAULT; - } - - ... -} -``` - -## 必须对copy_from_user()拷贝长度进行校验,防止缓冲区溢出 - -**说明:**内核态从用户态拷贝数据时通常使用copy_from_user()函数,如果未对拷贝长度做校验或者校验不当,会造成内核缓冲区溢出,导致内核panic或提权。 - -**【错误代码示例】** - -未校验拷贝长度。 - -```c -static long gser_ioctl(struct file *fp, unsigned cmd, unsigned long arg) -{ - char smd_write_buf[GSERIAL_BUF_LEN]; - switch (cmd) - { - case GSERIAL_SMD_WRITE: - if (copy_from_user(&smd_write_arg, argp, sizeof(smd_write_arg))) {...} - // 错误:拷贝长度参数smd_write_arg.size由用户输入,未校验 - copy_from_user(smd_write_buf, smd_write_arg.buf, smd_write_arg.size); - ... - } -} -``` - -**【正确代码示例】** - -添加长度校验。 - -```c -static long gser_ioctl(struct file *fp, unsigned cmd, unsigned long arg) -{ - char smd_write_buf[GSERIAL_BUF_LEN]; - switch (cmd) - { - case GSERIAL_SMD_WRITE: - if (copy_from_user(&smd_write_arg, argp, sizeof(smd_write_arg))){...} - // 修改:添加校验 - if (smd_write_arg.size >= GSERIAL_BUF_LEN) {......} - copy_from_user(smd_write_buf, smd_write_arg.buf, smd_write_arg.size); - ... - } -} -``` - -## 必须对copy_to_user()拷贝的数据进行初始化,防止信息泄漏 - -**【描述】** - -**说明:**内核态使用copy_to_user()向用户态拷贝数据时,当数据未完全初始化(如结构体成员未赋值、字节对齐引起的内存空洞等),会导致栈上指针等敏感信息泄漏。攻击者可利用绕过kaslr等安全机制。 - -**【错误代码示例】** - -未完全初始化数据结构成员。 - -```c -static long rmnet_ctrl_ioctl(struct file *fp, unsigned cmd, unsigned long arg) -{ - struct ep_info info; - switch (cmd) { - case FRMNET_CTRL_EP_LOOKUP: - info.ph_ep_info.ep_type = DATA_EP_TYPE_HSUSB; - info.ipa_ep_pair.cons_pipe_num = port->ipa_cons_idx; - info.ipa_ep_pair.prod_pipe_num = port->ipa_prod_idx; - // 错误: info结构体有4个成员,未全部赋值 - ret = copy_to_user((void __user *)arg, &info, sizeof(info)); - ... - } -} -``` - -**【正确代码示例】** - -全部进行初始化。 - -```c -static long rmnet_ctrl_ioctl(struct file *fp, unsigned cmd, unsigned long arg) -{ - struct ep_info info; - // 修改:使用memset初始化缓冲区,保证不存在因字节对齐或未赋值导致的内存空洞 - (void)memset(&info, '0', sizeof(ep_info)); - switch (cmd) { - case FRMNET_CTRL_EP_LOOKUP: - info.ph_ep_info.ep_type = DATA_EP_TYPE_HSUSB; - info.ipa_ep_pair.cons_pipe_num = port->ipa_cons_idx; - info.ipa_ep_pair.prod_pipe_num = port->ipa_prod_idx; - ret = copy_to_user((void __user *)arg, &info, sizeof(info)); - ... - } -} -``` - -## 禁止在异常处理中使用BUG_ON宏,避免造成内核panic - -**【描述】** - -BUG_ON宏会调用内核的panic()函数,打印错误信息并主动崩溃系统,在正常逻辑处理中(如ioctl接口的cmd参数不识别)不应当使系统崩溃,禁止在此类异常处理场景中使用BUG_ON宏,推荐使用WARN_ON宏。 - -**【错误代码示例】** - -正常流程中使用了BUG_ON宏 - -```c -/ * 判断Q6侧设置定时器是否繁忙,1-忙,0-不忙 */ -static unsigned int is_modem_set_timer_busy(special_timer *smem_ptr) -{ - int i = 0; - if (smem_ptr == NULL) { - printk(KERN_EMERG"%s:smem_ptr NULL!\n", __FUNCTION__); - // 错误:系统BUG_ON宏打印调用栈后调用panic(),导致内核拒绝服务,不应在正常流程中使用 - BUG_ON(1); - return 1; - } - - ... -} -``` - -**【正确代码示例】** - -去掉BUG_ON宏。 - -```c -/ * 判断Q6侧设置定时器是否繁忙,1-忙,0-不忙 */ -static unsigned int is_modem_set_timer_busy(special_timer *smem_ptr) -{ - int i = 0; - if (smem_ptr == NULL) { - printk(KERN_EMERG"%s:smem_ptr NULL!\n", __FUNCTION__); - // 修改:去掉BUG_ON调用,或使用WARN_ON - return 1; - } - - ... -} -``` - -## 在中断处理程序或持有自旋锁的进程上下文代码中,禁止使用会引起进程休眠的函数 - -**【描述】** - -系统以进程为调度单位,在中断上下文中,只有更高优先级的中断才能将其打断,系统在中断处理的时候不能进行进程调度。如果中断处理程序处于休眠状态,就会导致内核无法唤醒,从而使得内核处于瘫痪。 - -自旋锁在使用时,抢占是失效的。若自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其它进程都将因为不能获得CPU(单核CPU)而停止运行,对外表现为系统将不作任何响应,出现挂死。 - -因此,在中断处理程序或持有自旋锁的进程上下文代码中,应该禁止使用可能会引起休眠(如vmalloc()、msleep()等)、阻塞(如copy_from_user(),copy_to_user()等)或者耗费大量时间(如printk()等)的函数。 - -## 合理使用内核栈,防止内核栈溢出 - -**【描述】** - -内核栈大小是固定的(一般32位系统为8K,64位系统为16K,因此资源非常宝贵。不合理的使用内核栈,可能会导致栈溢出,造成系统挂死。因此需要做到以下几点: - -- 在栈上申请内存空间不要超过内核栈大小; -- 注意函数的嵌套使用次数; -- 不要定义过多的变量。 - -**【错误代码示例】** - -以下代码中定义的变量过大,导致栈溢出。 - -```c -... -struct result -{ - char name[4]; - unsigned int a; - unsigned int b; - unsigned int c; - unsigned int d; -}; // 结构体result的大小为20字节 - -int foo() -{ - struct result temp[512]; - // 错误: temp数组含有512个元素,总大小为10K,远超内核栈大小 - (void)memset(temp, 0, sizeof(result) * 512); - ... // use temp do something - return 0; -} - -... -``` - -代码中数组temp有512个元素,总共10K大小,远超内核的8K,明显的栈溢出。 - -**【正确代码示例】** - -使用kmalloc()代替之。 - -```c -... -struct result -{ - char name[4]; - unsigned int a; - unsigned int b; - unsigned int c; - unsigned int d; -}; // 结构体result的大小为20字节 - -int foo() -{ - struct result *temp = NULL; - temp = (result *)kmalloc(sizeof(result) * 512, GFP_KERNEL); //修改:使用kmalloc()申请内存 - ... // check temp is not NULL - (void)memset(temp, 0, sizeof(result) * 512); - ... // use temp do something - ... // free temp - return 0; -} -... -``` - -## 临时关闭地址校验机制后,在操作完成后必须及时恢复 - -**【描述】** - -SMEP安全机制是指禁止内核执行用户空间的代码(PXN是ARM版本的SMEP)。系统调用(如open(),write()等)本来是提供给用户空间程序访问的。默认情况下,这些函数会对传入的参数地址进行校验,如果入参是非用户空间地址则报错。因此,要在内核程序中使用这些系统调用,就必须使参数地址校验功能失效。set_fs()/get_fs()就用来解决该问题。详细说明见如下代码: - -```c -... -mmegment_t old_fs; -printk("Hello, I'm the module that intends to write message to file.\n"); -if (file == NULL) { - file = filp_open(MY_FILE, O_RDWR | O_APPEND | O_CREAT, 0664); -} - -if (IS_ERR(file)) { - printk("Error occured while opening file %s, exiting ...\n", MY_FILE); - return 0; -} - -sprintf(buf, "%s", "The Message."); -old_fs = get_fs(); // get_fs()的作用是获取用户空间地址上限值 - // #define get_fs() (current->addr_limit -set_fs(KERNEL_DS); // set_fs的作用是将地址空间上限扩大到KERNEL_DS,这样内核代码可以调用系统函数 -file->f_op->write(file, (char *)buf, sizeof(buf), &file->f_pos); // 内核代码可以调用write()函数 -set_fs(old_fs); // 使用完后及时恢复原来用户空间地址限制值 -... -``` - -通过上述代码,可以了解到最为关键的就是操作完成后,要及时恢复地址校验功能。否则SMEP/PXN安全机制就会失效,使得许多漏洞的利用变得很容易。 - -**【错误代码示例】** - -在程序错误处理分支,未通过set_fs()恢复地址校验功能。 - -```c -... -oldfs = get_fs(); -set_fs(KERNEL_DS); -/* 在时间戳目录下面创建done文件 */ -fd = sys_open(path, O_CREAT | O_WRONLY, FILE_LIMIT); -if (fd < 0) { - BB_PRINT_ERR("sys_mkdir[%s] error, fd is[%d]\n", path, fd); - return; // 错误:在错误处理程序分支未恢复地址校验机制 -} - -sys_close(fd); -set_fs(oldfs); -... -``` - -**【正确代码示例】** - -在错误处理程序中恢复地址校验功能。 - -```c -... -oldfs = get_fs(); -set_fs(KERNEL_DS); - -/* 在时间戳目录下面创建done文件 */ -fd = sys_open(path, O_CREAT | O_WRONLY, FILE_LIMIT); -if (fd < 0) { - BB_PRINT_ERR("sys_mkdir[%s] error, fd is[%d] \n", path, fd); - set_fs(oldfs); // 修改:在错误处理程序分支中恢复地址校验机制 - return; -} - -sys_close(fd); -set_fs(oldfs); -... -``` - diff --git a/website/docs/_posts/contribute/OpenHarmony-cpp-coding-style-guide.md b/website/docs/_posts/contribute/OpenHarmony-cpp-coding-style-guide.md deleted file mode 100644 index 9509d8f8fd562fd0701d02ff46040a2fce657b89..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-cpp-coding-style-guide.md +++ /dev/null @@ -1,2913 +0,0 @@ ---- -title: OpenHarmony-cpp-coding-style-guide.md -permalink: /pages/extra/8b4362/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# C++语言编程规范 - -## 目的 -规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”, 如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。 -参考该规范之前,希望您具有相应的C++语言基础能力,而不是通过该文档来学习C++语言。 -1. 了解C++语言的ISO标准; -2. 熟知C++语言的基本语言特性,包括C++ 03/11/14/17相关特性; -3. 了解C++语言的标准库; - -## 总体原则 -代码需要在保证功能正确的前提下,满足**可读、可维护、安全、可靠、可测试、高效、可移植**的特征要求。 - -## 重点关注 -1. 约定C++语言的编程风格,比如命名,排版等。 -2. C++语言的模块化设计,如何设计头文件,类,接口和函数。 -3. C++语言相关特性的优秀实践,比如常量,类型转换,资源管理,模板等。 -4. 现代C++语言的优秀实践,包括C++11/14/17中可以提高代码可维护性,提高代码可靠性的相关约定。 -5. 本规范优先适于用C++17版本。 - -## 约定 -**规则**:编程时必须遵守的约定(must) - -**建议**:编程时应该遵守的约定(should) - -本规范适用通用C++标准, 如果没有特定的标准版本,适用所有的版本(C++03/11/14/17)。 - -## 例外 -无论是'规则'还是'建议',都必须理解该条目这么规定的原因,并努力遵守。 -但是,有些规则和建议可能会有例外。 - -在不违背总体原则,经过充分考虑,有充足的理由的前提下,可以适当违背规范中约定。 -例外破坏了代码的一致性,请尽量避免。'规则'的例外应该是极少的。 - -下列情况,应风格一致性原则优先: -**修改外部开源代码、第三方代码时,应该遵守开源代码、第三方代码已有规范,保持风格统一。** - -# 2 命名 -## 通用命名 -__驼峰风格(CamelCase)__ -大小写字母混用,单词连在一起,不同单词间通过单词首字母大写来分开。 -按连接后的首字母是否大写,又分: 大驼峰(UpperCamelCase)和小驼峰(lowerCamelCase) - - -| 类型 | 命名风格 | -| ---------------------------------------- | --------- | -| 类类型,结构体类型,枚举类型,联合体类型等类型定义, 作用域名称 | 大驼峰 | -| 函数(包括全局函数,作用域函数,成员函数) | 大驼峰 | -| 全局变量(包括全局和命名空间域下的变量,类静态变量),局部变量,函数参数,类、结构体和联合体中的成员变量 | 小驼峰 | -| 宏,常量(const),枚举值,goto 标签 | 全大写,下划线分割 | - -注意: -上表中__常量__是指全局作用域、namespace域、类的静态成员域下,以 const或constexpr 修饰的基本数据类型、枚举、字符串类型的变量,不包括数组和其他类型变量。 -上表中__变量__是指除常量定义以外的其他变量,均使用小驼峰风格。 - -## 文件命名 -### 规则2.2.1 C++文件以.cpp结尾,头文件以.h结尾 -我们推荐使用.h作为头文件的后缀,这样头文件可以直接兼容C和C++。 -我们推荐使用.cpp作为实现文件的后缀,这样可以直接区分C++代码,而不是C代码。 - -目前业界还有一些其他的后缀的表示方法: - -- 头文件: .hh, .hpp, .hxx -- cpp文件:.cc, .cxx, .c - -如果当前项目组使用了某种特定的后缀,那么可以继续使用,但是请保持风格统一。 -但是对于本文档,我们默认使用.h和.cpp作为后缀。 - - -### 规则2.2.2 C++文件名和类名保持一致 -C++的头文件和cpp文件名和类名保持一致,使用下划线小写风格。 - -如果有一个类叫DatabaseConnection,那么对应的文件名: -- database_connection.h -- database_connection.cpp - -结构体,命名空间,枚举等定义的文件名类似。 - -## 函数命名 -函数命名统一使用大驼峰风格,一般采用动词或者动宾结构。 -```cpp -class List { -public: - void AddElement(const Element& element); - Element GetElement(const unsigned int index) const; - bool IsEmpty() const; -}; - -namespace Utils { - void DeleteUser(); -} -``` - -## 类型命名 - -类型命名采用大驼峰命名风格。 -所有类型命名——类、结构体、联合体、类型定义(typedef)、枚举——使用相同约定,例如: -```cpp -// classes, structs and unions -class UrlTable { ... -class UrlTableTester { ... -struct UrlTableProperties { ... -union Packet { ... - -// typedefs -typedef std::map PropertiesMap; - -// enums -enum UrlTableErrors { ... -``` - -对于命名空间的命名,建议使用大驼峰: -```cpp -// namespace -namespace OsUtils { - -namespace FileUtils { - -} - -} -``` - - -### 建议2.4.1 避免滥用 typedef或者#define 对基本类型起别名 -除有明确的必要性,否则不要用 typedef/#define 对基本数据类型进行重定义。 -优先使用``头文件中的基本类型: - -| 有符号类型 | 无符号类型 | 描述 | -| -------- | --------- | ---------------- | -| int8_t | uint8_t | 宽度恰为8的有/无符号整数类型 | -| int16_t | uint16_t | 宽度恰为16的有/无符号整数类型 | -| int32_t | uint32_t | 宽度恰为32的有/无符号整数类型 | -| int64_t | uint64_t | 宽度恰为64的有/无符号整数类型 | -| intptr_t | uintptr_t | 足以保存指针的有/无符号整数类型 | - - -## 变量命名 -通用变量命名采用小驼峰,包括全局变量,函数形参,局部变量,成员变量。 -```cpp -std::string tableName; // Good: 推荐此风格 -std::string tablename; // Bad: 禁止此风格 -std::string path; // Good: 只有一个单词时,小驼峰为全小写 -``` - -### 规则2.5.1 全局变量应增加 'g_' 前缀,静态变量命名不需要加特殊前缀 -全局变量是应当尽量少使用的,使用时应特别注意,所以加上前缀用于视觉上的突出,促使开发人员对这些变量的使用更加小心。 -- 全局静态变量命名与全局变量相同。 -- 函数内的静态变量命名与普通局部变量相同。 -- 类的静态成员变量和普通成员变量相同。 - -```cpp -int g_activeConnectCount; - -void Func() -{ - static int packetCount = 0; - ... -} -``` - -### 规则2.5.2 类的成员变量命名以小驼峰加后下划线组成 - -```cpp -class Foo { -private: - std::string fileName_; // 添加_后缀,类似于K&R命名风格 -}; -``` -对于struct/union的成员变量,仍采用小驼峰不加后缀的命名方式,与局部变量命名风格一致。 - -## 宏、常量、枚举命名 -宏、枚举值采用全大写,下划线连接的格式。 -全局作用域内,有名和匿名namespace内的 const 常量,类的静态成员常量,全大写,下划线连接;函数局部 const 常量和类的普通const成员变量,使用小驼峰命名风格。 - -```cpp -#define MAX(a, b) (((a) < (b)) ? (b) : (a)) // 仅对宏命名举例,并不推荐用宏实现此类功能 - -enum TintColor { // 注意,枚举类型名用大驼峰,其下面的取值是全大写,下划线相连 - RED, - DARK_RED, - GREEN, - LIGHT_GREEN -}; - -int Func(...) -{ - const unsigned int bufferSize = 100; // 函数局部常量 - char *p = new char[bufferSize]; - ... -} - -namespace Utils { - const unsigned int DEFAULT_FILE_SIZE_KB = 200; // 全局常量 -} - -``` - -# 3 格式 - -## 行宽 - -### 规则3.1.1 行宽不超过 120 个字符 -建议每行字符数不要超过 120 个。如果超过120个字符,请选择合理的方式进行换行。 - -例外: -- 如果一行注释包含了超过120 个字符的命令或URL,则可以保持一行,以方便复制、粘贴和通过grep查找; -- 包含长路径的 #include 语句可以超出120 个字符,但是也需要尽量避免; -- 编译预处理中的error信息可以超出一行。 -预处理的 error 信息在一行便于阅读和理解,即使超过 120 个字符。 -```cpp -#ifndef XXX_YYY_ZZZ -#error Header aaaa/bbbb/cccc/abc.h must only be included after xxxx/yyyy/zzzz/xyz.h, because xxxxxxxxxxxxxxxxxxxxxxxxxxxxx -#endif -``` - -## 缩进 - -### 规则3.2.1 使用空格进行缩进,每次缩进4个空格 -只允许使用空格(space)进行缩进,每次缩进为 4 个空格。不允许使用Tab符进行缩进。 -当前几乎所有的集成开发环境(IDE)都支持配置将Tab符自动扩展为4空格输入;请配置你的IDE支持使用空格进行缩进。 - -## 大括号 -### 规则3.3.1 使用 K&R 缩进风格 -__K&R风格__ -换行时,函数(不包括lambda表达式)左大括号另起一行放行首,并独占一行;其他左大括号跟随语句放行末。 -右大括号独占一行,除非后面跟着同一语句的剩余部分,如 do 语句中的 while,或者 if 语句的 else/else if,或者逗号、分号。 - -如: -```cpp -struct MyType { // 跟随语句放行末,前置1空格 - ... -}; - -int Foo(int a) -{ // 函数左大括号独占一行,放行首 - if (...) { - ... - } else { - ... - } -} -``` -推荐这种风格的理由: - -- 代码更紧凑; -- 相比另起一行,放行末使代码阅读节奏感上更连续; -- 符合后来语言的习惯,符合业界主流习惯; -- 现代集成开发环境(IDE)都具有代码缩进对齐显示的辅助功能,大括号放在行尾并不会对缩进和范围产生理解上的影响。 - - -对于空函数体,可以将大括号放在同一行: -```cpp -class MyClass { -public: - MyClass() : value_(0) {} - -private: - int value_; -}; -``` - -## 函数声明和定义 - -### 规则3.4.1 函数声明和定义的返回类型和函数名在同一行;函数参数列表超出行宽时要换行并合理对齐 -在声明和定义函数的时候,函数的返回值类型应该和函数名在同一行;如果行宽度允许,函数参数也应该放在一行;否则,函数参数应该换行,并进行合理对齐。 -参数列表的左圆括号总是和函数名在同一行,不要单独一行;右圆括号总是跟随最后一个参数。 - -换行举例: -```cpp -ReturnType FunctionName(ArgType paramName1, ArgType paramName2) // Good:全在同一行 -{ - ... -} - -ReturnType VeryVeryVeryLongFunctionName(ArgType paramName1, // 行宽不满足所有参数,进行换行 - ArgType paramName2, // Good:和上一行参数对齐 - ArgType paramName3) -{ - ... -} - -ReturnType LongFunctionName(ArgType paramName1, ArgType paramName2, // 行宽限制,进行换行 - ArgType paramName3, ArgType paramName4, ArgType paramName5) // Good: 换行后 4 空格缩进 -{ - ... -} - -ReturnType ReallyReallyReallyReallyLongFunctionName( // 行宽不满足第1个参数,直接换行 - ArgType paramName1, ArgType paramName2, ArgType paramName3) // Good: 换行后 4 空格缩进 -{ - ... -} -``` - -## 函数调用 -### 规则3.5.1 函数调用入参列表应放在一行,超出行宽换行时,保持参数进行合理对齐 -函数调用时,函数参数列表放在一行。参数列表如果超过行宽,需要换行并进行合理的参数对齐。 -左圆括号总是跟函数名,右圆括号总是跟最后一个参数。 - -换行举例: -```cpp -ReturnType result = FunctionName(paramName1, paramName2); // Good:函数参数放在一行 - -ReturnType result = FunctionName(paramName1, - paramName2, // Good:保持与上方参数对齐 - paramName3); - -ReturnType result = FunctionName(paramName1, paramName2, - paramName3, paramName4, paramName5); // Good:参数换行,4 空格缩进 - -ReturnType result = VeryVeryVeryLongFunctionName( // 行宽不满足第1个参数,直接换行 - paramName1, paramName2, paramName3); // 换行后,4 空格缩进 -``` - -如果函数调用的参数存在内在关联性,按照可理解性优先于格式排版要求,对参数进行合理分组换行。 -```cpp -// Good:每行的参数代表一组相关性较强的数据结构,放在一行便于理解 -int result = DealWithStructureLikeParams(left.x, left.y, // 表示一组相关参数 - right.x, right.y); // 表示另外一组相关参数 -``` - -## if语句 - -### 规则3.6.1 if语句必须要使用大括号 -我们要求if语句都需要使用大括号,即便只有一条语句。 - -理由: -- 代码逻辑直观,易读; -- 在已有条件语句代码上增加新代码时不容易出错; -- 对于在if语句中使用函数式宏时,有大括号保护不易出错(如果宏定义时遗漏了大括号)。 - -```cpp -if (objectIsNotExist) { // Good:单行条件语句也加大括号 - return CreateNewObject(); -} -``` -### 规则3.6.2 禁止 if/else/else if 写在同一行 -条件语句中,若有多个分支,应该写在不同行。 - -如下是正确的写法: - -```cpp -if (someConditions) { - DoSomething(); - ... -} else { // Good: else 与 if 在不同行 - ... -} -``` - -下面是不符合规范的案例: - -```cpp -if (someConditions) { ... } else { ... } // Bad: else 与 if 在同一行 -``` - -## 循环语句 -### 规则3.7.1 循环语句必须使用大括号 -和条件表达式类似,我们要求for/while循环语句必须加上大括号,即便循环体是空的,或循环语句只有一条。 -```cpp -for (int i = 0; i < someRange; i++) { // Good: 使用了大括号 - DoSomething(); -} -``` -```cpp -while (condition) { } // Good:循环体是空,使用大括号 -``` -```cpp -while (condition) { - continue; // Good:continue 表示空逻辑,使用大括号 -} -``` - -坏的例子: -```cpp -for (int i = 0; i < someRange; i++) - DoSomething(); // Bad: 应该加上括号 -``` -```cpp -while (condition); // Bad:使用分号容易让人误解是while语句中的一部分 -``` - -## switch语句 -### 规则3.8.1 switch 语句的 case/default 要缩进一层 -switch 语句的缩进风格如下: -```cpp -switch (var) { - case 0: // Good: 缩进 - DoSomething1(); // Good: 缩进 - break; - case 1: { // Good: 带大括号格式 - DoSomething2(); - break; - } - default: - break; -} -``` - -```cpp -switch (var) { -case 0: // Bad: case 未缩进 - DoSomething(); - break; -default: // Bad: default 未缩进 - break; -} -``` - -## 表达式 - -### 建议3.9.1 表达式换行要保持换行的一致性,运算符放行末 -较长的表达式,不满足行宽要求的时候,需要在适当的地方换行。一般在较低优先级运算符或连接符后面截断,运算符或连接符放在行末。 -运算符、连接符放在行末,表示“未结束,后续还有”。 -例: - -// 假设下面第一行已经不满足行宽要求 -```cpp -if ((currentValue > threshold) && // Good:换行后,逻辑操作符放在行尾 - someConditionsion) { - DoSomething(); - ... -} - -int result = reallyReallyLongVariableName1 + // Good - reallyReallyLongVariableName2; -``` -表达式换行后,注意保持合理对齐,或者4空格缩进。参考下面例子 - -```cpp -int sum = longVaribleName1 + longVaribleName2 + longVaribleName3 + - longVaribleName4 + longVaribleName5 + longVaribleName6; // Good: 4空格缩进 - -int sum = longVaribleName1 + longVaribleName2 + longVaribleName3 + - longVaribleName4 + longVaribleName5 + longVaribleName6; // Good: 保持对齐 -``` -## 变量赋值 - -### 规则3.10.1 多个变量定义和赋值语句不允许写在一行 -每行只有一个变量初始化的语句,更容易阅读和理解。 - -```cpp -int maxCount = 10; -bool isCompleted = false; -``` - -下面是不符合规范的示例: - -```cpp -int maxCount = 10; bool isCompleted = false; // Bad:多个变量初始化需要分开放在多行,每行一个变量初始化 -int x, y = 0; // Bad:多个变量定义需要分行,每行一个 - -int pointX; -int pointY; -... -pointX = 1; pointY = 2; // Bad:多个变量赋值语句放同一行 -``` -例外:for 循环头、if 初始化语句(C++17)、结构化绑定语句(C++17)中可以声明和初始化多个变量。这些语句中的多个变量声明有较强关联,如果强行分成多行会带来作用域不一致,声明和初始化割裂等问题。 - -## 初始化 -初始化包括结构体、联合体、及数组的初始化 - -### 规则3.11.1 初始化换行时要有缩进,并进行合理对齐 -结构体或数组初始化时,如果换行应保持4空格缩进。 -从可读性角度出发,选择换行点和对齐位置。 - -```cpp -const int rank[] = { - 16, 16, 16, 16, 32, 32, 32, 32, - 64, 64, 64, 64, 32, 32, 32, 32 -}; -``` - -## 指针与引用 -### 建议3.12.1 指针类型"`*`"跟随变量名或者类型,不要两边都留有或者都没有空格 -指针命名: `*`靠左靠右都可以,但是不要两边都有或者都没有空格。 -```cpp -int* p = nullptr; // Good -int *p = nullptr; // Good - -int*p = nullptr; // Bad -int * p = nullptr; // Bad -``` - -例外:当变量被 const 修饰时,"`*`" 无法跟随变量,此时也不要跟随类型。 -```cpp -const char * const VERSION = "V100"; -``` - -### 建议3.12.2 引用类型"`&`"跟随变量名或者类型,不要两边都留有或者都没有空格 -引用命名:`&`靠左靠右都可以,但是不要两边都有或者都没有空格。 -```cpp -int i = 8; - -int& p = i; // Good -int &p = i; // Good -int*& rp = pi; // Good,指针的引用,*& 一起跟随类型 -int *&rp = pi; // Good,指针的引用,*& 一起跟随变量名 -int* &rp = pi; // Good,指针的引用,* 跟随类型,& 跟随变量名 - -int & p = i; // Bad -int&p = i; // Bad -``` - -## 编译预处理 -### 规则3.13.1 编译预处理的"#"统一放在行首,嵌套编译预处理语句时,"#"可以进行缩进 -编译预处理的"#"统一放在行首,即使编译预处理的代码是嵌入在函数体中的,"#"也应该放在行首。 - -### 规则3.13.2 避免使用宏 -宏会忽略作用域,类型系统以及各种规则,容易引发问题。应尽量避免使用宏定义,如果必须使用宏,要保证证宏名的唯一性。 -在C++中,有许多方式来避免使用宏: -- 用const或enum定义易于理解的常量 -- 用namespace避免名字冲突 -- 用inline函数避免函数调用的开销 -- 用template函数来处理多种类型 -在文件头保护宏、条件编译、日志记录等必要场景中可以使用宏。 - -### 规则3.13.3 禁止使用宏来表示常量 -宏是简单的文本替换,在预处理阶段完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名; 宏没有类型检查,不宏全; 宏没有作用域。 - -### 规则3.13.4 禁止使用函数式宏 -宏义函数式宏前,应考虑能否用函数替代。对于可替代场景,建议用函数替代宏。 -函数式宏的缺点如下: -- 函数式宏缺乏类型检查,不如函数调用检查严格 -- 宏展开时宏参数不求值,可能会产生非预期结果 -- 宏没有独产的作用域 -- 宏的技巧性太强,例如#的用法和无处不在的括号,影响可读性 -- 在特定场景中必须用编译器对宏的扩展语法,如GCC的statement expression,影响可移植性 -- 宏在预编译阶段展开后,在期后编译、链接和调试时都不可见;而且包含多行的宏会展开为一行。函数式宏难以调试、难以打断点,不利于定位问题 -- 对于包含大量语句的宏,在每个调用点都要展开。如果调用点很多,会造成代码空间的膨胀 - -函数没有宏的上述缺点。但是,函数相比宏,最大的劣势是执行效率不高(增加函数调用的开销和编译器优化的难度)。 -为此,可以在必要时使用内联函数。内联函数跟宏类似,也是在调用点展开。不同之处在于内联函数是在编译时展开。 - -内联函数兼具函数和宏的优点: -- 内联函数执行严格的类型检查 -- 内联函数的参数求值只会进行一次 -- 内联函数就地展开,没有函数调用的开销 -- 内联函数比函数优化得更好 -对于性能要求高的产品代码,可以考虑用内联函数代替函数。 - -例外: -在日志记录场景中,需要通过函数式宏保持调用点的文件名(__FILE__)、行号(__LINE__)等信息。 - -## 空格和空行 -### 规则3.14.1 水平空格应该突出关键字和重要信息,避免不必要的留白 -水平空格应该突出关键字和重要信息,每行代码尾部不要加空格。总体规则如下: - -- if, switch, case, do, while, for等关键字之后加空格; -- 小括号内部的两侧,不要加空格; -- 大括号内部两侧有无空格,左右必须保持一致; -- 一元操作符(& * + ‐ ~ !)之后不要加空格; -- 二元操作符(= + ‐ < > * / % | & ^ <= >= == != )左右两侧加空格 -- 三目运算符(? :)符号两侧均需要空格 -- 前置和后置的自增、自减(++ --)和变量之间不加空格 -- 结构体成员操作符(. ->)前后不加空格 -- 逗号(,)前面不加空格,后面增加空格 -- 对于模板和类型转换(<>)和类型之间不要添加空格 -- 域操作符(::)前后不要添加空格 -- 冒号(:)前后根据情况来判断是否要添加空格 - -常规情况: -```cpp -void Foo(int b) { // Good:大括号前应该留空格 - -int i = 0; // Good:变量初始化时,=前后应该有空格,分号前面不要留空格 - -int buf[BUF_SIZE] = {0}; // Good:大括号内两侧都无空格 -``` - -函数定义和函数调用: -```cpp -int result = Foo(arg1,arg2); - ^ // Bad: 逗号后面需要增加空格 - -int result = Foo( arg1, arg2 ); - ^ ^ // Bad: 函数参数列表的左括号后面不应该有空格,右括号前面不应该有空格 -``` - -指针和取地址 -```cpp -x = *p; // Good:*操作符和指针p之间不加空格 -p = &x; // Good:&操作符和变量x之间不加空格 -x = r.y; // Good:通过.访问成员变量时不加空格 -x = r->y; // Good:通过->访问成员变量时不加空格 -``` - -操作符: -```cpp -x = 0; // Good:赋值操作的=前后都要加空格 -x = -5; // Good:负数的符号和数值之前不要加空格 -++x; // Good:前置和后置的++/--和变量之间不要加空格 -x--; - -if (x && !y) // Good:布尔操作符前后要加上空格,!操作和变量之间不要空格 -v = w * x + y / z; // Good:二元操作符前后要加空格 -v = w * (x + z); // Good:括号内的表达式前后不需要加空格 - -int a = (x < y) ? x : y; // Good: 三目运算符, ?和:前后需要添加空格 -``` - -循环和条件语句: -```cpp -if (condition) { // Good:if关键字和括号之间加空格,括号内条件语句前后不加空格 - ... -} else { // Good:else关键字和大括号之间加空格 - ... -} - -while (condition) {} // Good:while关键字和括号之间加空格,括号内条件语句前后不加空格 - -for (int i = 0; i < someRange; ++i) { // Good:for关键字和括号之间加空格,分号之后加空格 - ... -} - -switch (condition) { // Good: switch 关键字后面有1空格 - case 0: // Good:case语句条件和冒号之间不加空格 - ... - break; - ... - default: - ... - break; -} -``` - -模板和转换 -```cpp -// 尖括号(< and >) 不与空格紧邻, < 前没有空格, > 和 ( 之间也没有. -vector x; -y = static_cast(x); - -// 在类型与指针操作符之间留空格也可以, 但要保持一致. -vector x; -``` - -域操作符 -```cpp -std::cout; // Good: 命名空间访问,不要留空格 - -int MyClass::GetValue() const {} // Good: 对于成员函数定义,不要留空格 -``` - -冒号 -```cpp -// 添加空格的场景 - -// Good: 类的派生需要留有空格 -class Sub : public Base { - -}; - -// 构造函数初始化列表需要留有空格 -MyClass::MyClass(int var) : someVar_(var) -{ - DoSomething(); -} - -// 位域表示也留有空格 -struct XX { - char a : 4; - char b : 5; - char c : 4; -}; -``` - -```cpp -// 不添加空格的场景 - -// Good: 对于public:, private:这种类访问权限的冒号不用添加空格 -class MyClass { -public: - MyClass(int var); -private: - int someVar_; -}; - -// 对于switch-case的case和default后面的冒号不用添加空格 -switch (value) -{ - case 1: - DoSomething(); - break; - default: - break; -} -``` - -注意:当前的集成开发环境(IDE)可以设置删除行尾的空格,请正确配置。 - -### 建议3.14.1 合理安排空行,保持代码紧凑 - -减少不必要的空行,可以显示更多的代码,方便代码阅读。下面有一些建议遵守的规则: -- 根据上下内容的相关程度,合理安排空行; -- 函数内部、类型定义内部、宏内部、初始化表达式内部,不使用连续空行 -- 不使用连续 **3** 个空行,或更多 -- 大括号内的代码块行首之前和行尾之后不要加空行,但namespace的大括号内不作要求。 - -```cpp -int Foo() -{ - ... -} - - - -int Bar() // Bad:最多使用连续2个空行。 -{ - ... -} - - -if (...) { - // Bad:大括号内的代码块行首不要加入空行 - ... - // Bad:大括号内的代码块行尾不要加入空行 -} - -int Foo(...) -{ - // Bad:函数体内行首不要加空行 - ... -} -``` - -## 类 -### 规则3.15.1 类访问控制块的声明依次序是 public:, protected:, private:,缩进和 class 关键字对齐 -```cpp -class MyClass : public BaseClass { -public: // 注意没有缩进 - MyClass(); // 标准的4空格缩进 - explicit MyClass(int var); - ~MyClass() {} - - void SomeFunction(); - void SomeFunctionThatDoesNothing() - { - } - - void SetVar(int var) { someVar_ = var; } - int GetVar() const { return someVar_; } - -private: - bool SomeInternalFunction(); - - int someVar_; - int someOtherVar_; -}; -``` - -在各个部分中,建议将类似的声明放在一起, 并且建议以如下的顺序: 类型 (包括 typedef, using 和嵌套的结构体与类), 常量, 工厂函数, 构造函数, 赋值运算符, 析构函数, 其它成员函数, 数据成员。 - - -### 规则3.15.2 构造函数初始化列表放在同一行或按四格缩进并排多行 -```cpp -// 如果所有变量能放在同一行: -MyClass::MyClass(int var) : someVar_(var) -{ - DoSomething(); -} - -// 如果不能放在同一行, -// 必须置于冒号后, 并缩进4个空格 -MyClass::MyClass(int var) - : someVar_(var), someOtherVar_(var + 1) // Good: 逗号后面留有空格 -{ - DoSomething(); -} - -// 如果初始化列表需要置于多行, 需要逐行对齐 -MyClass::MyClass(int var) - : someVar_(var), // 缩进4个空格 - someOtherVar_(var + 1) -{ - DoSomething(); -} -``` - -# 4 注释 -一般的,尽量通过清晰的架构逻辑,好的符号命名来提高代码可读性;需要的时候,才辅以注释说明。 -注释是为了帮助阅读者快速读懂代码,所以要从读者的角度出发,**按需注释**。 - -注释内容要简洁、明了、无二义性,信息全面且不冗余。 - -**注释跟代码一样重要。** -写注释时要换位思考,用注释去表达此时读者真正需要的信息。在代码的功能、意图层次上进行注释,即注释解释代码难以表达的意图,不要重复代码信息。 -修改代码时,也要保证其相关注释的一致性。只改代码,不改注释是一种不文明行为,破坏了代码与注释的一致性,让阅读者迷惑、费解,甚至误解。 - -使用英文进行注释。 - -## 注释风格 - -在 C++ 代码中,使用 `/*` `*/`和 `//` 都是可以的。 -按注释的目的和位置,注释可分为不同的类型,如文件头注释、函数头注释、代码注释等等; -同一类型的注释应该保持统一的风格。 - -注意:本文示例代码中,大量使用 '//' 后置注释只是为了更精确的描述问题,并不代表这种注释风格更好。 - -## 文件头注释 -### 规则3.1 文件头注释必须包含版权许可 - -/* - * Copyright (c) 2020 XXX - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -## 函数头注释 -### 规则4.3.1 公有(public)函数必须编写函数头注释 -公有函数属于类对外提供的接口,调用者需要了解函数的功能、参数的取值范围、返回的结果、注意事项等信息才能正常使用。 -特别是参数的取值范围、返回的结果、注意事项等都无法做到自注示,需要编写函数头注释辅助说明。 - -### 规则4.3.2 禁止空有格式的函数头注释 -并不是所有的函数都需要函数头注释; -函数签名无法表达的信息,加函数头注释辅助说明; - -函数头注释统一放在函数声明或定义上方,使用如下风格之一: -使用`//`写函数头 - -```cpp -// 单行函数头 -int Func1(void); - -// 多行函数头 -// 第二行 -int Func2(void); -``` - -使用`/* */`写函数头 -```cpp -/* 单行函数头 */ -int Func1(void); - -/* - * 另一种单行函数头 - */ -int Func2(void); - -/* - * 多行函数头 - * 第二行 - */ -int Func3(void); -``` -函数尽量通过函数名自注释,按需写函数头注释。 -不要写无用、信息冗余的函数头;不要写空有格式的函数头。 - -函数头注释内容可选,但不限于:功能说明、返回值,性能约束、用法、内存约定、算法实现、可重入的要求等等。 -模块对外头文件中的函数接口声明,其函数头注释,应当将重要、有用的信息表达清楚。 - -例: - -```cpp -/* - * 返回实际写入的字节数,-1表示写入失败 - * 注意,内存 buf 由调用者负责释放 - */ -int WriteString(const char *buf, int len); -``` - -坏的例子: -```cpp -/* - * 函数名:WriteString - * 功能:写入字符串 - * 参数: - * 返回值: - */ -int WriteString(const char *buf, int len); -``` -上面例子中的问题: - -- 参数、返回值,空有格式没内容 -- 函数名信息冗余 -- 关键的 buf 由谁释放没有说清楚 - -## 代码注释 -### 规则4.4.1 代码注释放于对应代码的上方或右边 -### 规则4.4.2 注释符与注释内容间要有1空格;右置注释与前面代码至少1空格 -代码上方的注释,应该保持对应代码一样的缩进。 -选择并统一使用如下风格之一: -使用`//` -```cpp - -// 这是单行注释 -DoSomething(); - -// 这是多行注释 -// 第二行 -DoSomething(); -``` - -使用`/*' '*/` -```cpp -/* 这是单行注释 */ -DoSomething(); - -/* - * 另一种方式的多行注释 - * 第二行 - */ -DoSomething(); -``` -代码右边的注释,与代码之间,至少留1空格,建议不超过4空格。 -通常使用扩展后的 TAB 键即可实现 1-4 空格的缩进。 - -选择并统一使用如下风格之一: - -```cpp -int foo = 100; // 放右边的注释 -int bar = 200; /* 放右边的注释 */ -``` -右置格式在适当的时候,上下对齐会更美观。 -对齐后的注释,离左边代码最近的那一行,保证1-4空格的间隔。 -例: - -```cpp -const int A_CONST = 100; /* 相关的同类注释,可以考虑上下对齐 */ -const int ANOTHER_CONST = 200; /* 上下对齐时,与左侧代码保持间隔 */ -``` -当右置的注释超过行宽时,请考虑将注释置于代码上方。 - -### 规则4.4.3 不用的代码段直接删除,不要注释掉 -被注释掉的代码,无法被正常维护;当企图恢复使用这段代码时,极有可能引入易被忽略的缺陷。 -正确的做法是,不需要的代码直接删除掉。若再需要时,考虑移植或重写这段代码。 - -这里说的注释掉代码,包括用 /* */ 和 //,还包括 #if 0, #ifdef NEVER_DEFINED 等等。 - -# 5 头文件 -## 头文件职责 -头文件是模块或文件的对外接口,头文件的设计体现了大部分的系统设计。 -头文件中适合放置接口的声明,不适合放置实现(内联函数除外)。对于cpp文件中内部才需要使用的函数、宏、枚举、结构定义等不要放在头文件中。 -头文件应当职责单一。头文件过于复杂,依赖过于复杂还是导致编译时间过长的主要原因。 - -### 建议5.1.1 每一个.cpp文件应有一个对应的.h文件,用于声明需要对外公开的类与接口 -通常情况下,每个.cpp文件都有一个相应的.h,用于放置对外提供的函数声明、宏定义、类型定义等。 -如果一个.cpp文件不需要对外公布任何接口,则其就不应当存在。 -例外:__程序的入口(如main函数所在的文件),单元测试代码,动态库代码。__ - -示例: -```cpp -// Foo.h - -#ifndef FOO_H -#define FOO_H - -class Foo { -public: - Foo(); - void Fun(); - -private: - int value_; -}; - -#endif -``` - -```cpp -// Foo.cpp -#include "Foo.h" - -namespace { // Good: 对内函数的声明放在.cpp文件的头部,并声明为匿名namespace或者static限制其作用域 - void Bar() - { - } -} - -... - -void Foo::Fun() -{ - Bar(); -} -``` - -## 头文件依赖 -### 规则5.2.1 禁止头文件循环依赖 -头文件循环依赖,指 a.h 包含 b.h,b.h 包含 c.h,c.h 包含 a.h, 导致任何一个头文件修改,都导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。 -而如果是单向依赖,如a.h包含b.h,b.h包含c.h,而c.h不包含任何头文件,则修改a.h不会导致包含了b.h/c.h的源代码重新编译。 - -头文件循环依赖直接体现了架构设计上的不合理,可通过优化架构去避免。 - - -### 规则5.2.2 头文件必须编写`#define`保护,防止重复包含 -为防止头文件被重复包含,所有头文件都应当使用 #define 保护;不要使用 #pragma once - -定义包含保护符时,应该遵守如下规则: -1)保护符使用唯一名称; -2)不要在受保护部分的前后放置代码或者注释,文件头注释除外。 - -示例:假定timer模块的timer.h,其目录为timer/include/timer.h,应按如下方式保护: - -```cpp -#ifndef TIMER_INCLUDE_TIMER_H -#define TIMER_INCLUDE_TIMER_H -... -#endif -``` - -### 规则5.2.3 禁止通过声明的方式引用外部函数接口、变量 -只能通过包含头文件的方式使用其他模块或文件提供的接口。 -通过 extern 声明的方式使用外部函数接口、变量,容易在外部接口改变时可能导致声明和定义不一致。 -同时这种隐式依赖,容易导致架构腐化。 - -不符合规范的案例: - -// a.cpp内容 -```cpp -extern int Fun(); // Bad: 通过extern的方式使用外部函数 - -void Bar() -{ - int i = Fun(); - ... -} -``` - -// b.cpp内容 -```cpp -int Fun() -{ - // Do something -} -``` -应该改为: - -// a.cpp内容 -```cpp -#include "b.h" // Good: 通过包含头文件的方式使用其他.cpp提供的接口 - -void Bar() -{ - int i = Fun(); - ... -} -``` - -// b.h内容 -```cpp -int Fun(); -``` - -// b.cpp内容 -```cpp -int Fun() -{ - // Do something -} -``` -例外,有些场景需要引用其内部函数,但并不想侵入代码时,可以 extern 声明方式引用。 -如: -针对某一内部函数进行单元测试时,可以通过 extern 声明来引用被测函数; -当需要对某一函数进行打桩、打补丁处理时,允许 extern 声明该函数。 - -### 规则5.2.4 禁止在extern "C"中包含头文件 -在 extern "C" 中包含头文件,有可能会导致 extern "C" 嵌套,部分编译器对 extern "C" 嵌套层次有限制,嵌套层次太多会编译错误。 - -在C,C++混合编程的情况下,在extern "C"中包含头文件,可能会导致被包含头文件的原有意图遭到破坏,比如链接规范被不正确地更改。 - -示例,存在a.h和b.h两个头文件: - -// a.h内容 -```cpp -... -#ifdef __cplusplus -void Foo(int); -#define A(value) Foo(value) -#else -void A(int) -#endif -``` -// b.h内容 -```cpp -... -#ifdef __cplusplus -extern "C" { -#endif - -#include "a.h" -void B(); - -#ifdef __cplusplus -} -#endif -``` - -使用C++预处理器展开b.h,将会得到 -```cpp -extern "C" { - void Foo(int); - void B(); -} -``` - -按照 a.h 作者的本意,函数 Foo 是一个 C++ 自由函数,其链接规范为 "C++"。 -但在 b.h 中,由于 `#include "a.h"` 被放到了 `extern "C"` 的内部,函数 Foo 的链接规范被不正确地更改了。 - -例外: -如果在 C++ 编译环境中,想引用纯C的头文件,这些C头文件并没有` extern "C"` 修饰。非侵入式的做法是,在 `extern "C"` 中去包含C头文件。 - -### 建议5.2.1尽量避免使用前置声明,而是通过`#include`来包含头文件 -前置声明(forward declaration)通常指类、模板的纯粹声明,没伴随着其定义。 - -- 优点: - 1. 前置声明能够节省编译时间,多余的 #include 会迫使编译器展开更多的文件,处理更多的输入。 - 2. 前置声明能够节省不必要的重新编译的时间。 #include 使代码因为头文件中无关的改动而被重新编译多次。 -- 缺点: - 1. 前置声明隐藏了依赖关系,头文件改动时,用户的代码会跳过必要的重新编译过程。 - 2. 前置声明可能会被库的后续更改所破坏。前置声明模板有时会妨碍头文件开发者变动其 API. 例如扩大形参类型,加个自带默认参数的模板形参等等。 - 3. 前置声明来自命名空间` std::` 的 symbol 时,其行为未定义(在C++11标准规范中明确说明)。 - 4. 前置声明了不少来自头文件的 symbol 时,就会比单单一行的 include 冗长。 - 5. 仅仅为了能前置声明而重构代码(比如用指针成员代替对象成员)会使代码变得更慢更复杂。 - 6. 很难判断什么时候该用前置声明,什么时候该用`#include`,某些场景下面前置声明和`#include`互换以后会导致意想不到的结果。 - -所以我们尽可能避免使用前置声明,而是使用#include头文件来保证依赖关系。 - -# 6 作用域 - -## 命名空间 - -### 建议6.1.1 对于cpp文件中不需要导出的变量,常量或者函数,请使用匿名namespace封装或者用static修饰 -在C++ 2003标准规范中,使用static修饰文件作用域的变量,函数等被标记为deprecated特性,所以更推荐使用匿名namespace。 - -主要原因如下: -1. static在C++中已经赋予了太多的含义,静态函数成员变量,静态成员函数,静态全局变量,静态函数局部变量,每一种都有特殊的处理。 -2. static只能保证变量,常量和函数的文件作用域,但是namespace还可以封装类型等。 -3. 统一namespace来处理C++的作用域,而不需要同时使用static和namespace来管理。 -4. static修饰的函数不能用来实例化模板,而匿名namespace可以。 - -但是不要在 .h 中使用中使用匿名namespace或者static。 - -```cpp -// Foo.cpp - -namespace { - const int MAX_COUNT = 20; - void InternalFun() {}; -} - -void Foo::Fun() -{ - int i = MAX_COUNT; - - InternalFun(); -} - -``` - -### 规则6.1.1 不要在头文件中或者#include之前使用using导入命名空间 -说明:使用using导入命名空间会影响后续代码,易造成符号冲突,所以不要在头文件以及源文件中的#include之前使用using导入命名空间。 -示例: - -```cpp -// 头文件a.h -namespace NamespaceA { - int Fun(int); -} -``` - -```cpp -// 头文件b.h -namespace NamespaceB { - int Fun(int); -} - -using namespace NamespaceB; - -void G() -{ - Fun(1); -} -``` - -```cpp -// 源代码a.cpp -#include "a.h" -using namespace NamespaceA; -#include "b.h" - -void main() -{ - G(); // using namespace NamespaceA在#include “b.h”之前,引发歧义:NamespaceA::Fun,NamespaceB::Fun调用不明确 -} -``` - -对于在头文件中使用using导入单个符号或定义别名,允许在模块自定义名字空间中使用,但禁止在全局名字空间中使用。 -```cpp -// foo.h - -#include -using fancy::string; // Bad,禁止向全局名字空间导入符号 - -namespace Foo { - using fancy::string; // Good,可以在模块自定义名字空间中导入符号 - using MyVector = fancy::vector; // Good,C++11可在自定义名字空间中定义别名 -} -``` - - -## 全局函数和静态成员函数 - -### 建议6.2.1 优先使用命名空间来管理全局函数,如果和某个class有直接关系的,可以使用静态成员函数 -说明:非成员函数放在名字空间内可避免污染全局作用域, 也不要用类+静态成员方法来简单管理全局函数。 如果某个全局函数和某个类有紧密联系, 那么可以作为类的静态成员函数。 - -如果你需要定义一些全局函数,给某个cpp文件使用,那么请使用匿名namespace来管理。 -```cpp -namespace MyNamespace { - int Add(int a, int b); -} - -class File { -public: - static File CreateTempFile(const std::string& fileName); -}; -``` - -## 全局常量和静态成员常量 - -### 建议6.3.1 优先使用命名空间来管理全局常量,如果和某个class有直接关系的,可以使用静态成员常量 -说明:全局常量放在命名空间内可避免污染全局作用域, 也不要用类+静态成员常量来简单管理全局常量。 如果某个全局常量和某个类有紧密联系, 那么可以作为类的静态成员常量。 - -如果你需要定义一些全局常量,只给某个cpp文件使用,那么请使用匿名namespace来管理。 -```cpp -namespace MyNamespace { - const int MAX_SIZE = 100; -} - -class File { -public: - static const std::string SEPARATOR; -}; -``` - -## 全局变量 - -### 建议6.4.1 尽量避免使用全局变量,考虑使用单例模式 -说明:全局变量是可以修改和读取的,那么这样会导致业务代码和这个全局变量产生数据耦合。 -```cpp -int g_counter = 0; - -// a.cpp -g_counter++; - -// b.cpp -g_counter++; - -// c.cpp -cout << g_counter << endl; -``` - -使用单实例模式 -```cpp -class Counter { -public: - static Counter& GetInstance() - { - static Counter counter; - return counter; - } // 单实例实现简单举例 - - void Increase() - { - value_++; - } - - void Print() const - { - std::cout << value_ << std::endl; - } - -private: - Counter() : value_(0) {} - -private: - int value_; -}; - -// a.cpp -Counter::GetInstance().Increase(); - -// b.cpp -Counter::GetInstance().Increase(); - -// c.cpp -Counter::GetInstance().Print(); -``` - -实现单例模式以后,实现了全局唯一一个实例,和全局变量同样的效果,并且单实例提供了更好的封装性。 - -例外:有的时候全局变量的作用域仅仅是模块内部,这样进程空间里面就会有多个全局变量实例,每个模块持有一份,这种场景下是无法使用单例模式解决的。 - -# 7 类 - -## 构造,拷贝构造,赋值和析构函数 -构造,拷贝,移动和析构函数提供了对象的生命周期管理方法: -- 构造函数(constructor): `X()` -- 拷贝构造函数(copy constructor):`X(const X&)` -- 拷贝赋值操作符(copy assignment):`operator=(const X&)` -- 移动构造函数(move constructor):`X(X&&)` *C++11以后提供* -- 移动赋值操作符(move assignment):`operator=(X&&)` *C++11以后提供* -- 析构函数(destructor):`~X()` - -### 规则7.1.1 类的成员变量必须显式初始化 -说明:如果类有成员变量,没有定义构造函数,又没有定义默认构造函数,编译器将自动生成一个构造函数,但编译器生成的构造函数并不会对成员变量进行初始化,对象状态处于一种不确定性。 - -例外: -- 如果类的成员变量具有默认构造函数,那么可以不需要显式初始化。 - -示例:如下代码没有构造函数,私有数据成员无法初始化: -```cpp -class Message { -public: - void ProcessOutMsg() - { - //… - } - -private: - unsigned int msgID_; - unsigned int msgLength_; - unsigned char* msgBuffer_; - std::string someIdentifier_; -}; - -Message message; // message成员变量没有初始化 -message.ProcessOutMsg(); // 后续使用存在隐患 - -// 因此,有必要定义默认构造函数,如下: -class Message { -public: - Message() : msgID_(0), msgLength_(0), msgBuffer_(nullptr) - { - } - - void ProcessOutMsg() - { - // … - } - -private: - unsigned int msgID_; - unsigned int msgLength_; - unsigned char* msgBuffer_; - std::string someIdentifier_; // 具有默认构造函数,不需要显式初始化 -}; -``` - -### 建议7.1.1 成员变量优先使用声明时初始化(C++11)和构造函数初始化列表初始化 -说明:C++11的声明时初始化可以一目了然的看出成员初始值,应当优先使用。如果成员初始化值和构造函数相关,或者不支持C++11,则应当优先使用构造函数初始化列表来初始化成员。相比起在构造函数体中对成员赋值,初始化列表的代码更简洁,执行性能更好,而且可以对const成员和引用成员初始化。 - -```cpp -class Message { -public: - Message() : msgLength_(0) // Good,优先使用初始化列表 - { - msgBuffer_ = nullptr; // Bad,不推荐在构造函数中赋值 - } - -private: - unsigned int msgID_{0}; // Good,C++11中使用 - unsigned int msgLength_; - unsigned char* msgBuffer_; -}; -``` - -### 规则7.1.2 为避免隐式转换,将单参数构造函数声明为explicit -说明:单参数构造函数如果没有用explicit声明,则会成为隐式转换函数。 -示例: - -```cpp -class Foo { -public: - explicit Foo(const string& name): name_(name) - { - } -private: - string name_; -}; - - -void ProcessFoo(const Foo& foo){} - -int main(void) -{ - std::string test = "test"; - ProcessFoo(test); // 编译不通过 - return 0; -} -``` - -上面的代码编译不通过,因为`ProcessFoo`需要的参数是Foo类型,传入的string类型不匹配。 - -如果将Foo构造函数的explicit关键字移除,那么调用`ProcessFoo`传入的string就会触发隐式转换,生成一个临时的Foo对象。往往这种隐式转换是让人迷惑的,并且容易隐藏Bug,得到了一个不期望的类型转换。所以对于单参数的构造函数是要求explicit声明。 - -### 规则7.1.3 如果不需要拷贝构造函数、赋值操作符 / 移动构造函数、赋值操作符,请明确禁止 -说明:如果用户不定义,编译器默认会生成拷贝构造函数和拷贝赋值操作符, 移动构造和移动赋值操作符(移动语义的函数C++11以后才有)。 -如果我们不要使用拷贝构造函数,或者赋值操作符,请明确拒绝: - -1. 将拷贝构造函数或者赋值操作符设置为private,并且不实现: -```cpp -class Foo { -private: - Foo(const Foo&); - Foo& operator=(const Foo&); -}; -``` -2. 使用C++11提供的delete, 请参见后面现代C++的相关章节。 - - -3. 推荐继承NoCopyable、NoMovable,禁止使用DISALLOW_COPY_AND_MOVE,DISALLOW_COPY,DISALLOW_MOVE等宏。 -```cpp -class Foo : public NoCopyable, public NoMovable { -}; -``` -NoCopyable和NoMovable的实现: -```cpp -class NoCopyable { -public: - NoCopyable() = default; - NoCopyable(const NoCopyable&) = delete; - NoCopyable& operator = (NoCopyable&) = delete; -}; - -class NoMovable { -public: - NoMovable() = default; - NoMovable(NoMovable&&) noexcept = delete; - NoMovable& operator = (NoMovable&&) noexcept = delete; -}; -``` - -### 规则7.1.4 拷贝构造和拷贝赋值操作符应该是成对出现或者禁止 -拷贝构造函数和拷贝赋值操作符都是具有拷贝语义的,应该同时出现或者禁止。 - -```cpp -// 同时出现 -class Foo { -public: - ... - Foo(const Foo&); - Foo& operator=(const Foo&); - ... -}; - -// 同时default, C++11支持 -class Foo { -public: - Foo(const Foo&) = default; - Foo& operator=(const Foo&) = default; -}; - -// 同时禁止, C++11可以使用delete -class Foo { -private: - Foo(const Foo&); - Foo& operator=(const Foo&); -}; -``` - -### 规则7.1.5 移动构造和移动赋值操作符应该是成对出现或者禁止 -在C++11中增加了move操作,如果需要某个类支持移动操作,那么需要实现移动构造和移动赋值操作符。 - -移动构造函数和移动赋值操作符都是具有移动语义的,应该同时出现或者禁止。 -```cpp -// 同时出现 -class Foo { -public: - ... - Foo(Foo&&); - Foo& operator=(Foo&&); - ... -}; - -// 同时default, C++11支持 -class Foo { -public: - Foo(Foo&&) = default; - Foo& operator=(Foo&&) = default; -}; - -// 同时禁止, 使用C++11的delete -class Foo { -public: - Foo(Foo&&) = delete; - Foo& operator=(Foo&&) = delete; -}; -``` - -### 规则7.1.6 禁止在构造函数和析构函数中调用虚函数 -说明:在构造函数和析构函数中调用当前对象的虚函数,会导致未实现多态的行为。 -在C++中,一个基类一次只构造一个完整的对象。 - -示例:类Base是基类,Sub是派生类 -```cpp -class Base { -public: - Base(); - virtual void Log() = 0; // 不同的派生类调用不同的日志文件 -}; - -Base::Base() // 基类构造函数 -{ - Log(); // 调用虚函数Log -} - -class Sub : public Base { -public: - virtual void Log(); -}; -``` - -当执行如下语句: -`Sub sub;` -会先执行Sub的构造函数,但首先调用Base的构造函数,由于Base的构造函数调用虚函数Log,此时Log还是基类的版本,只有基类构造完成后,才会完成派生类的构造,从而导致未实现多态的行为。 -同样的道理也适用于析构函数。 - -### 规则7.1.7 多态基类中的拷贝构造函数、拷贝赋值操作符、移动构造函数、移动赋值操作符必须为非public函数或者为delete函数 -如果报一个派生类对象直接赋值给基类对象,会发生切片,只拷贝或者移动了基类部分,损害了多态行为。 -【反例】 -如下代码中,基类没有定义拷贝构造函数或拷贝赋值操作符,编译器会自动生成这两个特殊成员函数, -如果派生类对象赋值给基类对象时就发生切片。可以将此例中的拷贝构造函数和拷贝赋值操作符声明为delete,编译器可检查出此类赋值行为。 -```cpp -class Base { -public: - Base() = default; - virtual ~Base() = default; - ... - virtual void Fun() { std::cout << "Base" << std::endl;} -}; - -class Derived : public Base { - ... - void Fun() override { std::cout << "Derived" << std::endl; } -}; - -void Foo(const Base &base) -{ - Base other = base; // 不符合:发生切片 - other.Fun(); // 调用的时Base类的Fun函数 -} -``` -```cpp -Derived d; -Foo(d); // 传入的是派生类对象 -``` -1. 将拷贝构造函数或者赋值操作符设置为private,并且不实现: - -## 继承 - -### 规则7.2.1 基类的析构函数应该声明为virtual,不准备被继承的类需要声明为final -说明:只有基类析构函数是virtual,通过多态调用的时候才能保证派生类的析构函数被调用。 - -示例:基类的析构函数没有声明为virtual导致了内存泄漏。 -```cpp -class Base { -public: - virtual std::string getVersion() = 0; - - ~Base() - { - std::cout << "~Base" << std::endl; - } -}; -``` - -```cpp -class Sub : public Base { -public: - Sub() : numbers_(nullptr) - { - } - - ~Sub() - { - delete[] numbers_; - std::cout << "~Sub" << std::endl; - } - - int Init() - { - const size_t numberCount = 100; - numbers_ = new (std::nothrow) int[numberCount]; - if (numbers_ == nullptr) { - return -1; - } - - ... - } - - std::string getVersion() - { - return std::string("hello!"); - } -private: - int* numbers_; -}; -``` - -```cpp -int main(int argc, char* args[]) -{ - Base* b = new Sub(); - - delete b; - return 0; -} -``` -由于基类Base的析构函数没有声明为virtual,当对象被销毁时,只会调用基类的析构函数,不会调用派生类Sub的析构函数,导致内存泄漏。 -例外: -NoCopyable、NoMovable这种没有任何行为,仅仅用来做标识符的类,可以不定义虚析构也不定义final。 - -### 规则7.2.2 禁止虚函数使用缺省参数值 -说明:在C++中,虚函数是动态绑定的,但函数的缺省参数却是在编译时就静态绑定的。这意味着你最终执行的函数是一个定义在派生类,但使用了基类中的缺省参数值的虚函数。为了避免虚函数重载时,因参数声明不一致给使用者带来的困惑和由此导致的问题,规定所有虚函数均不允许声明缺省参数值。 -示例:虚函数display缺省参数值text是由编译时刻决定的,而非运行时刻,没有达到多态的目的: -```cpp -class Base { -public: - virtual void Display(const std::string& text = "Base!") - { - std::cout << text << std::endl; - } - - virtual ~Base(){} -}; - -class Sub : public Base { -public: - virtual void Display(const std::string& text = "Sub!") - { - std::cout << text << std::endl; - } - - virtual ~Sub(){} -}; - -int main() -{ - Base* base = new Sub(); - Sub* sub = new Sub(); - - ... - - base->Display(); // 程序输出结果: Base! 而期望输出:Sub! - sub->Display(); // 程序输出结果: Sub! - - delete base; - delete sub; - return 0; -}; -``` - -### 规则7.2.3 禁止重新定义继承而来的非虚函数 -说明:因为非虚函数无法实现动态绑定,只有虚函数才能实现动态绑定:只要操作基类的指针,即可获得正确的结果。 - -示例: -```cpp -class Base { -public: - void Fun(); -}; - -class Sub : public Base { -public: - void Fun(); -}; - -Sub* sub = new Sub(); -Base* base = sub; - -sub->Fun(); // 调用子类的Fun -base->Fun(); // 调用父类的Fun -//... - -``` - -## 多重继承 -在实际开发过程中使用多重继承的场景是比较少的,因为多重继承使用过程中有下面的典型问题: -1. 菱形继承所带来的数据重复,以及名字二义性。因此,C++引入了virtual继承来解决这类问题; -2. 即便不是菱形继承,多个父类之间的名字也可能存在冲突,从而导致的二义性; -3. 如果子类需要扩展或改写多个父类的方法时,造成子类的职责不明,语义混乱; -4. 相对于委托,继承是一种白盒复用,即子类可以访问父类的protected成员, 这会导致更强的耦合。而多重继承,由于耦合了多个父类,相对于单根继承,这会产生更强的耦合关系。 - -多重继承具有下面的优点: -多重继承提供了一种更简单的组合来实现多种接口或者类的组装与复用。 - -所以,对于多重继承的只有下面几种情况下面才允许使用多重继承。 - -### 建议7.3.1 使用多重继承来实现接口分离与多角色组合 -如果某个类需要实现多重接口,可以通过多重继承把多个分离的接口组合起来,类似 scala 语言的 traits 混入。 - -```cpp -class Role1 {}; -class Role2 {}; -class Role3 {}; - -class Object1 : public Role1, public Role2 { - // ... -}; - -class Object2 : public Role2, public Role3 { - // ... -}; - -``` - -在C++标准库中也有类似的实现样例: -```cpp -class basic_istream {}; -class basic_ostream {}; - -class basic_iostream : public basic_istream, public basic_ostream { - -}; -``` - -## 重载 - -重载操作符要有充分理由,而且不要改变操作符原有语义,例如不要使用 ‘+’ 操作符来做减运算。 -操作符重载令代码更加直观,但也有一些不足: -- 混淆直觉,误以为该操作和内建类型一样是高性能的,忽略了性能降低的可能; -- 问题定位时不够直观,按函数名查找比按操作符显然更方便。 -- 重载操作符如果行为定义不直观(例如将‘+’ 操作符来做减运算),会让代码产生混淆。 -- 赋值操作符的重载引入的隐式转换会隐藏很深的bug。可以定义类似Equals()、CopyFrom()等函数来替代=,==操作符。 - - - -# 8 函数 -## 函数设计 -### 规则8.1.1 避免函数过长,函数不超过50行(非空非注释) -函数应该可以一屏显示完 (50行以内),只做一件事情,而且把它做好。 - -过长的函数往往意味着函数功能不单一,过于复杂,或过分呈现细节,未进行进一步抽象。 - -例外:某些实现算法的函数,由于算法的聚合性与功能的全面性,可能会超过50行。 - -即使一个长函数现在工作的非常好, 一旦有人对其修改, 有可能出现新的问题, 甚至导致难以发现的bug。 -建议将其拆分为更加简短并易于管理的若干函数,以便于他人阅读和修改代码。 - -## 内联函数 - -### 建议8.2.1 内联函数不超过10行(非空非注释) -**说明**:内联函数具有一般函数的特性,它与一般函数不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。 - -内联函数只适合于只有 1~10 行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,也没有必要用内联函数实现,一般的编译器会放弃内联方式,而采用普通的方式调用函数。 - -如果内联函数包含复杂的控制结构,如循环、分支(switch)、try-catch 等语句,一般编译器将该函数视同普通函数。 -**虚函数、递归函数不能被用来做内联函数**。 - -## 函数参数 - -### 建议8.3.1 函数参数使用引用取代指针 - -**说明**:引用比指针更安全,因为它一定非空,且一定不会再指向其他目标;引用不需要检查非法的NULL指针。 - -如果是基于老平台开发的产品,则优先顺从原有平台的处理方式。 -选择 const 避免参数被修改,让代码阅读者清晰地知道该参数不被修改,可大大增强代码可读性。 - -例外:当传入参数为编译期长度未知的数组时,可以使用指针而不是引用。 - -### 建议8.3.2 使用强类型参数,避免使用void* -尽管不同的语言对待强类型和弱类型有自己的观点,但是一般认为c/c++是强类型语言,既然我们使用的语言是强类型的,就应该保持这样的风格。 -好处是尽量让编译器在编译阶段就检查出类型不匹配的问题。 - -使用强类型便于编译器帮我们发现错误,如下代码中注意函数 FooListAddNode 的使用: -```cpp -struct FooNode { - struct List link; - int foo; -}; - -struct BarNode { - struct List link; - int bar; -} - -void FooListAddNode(void *node) // Bad: 这里用 void * 类型传递参数 -{ - FooNode *foo = (FooNode *)node; - ListAppend(&g_FooList, &foo->link); -} - -void MakeTheList() -{ - FooNode *foo = nullptr; - BarNode *bar = nullptr; - ... - - FooListAddNode(bar); // Wrong: 这里本意是想传递参数 foo,但错传了 bar,却没有报错 -} -``` - -1. 可以使用模板函数来实现参数类型的变化。 -2. 可以使用基类指针来实现多态。 - -### 建议8.3.3 函数的参数个数不超过5个 -函数的参数过多,会使得该函数易于受外部变化的影响,从而影响维护工作。函数的参数过多同时也会增大测试的工作量。 - -如果超过可以考虑: -- 看能否拆分函数 -- 看能否将相关参数合在一起,定义结构体 - -# 9 C++其他特性 - -## 常量与初始化 - -不变的值更易于理解、跟踪和分析,所以应该尽可能地使用常量代替变量,定义值的时候,应该把const作为默认的选项。 - -### 规则9.1.1 不允许使用宏来表示常量 - -**说明**:宏是简单的文本替换,在预处理阶段时完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名;宏没有类型检查,不安全;宏没有作用域。 - -```cpp -#define MAX_MSISDN_LEN 20 // 不好 - -// C++请使用const常量 -const int MAX_MSISDN_LEN = 20; // 好 - -// 对于C++11以上版本,可以使用constexpr -constexpr int MAX_MSISDN_LEN = 20; -``` - -### 建议9.1.1 一组相关的整型常量应定义为枚举 - -**说明**:枚举比`#define`或`const int`更安全。编译器会检查参数值是否位于枚举取值范围内,避免错误发生。 - -```cpp -// 好的例子: -enum Week { - SUNDAY, - MONDAY, - TUESDAY, - WEDNESDAY, - THURSDAY, - FRIDAY, - SATURDAY -}; - -enum Color { - RED, - BLACK, - BLUE -}; - -void ColorizeCalendar(Week today, Color color); - -ColorizeCalendar(BLUE, SUNDAY); // 编译报错,参数类型错误 - -// 不好的例子: -const int SUNDAY = 0; -const int MONDAY = 1; - -const int BLACK = 0; -const int BLUE = 1; - -bool ColorizeCalendar(int today, int color); -ColorizeCalendar(BLUE, SUNDAY); // 不会报错 -``` - -当枚举值需要对应到具体数值时,须在声明时显式赋值。否则不需要显式赋值,以避免重复赋值,降低维护(增加、删除成员)工作量。 - -```cpp -// 好的例子:S协议里定义的设备ID值,用于标识设备类型 -enum DeviceType { - DEV_UNKNOWN = -1, - DEV_DSMP = 0, - DEV_ISMG = 1, - DEV_WAPPORTAL = 2 -}; -``` - -程序内部使用,仅用于分类的情况,不应该进行显式的赋值。 - -```cpp -// 好的例子:程序中用来标识会话状态的枚举定义 -enum SessionState { - INIT, - CLOSED, - WAITING_FOR_RESPONSE -}; -``` - -应当尽量避免枚举值重复,如必须重复也要用已定义的枚举来修饰 - -```cpp -enum RTCPType { - RTCP_SR = 200, - RTCP_MIN_TYPE = RTCP_SR, - RTCP_RR = 201, - RTCP_SDES = 202, - RTCP_BYE = 203, - RTCP_APP = 204, - RTCP_RTPFB = 205, - RTCP_PSFB = 206, - RTCP_XR = 207, - RTCP_RSI = 208, - RTCP_PUBPORTS = 209, - RTCP_MAX_TYPE = RTCP_PUBPORTS -}; -``` - -### 规则9.1.2 不允许使用魔鬼数字 -所谓魔鬼数字即看不懂、难以理解的数字。 - -魔鬼数字并非一个非黑即白的概念,看不懂也有程度,需要自行判断。 -例如数字 12,在不同的上下文中情况是不一样的: -type = 12; 就看不懂,但 `monthsCount = yearsCount * 12`; 就能看懂。 -数字 0 有时候也是魔鬼数字,比如 `status = 0`; 并不能表达是什么状态。 - -解决途径: -对于局部使用的数字,可以增加注释说明 -对于多处使用的数字,必须定义 const 常量,并通过符号命名自注释。 - -禁止出现下列情况: -没有通过符号来解释数字含义,如` const int ZERO = 0` -符号命名限制了其取值,如 `const int XX_TIMER_INTERVAL_300MS = 300`,直接使用`XX_TIMER_INTERVAL_MS`来表示该常量是定时器的时间间隔。 - -### 规则9.1.3 常量应该保证单一职责 - -**说明**:一个常量只用来表示一个特定功能,即一个常量不能有多种用途。 - -```cpp -// 好的例子:协议A和协议B,手机号(MSISDN)的长度都是20。 -const unsigned int A_MAX_MSISDN_LEN = 20; -const unsigned int B_MAX_MSISDN_LEN = 20; - -// 或者使用不同的名字空间: -namespace Namespace1 { - const unsigned int MAX_MSISDN_LEN = 20; -} - -namespace Namespace2 { - const unsigned int MAX_MSISDN_LEN = 20; -} -``` - -### 规则9.1.4 禁止用memcpy_s、memset_s初始化非POD对象 - -**说明**:`POD`全称是`Plain Old Data`,是C++ 98标准(ISO/IEC 14882, first edition, 1998-09-01)中引入的一个概念,`POD`类型主要包括`int`, `char`, `float`,`double`,`enumeration`,`void`,指针等原始类型以及聚合类型,不能使用封装和面向对象特性(如用户定义的构造/赋值/析构函数、基类、虚函数等)。 - -由于非POD类型比如非聚合类型的class对象,可能存在虚函数,内存布局不确定,跟编译器有关,滥用内存拷贝可能会导致严重的问题。 - -即使对聚合类型的class,使用直接的内存拷贝和比较,破坏了信息隐蔽和数据保护的作用,也不提倡`memcpy_s`、`memset_s`操作。 - -对于POD类型的详细说明请参见附录。 - -### 建议9.1.2 变量使用时才声明并初始化 - -**说明**:变量在使用前未赋初值,是常见的低级编程错误。使用前才声明变量并同时初始化,非常方便地避免了此类低级错误。 - -在函数开始位置声明所有变量,后面才使用变量,作用域覆盖整个函数实现,容易导致如下问题: -* 程序难以理解和维护:变量的定义与使用分离。 -* 变量难以合理初始化:在函数开始时,经常没有足够的信息进行变量初始化,往往用某个默认的空值(比如零)来初始化,这通常是一种浪费,如果变量在被赋于有效值以前使用,还会导致错误。 - -遵循变量作用域最小化原则与就近声明原则, 使得代码更容易阅读,方便了解变量的类型和初始值。特别是,应使用初始化的方式替代声明再赋值。 - -```cpp -// 不好的例子:声明与初始化分离 -string name; // 声明时未初始化:调用缺省构造函数 -name = "zhangsan"; // 再次调用赋值操作符函数;声明与定义在不同的地方,理解相对困难 - -// 好的例子:声明与初始化一体,理解相对容易 -string name("zhangsan"); // 调用构造函数 -``` - - -## 表达式 -### 规则9.2.1 含有变量自增或自减运算的表达式中禁止再次引用该变量 -含有变量自增或自减运算的表达式中,如果再引用该变量,其结果在C++标准中未明确定义。各个编译器或者同一个编译器不同版本实现可能会不一致。 -为了更好的可移植性,不应该对标准未定义的运算次序做任何假设。 - -注意,运算次序的问题不能使用括号来解决,因为这不是优先级的问题。 - -示例: -```cpp -x = b[i] + i++; // Bad: b[i]运算跟 i++,先后顺序并不明确。 -``` -正确的写法是将自增或自减运算单独放一行: -```cpp -x = b[i] + i; -i++; // Good: 单独一行 -``` - -函数参数 -```cpp -Func(i++, i); // Bad: 传递第2个参数时,不确定自增运算有没有发生 -``` - -正确的写法 -```cpp -i++; // Good: 单独一行 -x = Func(i, i); -``` - -### 规则9.2.2 switch语句要有default分支 -大部分情况下,switch语句中要有default分支,保证在遗漏case标签处理时能够有一个缺省的处理行为。 - -特例: -如果switch条件变量是枚举类型,并且 case 分支覆盖了所有取值,则加上default分支处理有些多余。 -现代编译器都具备检查是否在switch语句中遗漏了某些枚举值的case分支的能力,会有相应的warning提示。 - -```cpp -enum Color { - RED = 0, - BLUE -}; - -// 因为switch条件变量是枚举值,这里可以不用加default处理分支 -switch (color) { - case RED: - DoRedThing(); - break; - case BLUE: - DoBlueThing(); - ... - break; -} -``` - -### 建议9.2.1 表达式的比较,应当遵循左侧倾向于变化、右侧倾向于不变的原则 -当变量与常量比较时,如果常量放左边,如 if (MAX == v) 不符合阅读习惯,而 if (MAX > v) 更是难于理解。 -应当按人的正常阅读、表达习惯,将常量放右边。写成如下方式: -```cpp -if (value == MAX) { - -} - -if (value < MAX) { - -} -``` -也有特殊情况,如:`if (MIN < value && value < MAX)` 用来描述区间时,前半段是常量在左的。 - -不用担心将 '==' 误写成 '=',因为` if (value = MAX)` 会有编译告警,其他静态检查工具也会报错。让工具去解决笔误问题,代码要符合可读性第一。 - -### 建议9.2.2 使用括号明确操作符的优先级 -使用括号明确操作符的优先级,防止因默认的优先级与设计思想不符而导致程序出错;同时使得代码更为清晰可读,然而过多的括号会分散代码使其降低了可读性。下面是如何使用括号的建议。 - -- 二元及以上操作符, 如果涉及多种操作符,则应该使用括号 -```cpp -x = a + b + c; /* 操作符相同,可以不加括号 */ -x = Foo(a + b, c); /* 逗号两边的表达式,不需要括号 */ -x = 1 << (2 + 3); /* 操作符不同,需要括号 */ -x = a + (b / 5); /* 操作符不同,需要括号 */ -x = (a == b) ? a : (a – b); /* 操作符不同,需要括号 */ -``` - - -## 类型转换 - -避免使用类型分支来定制行为:类型分支来定制行为容易出错,是企图用C++编写C代码的明显标志。这是一种很不灵活的技术,要添加新类型时,如果忘记修改所有分支,编译器也不会告知。使用模板和虚函数,让类型自己而不是调用它们的代码来决定行为。 - -建议避免类型转换,我们在代码的类型设计上应该考虑到每种数据的数据类型是什么,而不是应该过度使用类型转换来解决问题。在设计某个基本类型的时候,请考虑: -- 是无符号还是有符号的 -- 是适合float还是double -- 是使用int8,int16,int32还是int64,确定整形的长度 - -但是我们无法禁止使用类型转换,因为C++语言是一门面向机器编程的语言,涉及到指针地址,并且我们会与各种第三方或者底层API交互,他们的类型设计不一定是合理的,在这个适配的过程中很容易出现类型转换。 - -例外:在调用某个函数的时候,如果我们不想处理函数结果,首先要考虑这个是否是你的最好的选择。如果确实不想处理函数的返回值,那么可以使用(void)转换来解决。 - -### 规则9.3.1 如果确定要使用类型转换,请使用由C++提供的类型转换,而不是C风格的类型转换 - -**说明**: - -C++提供的类型转换操作比C风格更有针对性,更易读,也更加安全,C++提供的转换有: -- 类型转换: -1. `dynamic_cast`:主要用于继承体系下行转换,`dynamic_cast`具有类型检查的功能,请做好基类和派生类的设计,避免使用dynamic_cast来进行转换。 -2. `static_cast`:和C风格转换相似可做值的强制转换,或上行转换(把派生类的指针或引用转换成基类的指针或引用)。该转换经常用于消除多重继承带来的类型歧义,是相对安全的。如果是纯粹的算数转换,那么请使用后面的大括号转换方式。 -3. `reinterpret_cast`:用于转换不相关的类型。`reinterpret_cast`强制编译器将某个类型对象的内存重新解释成另一种类型,这是一种不安全的转换,建议尽可能少用`reinterpret_cast`。 -4. `const_cast`:用于移除对象的`const`属性,使对象变得可修改,这样会破坏数据的不变性,建议尽可能少用。 - -- 算数转换: (C++11开始支持) - 对于那种算数转换,并且类型信息没有丢失的,比如float到double, int32到int64的转换,推荐使用大括号的初始方式。 -```cpp - double d{ someFloat }; - int64_t i{ someInt32 }; -``` - -### 建议9.3.1 避免使用`dynamic_cast` -1. `dynamic_cast`依赖于C++的RTTI, 让程序员在运行时识别C++类对象的类型。 -2. `dynamic_cast`的出现一般说明我们的基类和派生类设计出现了问题,派生类破坏了基类的契约,不得不通过`dynamic_cast`转换到子类进行特殊处理,这个时候更希望来改善类的设计,而不是通过`dynamic_cast`来解决问题。 - -### 建议9.3.2 避免使用`reinterpret_cast` - -**说明**:`reinterpret_cast`用于转换不相关类型。尝试用`reinterpret_cast`将一种类型强制转换另一种类型,这破坏了类型的安全性与可靠性,是一种不安全的转换。不同类型之间尽量避免转换。 - -### 建议9.3.3 避免使用`const_cast` - -**说明**:`const_cast`用于移除对象的`const`和`volatile`性质。 - -使用const_cast转换后的指针或者引用来修改const对象,行为是未定义的。 - -```cpp -// 不好的例子 -const int i = 1024; -int* p = const_cast(&i); -*p = 2048; // 未定义行为 -``` - -```cpp -// 不好的例子 -class Foo { -public: - Foo() : i(3) {} - - void Fun(int v) - { - i = v; - } - -private: - int i; -}; - -int main(void) -{ - const Foo f; - Foo* p = const_cast(&f); - p->Fun(8); // 未定义行为 -} - -``` - - -## 资源分配和释放 - -### 规则9.4.1 单个对象释放使用delete,数组对象释放使用delete [] -说明:单个对象删除使用delete, 数组对象删除使用delete [],原因: - -- 调用new所包含的动作:从系统中申请一块内存,并调用此类型的构造函数。 -- 调用new[n]所包含的动作:申请可容纳n个对象的内存,并且对每一个对象调用其构造函数。 -- 调用delete所包含的动作:先调用相应的析构函数,再将内存归还系统。 -- 调用delete[]所包含的动作:对每一个对象调用析构函数,再释放所有内存 - -如果new和delete的格式不匹配,结果是未知的。对于非class类型, new和delete不会调用构造与析构函数。 - -错误写法: -```cpp -const int MAX_ARRAY_SIZE = 100; -int* numberArray = new int[MAX_ARRAY_SIZE]; -... -delete numberArray; -numberArray = nullptr; -``` - -正确写法: -```cpp -const int MAX_ARRAY_SIZE = 100; -int* numberArray = new int[MAX_ARRAY_SIZE]; -... -delete[] numberArray; -numberArray = nullptr; -``` - -### 建议9.4.1 使用 RAII 特性来帮助追踪动态分配 - -说明:RAII是“资源获取就是初始化”的缩语(Resource Acquisition Is Initialization),是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 - -RAII 的一般做法是这样的:在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。这种做法有两大好处: -- 我们不需要显式地释放资源。 -- 对象所需的资源在其生命期内始终保持有效。这样,就不必检查资源有效性的问题,可以简化逻辑、提高效率。 - - -示例:使用RAII不需要显式地释放互斥资源。 - -```cpp -class LockGuard { -public: - LockGuard(const LockType& lockType): lock_(lockType) - { - lock_.Aquire(); - } - - ~LockGuard() - { - lock_.Relase(); - } - -private: - LockType lock_; -}; - - -bool Update() -{ - LockGuard lockGuard(mutex); - if (...) { - return false; - } else { - // 操作数据 - } - - return true; -} -``` - -## 标准库 - -STL标准模板库在不同产品使用程度不同,这里列出一些基本规则和建议,供各团队参考。 - -### 规则9.5.1 不要保存std::string的c_str()返回的指针 - -说明:在C++标准中并未规定string::c_str()指针持久有效,因此特定STL实现完全可以在调用string::c_str()时返回一个临时存储区并很快释放。所以为了保证程序的可移植性,不要保存string::c_str()的结果,而是在每次需要时直接调用。 - -示例: - -```cpp -void Fun1() -{ - std::string name = "demo"; - const char* text = name.c_str(); // 表达式结束以后,name的生命周期还在,指针有效 - - // 如果中间调用了string的非const成员函数,导致string被修改,比如operator[], begin()等 - // 可能会导致text的内容不可用,或者不是原来的字符串 - name = "test"; - name[1] = '2'; - - // 后续使用text指针,其字符串内容不再是"demo" -} - -void Fun2() -{ - std::string name = "demo"; - std::string test = "test"; - const char* text = (name + test).c_str(); // 表达式结束以后,+号产生的临时对象被销毁,指针无效 - - // 后续使用text指针,其已不再指向合法内存空间 -} -``` -例外:在少数对性能要求非常高的代码中,为了适配已有的只接受const char*类型入参的函数,可以临时保存string::c_str()返回的指针。但是必须严格保证string对象的生命周期长于所保存指针的生命周期,并且保证在所保存指针的生命周期内,string对象不会被修改。 - - -### 建议9.5.1 使用std::string代替char* - -说明:使用string代替`char*`有很多优势,比如: -1. 不用考虑结尾的’\0’; -2. 可以直接使用+, =, ==等运算符以及其它字符串操作函数; -3. 不需要考虑内存分配操作,避免了显式的new/delete,以及由此导致的错误; - -需要注意的是某些stl实现中string是基于写时复制策略的,这会带来2个问题,一是某些版本的写时复制策略没有实现线程安全,在多线程环境下会引起程序崩溃;二是当与动态链接库相互传递基于写时复制策略的string时,由于引用计数在动态链接库被卸载时无法减少可能导致悬挂指针。因此,慎重选择一个可靠的stl实现对于保证程序稳定是很重要的。 - -例外: -当调用系统或者其它第三方库的API时,针对已经定义好的接口,只能使用`char*`。但是在调用接口之前都可以使用string,在调用接口时使用string::c_str()获得字符指针。 -当在栈上分配字符数组当作缓冲区使用时,可以直接定义字符数组,不要使用string,也没有必要使用类似`vector`等容器。 - -### 规则9.5.2 禁止使用auto_ptr -说明:在stl库中的std::auto_ptr具有一个隐式的所有权转移行为,如下代码: -```cpp -auto_ptr p1(new T); -auto_ptr p2 = p1; -``` -当执行完第2行语句后,p1已经不再指向第1行中分配的对象,而是变为nullptr。正因为如此,auto_ptr不能被置于各种标准容器中。 -转移所有权的行为通常不是期望的结果。对于必须转移所有权的场景,也不应该使用隐式转移的方式。这往往需要程序员对使用auto_ptr的代码保持额外的谨慎,否则出现对空指针的访问。 -使用auto_ptr常见的有两种场景,一是作为智能指针传递到产生auto_ptr的函数外部,二是使用auto_ptr作为RAII管理类,在超出auto_ptr的生命周期时自动释放资源。 -对于第1种场景,可以使用std::shared_ptr来代替。 -对于第2种场景,可以使用C++11标准中的std::unique_ptr来代替。其中std::unique_ptr是std::auto_ptr的代替品,支持显式的所有权转移。 - -例外: -在C++11标准得到普遍使用之前,在一定需要对所有权进行转移的场景下,可以使用std::auto_ptr,但是建议对std::auto_ptr进行封装,并禁用封装类的拷贝构造函数和赋值运算符,以使该封装类无法用于标准容器。 - - -### 建议9.5.2 使用新的标准头文件 - -说明: -使用C++的标准头文件时,请使用``这样的,而不是``这种的。 - -## const的用法 -在声明的变量或参数前加上关键字 const 用于指明变量值不可被篡改 (如 `const int foo` ). 为类中的函数加上 const 限定符表明该函数不会修改类成员变量的状态 (如 `class Foo { int Bar(char c) const; };`)。 const 变量, 数据成员, 函数和参数为编译时类型检测增加了一层保障, 便于尽早发现错误。因此, 我们强烈建议在任何可能的情况下使用 const。 -有时候,使用C++11的constexpr来定义真正的常量可能更好。 - -### 规则9.6.1 对于指针和引用类型的形参,如果是不需要修改的,请使用const -不变的值更易于理解/跟踪和分析,把const作为默认选项,在编译时会对其进行检查,使代码更牢固/更安全。 -```cpp -class Foo; - -void PrintFoo(const Foo& foo); -``` - -### 规则9.6.2 对于不会修改成员变量的成员函数请使用const修饰 -尽可能将成员函数声明为 const。 访问函数应该总是 const。只要不修改数据成员的成员函数,都声明为const。 -对于虚函数,应当从设计意图上考虑继承链上的所有类是否需要在此虚函数中修改数据成员,而不是仅关注单个类的实现。 -```cpp -class Foo { -public: - - // ... - - int PrintValue() const // const修饰成员函数,不会修改成员变量 - { - std::cout << value_ << std::endl; - } - - int GetValue() const // const修饰成员函数,不会修改成员变量 - { - return value_; - } - -private: - int value_; -}; -``` - -### 建议9.6.1 初始化后不会再修改的成员变量定义为const - -```cpp -class Foo { -public: - Foo(int length) : dataLength_(length) {} -private: - const int dataLength_; -}; -``` - -## 异常 - -### 建议9.7.1 C++11中,如果函数不会抛出异常,声明为`noexcept` -**理由** -1. 如果函数不会抛出异常,声明为`noexcept`可以让编译器最大程度的优化函数,如减少执行路径,提高错误退出的效率。 -2. `vector`等STL容器,为了保证接口的健壮性,如果保存元素的`move运算符`没有声明为`noexcept`,则在容器扩张搬移元素时不会使用`move机制`,而使用`copy机制`,带来性能损失的风险。如果一个函数不能抛出异常,或者一个程序并没有截获某个函数所抛出的异常并进行处理,那么这个函数可以用新的`noexcept`关键字对其进行修饰,表示这个函数不会抛出异常或者抛出的异常不会被截获并处理。例如: - -```cpp -extern "C" double sqrt(double) noexcept; // 永远不会抛出异常 - -// 即使可能抛出异常,也可以使用 noexcept -// 这里不准备处理内存耗尽的异常,简单地将函数声明为noexcept -std::vector MyComputation(const std::vector& v) noexcept -{ - std::vector res = v; // 可能会抛出异常 - // do something - return res; -} -``` - -**示例** - -```cpp -RetType Function(Type params) noexcept; // 最大的优化 -RetType Function(Type params); // 更少的优化 - -// std::vector 的 move 操作需要声明 noexcept -class Foo1 { -public: - Foo1(Foo1&& other); // no noexcept -}; - -std::vector a1; -a1.push_back(Foo1()); -a1.push_back(Foo1()); // 触发容器扩张,搬移已有元素时调用copy constructor - -class Foo2 { -public: - Foo2(Foo2&& other) noexcept; -}; - -std::vector a2; -a2.push_back(Foo2()); -a2.push_back(Foo2()); // 触发容器扩张,搬移已有元素时调用move constructor -``` - -**注意** -默认构造函数、析构函数、`swap`函数,`move操作符`都不应该抛出异常。 - -## 模板与泛型编程 - -### 规则9.8.1 禁止在OpenHarmony项目中进行泛型编程 -泛型编程和面向对象编程的思想、理念以及技巧完全不同,OpenHarmony项目主流使用面向对象的思想。 - -C++提供了强大的泛型编程的机制,能够实现非常灵活简洁的类型安全的接口,实现类型不同但是行为相同的代码复用。 - -但是C++泛型编程存在以下缺点: - -1. 对泛型编程不很熟练的人,常常会将面向对象的逻辑写成模板、将不依赖模板参数的成员写在模板中等等导致逻辑混乱代码膨胀诸多问题。 -2. 模板编程所使用的技巧对于使用c++不是很熟练的人是比较晦涩难懂的。在复杂的地方使用模板的代码让人更不容易读懂,并且debug 和维护起来都很麻烦。 -3. 模板编程经常会导致编译出错的信息非常不友好: 在代码出错的时候, 即使这个接口非常的简单, 模板内部复杂的实现细节也会在出错信息显示. 导致这个编译出错信息看起来非常难以理解。 -4. 模板如果使用不当,会导致运行时代码过度膨胀。 -5. 模板代码难以修改和重构。模板的代码会在很多上下文里面扩展开来, 所以很难确认重构对所有的这些展开的代码有用。 - -所以,OpenHarmony大部分部件禁止模板编程,仅有 __少数部件__ 可以使用泛型编程,并且开发的模板要有详细的注释。 -例外: -1. stl适配层可以使用模板 - -## 宏 -在C++语言中,我们强烈建议尽可能少使用复杂的宏 -- 对于常量定义,请按照前面章节所述,使用const或者枚举; -- 对于宏函数,尽可能简单,并且遵循下面的原则,并且优先使用内联函数,模板函数等进行替换。 - -```cpp -// 不推荐使用宏函数 -#define SQUARE(a, b) ((a) * (b)) - -// 请使用模板函数,内联函数等来替换。 -template T Square(T a, T b) { return a * b; } -``` - -如果需要使用宏,请参考C语言规范的相关章节。 -**例外**:一些通用且成熟的应用,如:对 new, delete 的封装处理,可以保留对宏的使用。 - -# 10 现代C++特性 - -随着 ISO 在2011年发布 C++11 语言标准,以及2017年3月发布 C++17 ,现代C++(C++11/14/17等)增加了大量提高编程效率、代码质量的新语言特性和标准库。 -本章节描述了一些可以帮助团队更有效率的使用现代C++,规避语言陷阱的指导意见。 - -## 代码简洁性和安全性提升 -### 建议10.1.1 合理使用`auto` -**理由** - -* `auto`可以避免编写冗长、重复的类型名,也可以保证定义变量时初始化。 -* `auto`类型推导规则复杂,需要仔细理解。 -* 如果能够使代码更清晰,继续使用明确的类型,且只在局部变量使用`auto`。 - -**示例** - -```cpp -// 避免冗长的类型名 -std::map::iterator iter = m.find(val); -auto iter = m.find(val); - -// 避免重复类型名 -class Foo {...}; -Foo* p = new Foo; -auto p = new Foo; - -// 保证初始化 -int x; // 编译正确,没有初始化 -auto x; // 编译失败,必须初始化 -``` - -auto 的类型推导可能导致困惑: - -```cpp -auto a = 3; // int -const auto ca = a; // const int -const auto& ra = a; // const int& -auto aa = ca; // int, 忽略 const 和 reference -auto ila1 = { 10 }; // std::initializer_list -auto ila2{ 10 }; // std::initializer_list - -auto&& ura1 = x; // int& -auto&& ura2 = ca; // const int& -auto&& ura3 = 10; // int&& - -const int b[10]; -auto arr1 = b; // const int* -auto& arr2 = b; // const int(&)[10] -``` - -如果没有注意 `auto` 类型推导时忽略引用,可能引入难以发现的性能问题: - -```cpp -std::vector v; -auto s1 = v[0]; // auto 推导为 std::string,拷贝 v[0] -``` - -如果使用`auto`定义接口,如头文件中的常量,可能因为开发人员修改了值,而导致类型发生变化。 - -### 规则10.1.1 在重写虚函数时请使用`override`或`final`关键字 -**理由** -`override`和`final`关键字都能保证函数是虚函数,且重写了基类的虚函数。如果子类函数与基类函数原型不一致,则产生编译告警。`final`还保证虚函数不会再被子类重写。 - -使用`override`或`final`关键字后,如果修改了基类虚函数原型,但忘记修改子类重写的虚函数,在编译期就可以发现。也可以避免有多个子类时,重写虚函数的修改遗漏。 - -**示例** - -```cpp -class Base { -public: - virtual void Foo(); - virtual void Foo(int var); - void Bar(); -}; - -class Derived : public Base { -public: - void Foo() const override; // 编译失败: Derived::Foo 和 Base::Foo 原型不一致,不是重写 - void Foo() override; // 正确: Derived::Foo 重写 Base::Foo - void Foo(int var) final; // 正确: Derived::Foo(int) 重写 Base::Foo(int),且Derived的派生类不能再重写此函数 - void Bar() override; // 编译失败: Base::Bar 不是虚函数 -}; -``` - -**总结** -1. 基类首次定义虚函数,使用`virtual`关键字 -2. 子类重写基类虚函数(包括析构函数),使用`override`或`final`关键字(但不要两者一起使用),并且不使用`virtual`关键字 -3. 非虚函数,`virtual`、`override`和`final`都不使用 - -### 规则10.1.2 使用`delete`关键字删除函数 -**理由** -相比于将类成员函数声明为`private`但不实现,`delete`关键字更明确,且适用范围更广。 - -**示例** - -```cpp -class Foo { -private: - // 只看头文件不知道拷贝构造是否被删除 - Foo(const Foo&); -}; - -class Foo { -public: - // 明确删除拷贝赋值函数 - Foo& operator=(const Foo&) = delete; -}; -``` - -`delete`关键字还支持删除非成员函数 - -```cpp -template -void Process(T value); - -template<> -void Process(void) = delete; -``` - -### 规则10.1.3 使用`nullptr`,而不是`NULL`或`0` -**理由** -长期以来,C++没有一个代表空指针的关键字,这是一件很尴尬的事: - -```cpp -#define NULL ((void *)0) - -char* str = NULL; // 错误: void* 不能自动转换为 char* - -void(C::*pmf)() = &C::Func; -if (pmf == NULL) {} // 错误: void* 不能自动转换为指向成员函数的指针 -``` - -如果把`NULL`被定义为`0`或`0L`。可以解决上面的问题。 - -或者在需要空指针的地方直接使用`0`。但这引入另一个问题,代码不清晰,特别是使用`auto`自动推导: - -```cpp -auto result = Find(id); -if (result == 0) { // Find() 返回的是 指针 还是 整数? - // do something -} -``` - -`0`字面上是`int`类型(`0L`是`long`),所以`NULL`和`0`都不是指针类型。 -当重载指针和整数类型的函数时,传递`NULL`或`0`都调用到整数类型重载的函数: - -```cpp -void F(int); -void F(int*); - -F(0); // 调用 F(int),而非 F(int*) -F(NULL); // 调用 F(int),而非 F(int*) -``` - -另外,`sizeof(NULL) == sizeof(void*)`并不一定总是成立的,这也是一个潜在的风险。 - -总结: 直接使用`0`或`0L`,代码不清晰,且无法做到类型安全;使用`NULL`无法做到类型安全。这些都是潜在的风险。 - -`nullptr`的优势不仅仅是在字面上代表了空指针,使代码清晰,而且它不再是一个整数类型。 - -`nullptr`是`std::nullptr_t`类型,而`std::nullptr_t`可以隐式的转换为所有的原始指针类型,这使得`nullptr`可以表现成指向任意类型的空指针。 - -```cpp -void F(int); -void F(int*); -F(nullptr); // 调用 F(int*) - -auto result = Find(id); -if (result == nullptr) { // Find() 返回的是 指针 - // do something -} -``` - -### 规则10.1.4 使用`using`而非`typedef` -在`C++11`之前,可以通过`typedef`定义类型的别名。没人愿意多次重复`std::map>`这样的代码。 - -```cpp -typedef std::map> SomeType; -``` - -类型的别名实际是对类型的封装。而通过封装,可以让代码更清晰,同时在很大程度上避免类型变化带来的散弹式修改。 -在`C++11`之后,提供`using`,实现`声明别名(alias declarations)`: - -```cpp -using SomeType = std::map>; -``` - -对比两者的格式: - -```cpp -typedef Type Alias; // Type 在前,还是 Alias 在前 -using Alias = Type; // 符合'赋值'的用法,容易理解,不易出错 -``` - -如果觉得这点还不足以切换到`using`,我们接着看看`模板别名(alias template)`: - -```cpp -// 定义模板的别名,一行代码 -template -using MyAllocatorVector = std::vector>; - -MyAllocatorVector data; // 使用 using 定义的别名 - -template -class MyClass { -private: - MyAllocatorVector data_; // 模板类中使用 using 定义的别名 -}; -``` - -而`typedef`不支持带模板参数的别名,只能"曲线救国": - -```cpp -// 通过模板包装 typedef,需要实现一个模板类 -template -struct MyAllocatorVector { - typedef std::vector> type; -}; - -MyAllocatorVector::type data; // 使用 typedef 定义的别名,多写 ::type - -template -class MyClass { -private: - typename MyAllocatorVector::type data_; // 模板类中使用,除了 ::type,还需要加上 typename -}; -``` - -### 规则10.1.5 禁止使用std::move操作const对象 -从字面上看,`std::move`的意思是要移动一个对象。而const对象是不允许修改的,自然也无法移动。因此用`std::move`操作const对象会给代码阅读者带来困惑。 -在实际功能上,`std::move`会把对象转换成右值引用类型;对于const对象,会将其转换成const的右值引用。由于极少有类型会定义以const右值引用为参数的移动构造函数和移动赋值操作符,因此代码实际功能往往退化成了对象拷贝而不是对象移动,带来了性能上的损失。 - -**错误示例:** -```cpp -std::string g_string; -std::vector g_stringList; - -void func() -{ - const std::string myString = "String content"; - g_string = std::move(myString); // bad:并没有移动myString,而是进行了复制 - const std::string anotherString = "Another string content"; - g_stringList.push_back(std::move(anotherString)); // bad:并没有移动anotherString,而是进行了复制 -} -``` - -## 智能指针 -### 规则10.2.1 单例、类的成员等所有机不会被多方持有的优先使用原始指针源而不是智能指针 -**理由** -智能指针会自动释放对象资源避免资源泄露,但会带额外的资源开销。如:智能指针自动生成的类、构造和析构的开销、内存占用多等。 - -单例、类的成员等对象的所有权不会被多方持有的情况,仅在类析构中释放资源即可。不应该使用智能指针而增额外的开销。 - -**示例** - -```cpp -class Foo; -class Base { -public: - Base() {} - virtual ~Base() - { - delete foo_; - } -private: - Foo* foo_ = nullptr; -}; -``` - -**例外** -1. 返回创建的对象时,需要指针销毁函数的可以使用智能指针。 -```cpp -class User; -class Foo { -public: - std::unique_ptr CreateUniqueUser() // 可使用unique_ptr保证对象的创建和释放在同一runtime - { - sptr ipcUser = iface_cast(remoter); - return std::unique_ptr(::new User(ipcUser), [](User *user) { - user->Close(); - ::delete user; - }); - } - - std::shared_ptr CreateSharedUser() // 可使用shared_ptr保证对象的创建和释放在同一runtime中 - { - sptr ipcUser = iface_cast(remoter); - return std::shared_ptr(ipcUser.GetRefPtr(), [ipcUser](User *user) mutable { - ipcUser = nullptr; - }); - } -}; -``` -2. 返回创建的对象且对象需要被多方引用时,可以使用shared_ptr。 - -### 规则10.2.2 使用`std::make_unique`而不是`new`创建`unique_ptr` -**理由** -1. `make_unique`提供了更简洁的创建方式 -2. 保证了复杂表达式的异常安全 - -**示例** - -```cpp -// 不好:两次出现 MyClass,重复导致不一致风险 -std::unique_ptr ptr(new MyClass(0, 1)); -// 好:只出现一次 MyClass,不存在不一致的可能 -auto ptr = std::make_unique(0, 1); -``` - -重复出现类型可能导致非常严重的问题,且很难发现: - -```cpp -// 编译正确,但new和delete不配套 -std::unique_ptr ptr(new uint8_t[10]); -std::unique_ptr ptr(new uint8_t); -// 非异常安全: 编译器可能按如下顺序计算参数: -// 1. 分配 Foo 的内存, -// 2. 构造 Foo, -// 3. 调用 Bar, -// 4. 构造 unique_ptr. -// 如果 Bar 抛出异常, Foo 不会被销毁,产生内存泄露。 -F(unique_ptr(new Foo()), Bar()); - -// 异常安全: 调用函数不会被打断. -F(make_unique(), Bar()); -``` - -**例外** -`std::make_unique`不支持自定义`deleter`。 -在需要自定义`deleter`的场景,建议在自己的命名空间实现定制版本的`make_unique`。 -使用`new`创建自定义`deleter`的`unique_ptr`是最后的选择。 - -### 规则10.2.4 使用`std::make_shared`而不是`new`创建`shared_ptr` -**理由** -使用`std::make_shared`除了类似`std::make_unique`一致性等原因外,还有性能的因素。 -`std::shared_ptr`管理两个实体: -* 控制块(存储引用计数,`deleter`等) -* 管理对象 - -`std::make_shared`创建`std::shared_ptr`,会一次性在堆上分配足够容纳控制块和管理对象的内存。而使用`std::shared_ptr(new MyClass)`创建`std::shared_ptr`,除了`new MyClass`会触发一次堆分配外,`std::shard_ptr`的构造函数还会触发第二次堆分配,产生额外的开销。 - -**例外** -类似`std::make_unique`,`std::make_shared`不支持定制`deleter` - -## Lambda -### 建议10.3.1 当函数不能工作时选择使用`lambda`(捕获局部变量,或编写局部函数) -**理由** -函数无法捕获局部变量或在局部范围内声明;如果需要这些东西,尽可能选择`lambda`,而不是手写的`functor`。 -另一方面,`lambda`和`functor`不会重载;如果需要重载,则使用函数。 -如果`lambda`和函数都可以的场景,则优先使用函数;尽可能使用最简单的工具。 - -**示例** - -```cpp -// 编写一个只接受 int 或 string 的函数 -// -- 重载是自然的选择 -void F(int); -void F(const string&); - -// 需要捕获局部状态,或出现在语句或表达式范围 -// -- lambda 是自然的选择 -vector v = LotsOfWork(); -for (int taskNum = 0; taskNum < max; ++taskNum) { - pool.Run([=, &v] {...}); -} -pool.Join(); -``` - -### 规则10.3.1 非局部范围使用`lambdas`,避免使用按引用捕获 -**理由** -非局部范围使用`lambdas`包括返回值,存储在堆上,或者传递给其它线程。局部的指针和引用不应该在它们的范围外存在。`lambdas`按引用捕获就是把局部对象的引用存储起来。如果这会导致超过局部变量生命周期的引用存在,则不应该按引用捕获。 - -**示例** - -```cpp -// 不好 -void Foo() -{ - int local = 42; - // 按引用捕获 local. - // 当函数返回后,local 不再存在, - // 因此 Process() 的行为未定义! - threadPool.QueueWork([&]{ Process(local); }); -} - -// 好 -void Foo() -{ - int local = 42; - // 按值捕获 local。 - // 因为拷贝,Process() 调用过程中,local 总是有效的 - threadPool.QueueWork([=]{ Process(local); }); -} -``` - -### 建议10.3.2 如果捕获`this`,则显式捕获所有变量 -**理由** -在成员函数中的`[=]`看起来是按值捕获。但因为是隐式的按值获取了`this`指针,并能够操作所有成员变量,数据成员实际是按引用捕获的,一般情况下建议避免。如果的确需要这样做,明确写出对`this`的捕获。 - -**示例** - -```cpp -class MyClass { -public: - void Foo() - { - int i = 0; - - auto Lambda = [=]() { Use(i, data_); }; // 不好: 看起来像是拷贝/按值捕获,成员变量实际上是按引用捕获 - - data_ = 42; - Lambda(); // 调用 use(42); - data_ = 43; - Lambda(); // 调用 use(43); - - auto Lambda2 = [i, this]() { Use(i, data_); }; // 好,显式指定按值捕获,最明确,最少的混淆 - } - -private: - int data_ = 0; -}; -``` - -### 建议10.3.3 避免使用默认捕获模式 -**理由** -lambda表达式提供了两种默认捕获模式:按引用(&)和按值(=)。 -默认按引用捕获会隐式的捕获所有局部变量的引用,容易导致访问悬空引用。相比之下,显式的写出需要捕获的变量可以更容易的检查对象生命周期,减小犯错可能。 -默认按值捕获会隐式的捕获this指针,且难以看出lambda函数所依赖的变量是哪些。如果存在静态变量,还会让阅读者误以为lambda拷贝了一份静态变量。 -因此,通常应当明确写出lambda需要捕获的变量,而不是使用默认捕获模式。 - -**错误示例** -```cpp -auto func() -{ - int addend = 5; - static int baseValue = 3; - - return [=]() { // 实际上只复制了addend - ++baseValue; // 修改会影响静态变量的值 - return baseValue + addend; - }; -} -``` - -**正确示例** -```cpp -auto func() -{ - int addend = 5; - static int baseValue = 3; - - return [addend, baseValue = baseValue]() mutable { // 使用C++14的捕获初始化拷贝一份变量 - ++baseValue; // 修改自己的拷贝,不会影响静态变量的值 - return baseValue + addend; - }; -} -``` - -参考:《Effective Modern C++》:Item 31: Avoid default capture modes. - -## 接口 -### 建议10.4.1 不涉及所有权的场景,使用`T*`或`T&`作为参数,而不是智能指针 -**理由** -1. 只在需要明确所有权机制时,才通过智能指针转移或共享所有权. -2. 通过智能指针传递,限制了函数调用者必须使用智能指针(如调用者希望传递`this`)。 -3. 传递共享所有权的智能指针存在运行时的开销。 - -**示例** - -```cpp -// 接受任何 int* -void F(int*); - -// 只能接受希望转移所有权的 int -void G(unique_ptr); - -// 只能接受希望共享所有权的 int -void G(shared_ptr); - -// 不改变所有权,但需要特定所有权的调用者 -void H(const unique_ptr&); - -// 接受任何 int -void H(int&); - -// 不好 -void F(shared_ptr& w) -{ - // ... - Use(*w); // 只使用 w -- 完全不涉及生命周期管理 - // ... -}; -``` - diff --git a/website/docs/_posts/contribute/OpenHarmony-security-design-guide.md b/website/docs/_posts/contribute/OpenHarmony-security-design-guide.md deleted file mode 100644 index 10bf20c185c084370c1b45991cdc65538fc96fa0..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/OpenHarmony-security-design-guide.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: OpenHarmony-security-design-guide.md -permalink: /pages/extra/d44702/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# OpenHarmony安全设计规范 - -本文档主要参考业界标准和最佳实践,提供OpenHarmony安全设计规范,用于指导开发者进行设计。 - -## 1.访问通道控制 - -1-1 为了防止系统和资源被非法访问,除非标准协议约定,所有能对系统进行管理的接口,应具备接入认证机制并缺省启用。 - -**说明:**为减少系统攻击面,对于可对系统进行管理(包括配置、升级、调试等)的接口必须要启用认证机制,避免未授权的访问。 - -1-2 只保留运行维护所必须的对外通信连接,关闭不需要连接、端口。 - -**说明:**关闭不必要的通信端口,可大大降低安全威胁,是系统安全防护的基础手段。 - -## 2.应用安全 - -2-1 对于每一个需要授权访问的请求都需核实请求方的会话标识是否合法、请求方是否被授权执行此操作。 - -**说明:**避免越权访问。 - -2-2 认证处理过程在客户端实现是不可靠的,可被轻易绕过,因此对用户的最终认证处理过程必须放到服务端进行。 - -## 3.加密 - -3-1 应该使用经过验证的、安全的、公开的加密算法。 - -**说明:**算法的安全性不在于算法本身的机密性。 - -**示例:**推荐使用的密码算法: -1)分组密码算法:AES(密钥长度在128位及以上) -2)流密码算法:AES(密钥长度在128位及以上)(OFB或CTR模式) -3)非对称加密算法:RSA(推荐3072位) -4)哈希算法:SHA2(256位及以上) -5)密钥交换算法:DH(推荐3072位) -6)HMAC(基于哈希的消息验证码)算法:HMAC-SHA2 -不安全的密码算法举例如下:MD5/DES/3DES(加密传输协议TLS/SSH密码协议中避免使用3DES,非密码协议场景必须保证密钥K1≠K2≠K3)/HMAC-SHA2-256-96/HMAC-SHA1-96/HMAC-MD5/HMAC-MD5-96/SSH服务所有带CBC模式的算法/匿名算法套件/DH512/DH1024/SKIPJACK/RC2/RSA(1024位及以下)/MD2/MD4/blowfish/RC4。 -3-2 除标准协议外,避免使用差错控制编码(如奇偶校验、CRC)实现完整性校验。 - -3-3 密码算法中使用到的随机数必须是密码学意义上的安全随机数。 - -**说明:**使用了不安全的随机数,容易导致密码算法的强度降低甚至算法的失效。 - -**示例:**可使用以下的安全随机数生成接口: -1) OpenSSL的RAND_bytes或RAND_priv_bytes; -2) OpenSSL FIPS模块中实现的DRBG; -3) JDK的java.security.SecureRandom; -4)类Unix平台的/dev/random文件 - -3-4 默认使用安全的密码算法,关闭或者禁用不安全的密码算法。在选择密码算法库时,应使用通过认证的或业界开源公认的或经评估认可的密码算法库。 - -**说明:**随着密码技术的发展以及计算能力的提升,一些密码算法变得不再安全,使用不安全的密码算法,有可能为用户的数据带来风险。同时非专业人员实现的密码算法,在技术上未经业界分析验证,有可能存在未知的缺陷,因此应使用通过认证的或业界开源公认的或经评估认可的密码算法库。 - -**示例:**密码算法相关示例请参考3-1。 - -3-5 使用分组密码算法时,应优先选择GCM模式。 - -3-6 使用RSA算法进行加密操作时,应优先选择OAEP填充方式。 - -**说明:**学术界和业界针对RSA的PKCS1填充方式的攻击已经比较成熟,如果不使用OAEP填充替换PKCS1填充,攻击者解密密文的难度将大大降低。 - -3-7 使用非对称运算保护数据机密性时,避免使用私钥加密敏感数据。 - -**说明:**私钥加密无法保护数据的机密性。 - -3-8 使用非对称算法时,加密和签名要使用不同的密钥对。 - -3-9 在同时需要对数据进行对称加密和数字签名时,使用先签名后加密的方式。检查程序里的密码算法函数调用次序,避免对密文的hash值进行签名(即对密文的hash值进行私钥运算)。 - -**说明:**如果对密文签名(即对密文的hash值签名),一旦攻击者可以通过网络嗅探的方式获得密文(也就可以获取密文hash值),就可以任意篡改密文消息的签名。 - -3-10 使用DH算法进行密钥协商的双方在接收到对方发送过来的“公钥”时,应判断公钥是不是0,1,p-1,p这样的特殊值并要求重新发起密钥协商。 - -**说明:**如果使用DH算法进行密钥协商的双方在接收到的对方发送的“公钥是某些特殊值“,则协商出的密钥也一定是某些已知的值。在这种情况下,攻击者可以尝试最多5个可能的密钥就可以轻易的解密密文。 - -3-11 在SSL/TLS中协议中,如使用DH/ECDH算法进行密钥协商,出于前向安全考虑,选取包含DHE或ECDHE密钥交换算法的加密套件,避免选取仅包含DH/ECDH的加密套件。 - -3-12 密码协议中不要使用截短的消息认证码。 - -**说明:**密码协议中(如TLS、SSH、IKE等),使用消息认证码(MAC)验证消息的完整性,协议标准有时支持选取截短的消息认证码。此时,消息认证码安全性也因截短而降低,如针对多种密码协议(如TLS、SSH等)的SLOTH攻击就可以利用截短哈希值构造碰撞。 - -**示例:**截短消息认证码的配置举例:SSH协议中配置HMAC-MD5-96、HMAC-SHA1-96、HMAC-SHA2-256-96 -哈希算法的标准输出长度如下,低于标准长度可视为截短: -1)SHA1/HMAC-SHA1,标准输出长度160比特 -2)SHA224/HMAC-SHA224,标准输出长度224比特 -3)SHA256/HMAC-SHA256,标准输出长度256比特 -4)SHA384/HMAC-SHA384,标准输出长度384比特 -5)SHA512/HMAC-SHA512,标准输出长度512比特 -6)SHA-512/224/HMAC-SHA-512/224,标准输出长度224比特 -7)SHA512/256/HMAC-SHA-512/256,标准输出长度256比特 - -3-13 使用HMAC保护数据完整性时,不能使用hash(key||message)或hash(message||key)的计算结果作为MAC值。 - -**说明:**攻击者可以通过在原始明文后面追加任意信息的方式篡改明文,破坏数据的完整性。 - -3-14 同一笔业务中,若既需要加密运算也需要计算MAC时,加密操作和计算MAC操作不能使用同一个对称密钥。 - -**说明:**如果加密和MAC密钥相同,一旦密钥泄露,攻击者可以有针对性的篡改机密信息。 -3-15 加密时避免使用固定的IV(如:硬编码,或固定在配置文件中)。 - -**说明:**CBC模式的随机IV值可确保相同的明文、相同的密钥加密出的密文完全不同,如果IV无法确保每次加密都不同,对于CBC模式,攻击者可以轻易的进行密文替换攻击;CBC模式之外的其他分组密码运算模式(如:OFB、CRT等),攻击者可以非常容易的解密密文。 - -3-16 密码协议中避免选择匿名认证、无加密、弱身份认证、弱密钥交换、弱对称加密算法和弱消息认证算法的加密算法套件。 - -**说明:**容易造成安全上的薄弱环节从而降低系统的安全性。 - -**示例:**匿名认证举例:TLS_DH_anon_WITH_3DES_EDE_CBC_SHA、TLS_DH_anon_WITH_AES_256_CBC_SHA -弱身份认证举例:密钥长度小于2048比特的RSA/DSA密钥 - -3-17 推荐仅选择使用ECDHE作为密钥交换算法的加密套件。 - -3-18 用于数据加解密的密钥不能硬编码在代码中,应采用根密钥等加密保护,同时根密钥也需采用适当的安全机制进行保护(如仅对部分密钥组件进行硬编码)。 - -**说明:**硬编码密钥容易被逆向分析破解。 - -3-19 功能设计中建议支持工作密钥更新方法(密钥更新方式:手动更新、自动更新等),并规定工作密钥更新规则(在线更新、离线更新、更新时间等)。 - -**说明:**密钥使用时间越长,密钥被破解的风险也越大;密钥加密的数据量越多,攻击者能够获取到密文的数据机会也越大,而对被同一个密钥加密的多个密文进行密码学分析相对比较容易,导致密钥越容易被破解;如果密钥已经泄露,那么密钥被使用的时间越久,损失越大。 - -**示例:**当密钥需要更新时,根据密钥生成的规则,重新生成新密钥,同时使用旧密钥解密已加密的数据,并使用新生成的密钥重新加密,同时销毁旧密钥;对于加密数据量很大的场景,可以考虑保留旧密钥,用于解密旧密钥加密的数据,同时使用更新后的密钥加密新数据。 - -3-20 密钥材料及密钥组件在保存时须限定其权限(如权限600或400)。 - -3-21 对于内存中的密钥,释放前应对保存密钥的内存空间填充其他值。(如:全0)。 - -## 4.敏感数据保护 - -4-1 口令等认证凭据应该加密存储并提供访问控制。 - -4-2 认证凭据不需要还原的场景,应使用PBKDF2等不可逆的算法加密,对于性能敏感且安全性要求不高的场景可使用HMAC(认证凭据,盐值)(注:认证凭据、盐值位置可以互换)。 - -**示例:**1、认证凭据使用PBKDF2算法计算口令单向哈希时,迭代次数最低1000次。 -2、盐值Salt为密码学意义上的安全随机数,由系统随机生成,盐值salt至少16字节,并按用户区分。 -3、避免使用HASH(用户名||口令)、HMAC(用户名,口令)、HASH(口令 XOR salt)。 - -4-3 敏感数据如需通过非信任网络传输,应支持安全传输通道或者将数据加密后再传输的机制。 - -4-4 对敏感数据的访问,根据风险采取适当的安全机制(如认证、授权或加密等)。包含敏感数据的文件(例如,包含敏感数据的配置文件、日志文件、个人敏感数据文件、用户口令文件、密钥文件、证书文件、驱动文件、备份文件)和其目录的权限设置应只允许文件的属主或需要访问该文件/目录的用户拥有相应的权限。 - -4-5 日志、调试信息、错误提示等中应过滤或者屏蔽认证凭据。 - -## 5.系统管理和维护安全 - -5-1 对于系统自身操作维护类的接口的登录认证场景,应综合考虑实际业务场景及风险,采取下述一种或几种保护措施,实现口令防暴力破解机制: -1)锁定帐号; -2)锁定IP; -3)登录延迟; -4)验证码; - -5-2 对于系统自身操作维护类的口令,图形界面缺省不明文显示用户键入的所有口令。 - -5-3 口令输入框不能支持口令拷出。 - -5-4 应使用合适的安全协议,不安全协议应默认关闭。 - -**示例:**安全协议举例:SSHv2/TLS1.2/TLS1.3/IPSec/SFTP/SNMPv3等协议,及其业界最新安全版本。对于流密码算法,建议使用AES的OFB和CTR模式或chacha20流加密算法替换RC4算法。 -不安全协议举例:TFTP、FTP、Telnet、SSL2.0、SSL3.0、TLS1.0、TLS1.1、SNMP v1/v2和SSHv1.x。 - -5-5 基于权限最小化原则,系统新建账号默认不授予任何权限,或者默认只指派最小权限(如:只读权限)的角色。 - -**说明:**保证当授权机制出现问题或授权机制被绕过时非法用户获得的权限也是最少的。 - -## 6.隐私保护 - -6-1 收集或使用个人数据前以及将该个人数据发送给第三方之前,应明确提示用户,并获得用户的同意。 - -**说明:**增加透明性及用户控制能力,满足GDPR等法律法规要求。 - -6-2 正常业务需要的情况下,采集、处理、存储个人数据,应根据实际安全风险提供必要的安全保护机制(如认证、权限控制、日志记录等),以防止个人数据被泄漏、丢失、破坏。 - -6-3 在说明文档中对产品涉及用户隐私的功能进行描述:该功能处理用户个人数据的目的、范围、处理方式、时限。要求使用该功能时遵从当地适用的法律法规。 - -**说明:**增加透明性,满足GDPR等法律法规要求。 - -6-4 对于所涉及的个人数据,应支持在呈现界面上(如显示界面、文件存储/导出等)进行过滤或匿名化或假名化。 - -**说明:**降低个人隐私泄露的风险。 - -6-5 为避免位置追踪,除了有明确的需求之外,不能出于故障定位等维护目的进行用户精确位置信息定位。 - -**说明:**精确位置信息非常敏感,故障定位无需精确定位。 - -6-6 收集个人数据需基于使用目的所必需,满足最小化原则。用于问题定位的日志中记录个人数据遵循最小化原则。 - -**说明:**用于问题定位的日志如果出现个人数据,会引起用户的质疑。应避免打印个人数据,如果必须打印个人数据(如调试目的),必须对个人数据进行匿名化处理。 - -6-7 涉及个人数据处理的场景,需要提供相关机制,确保数据主体能够查询、更新以及删除所有数据主体的个人数据。 - -**说明:**确保数据主体的权利。 - -## 术语说明 - -| 序号 | 术语 | 定义 | -| :--: | :----------: | ------------------------------------------------------------ | -| 1 | 认证凭据 | 认证凭据指用于证明真实性的身份而声明的私有或公共数据。常用的认证凭据有口令、预共享密钥、私钥、snmp团体字、智能卡、动态令牌卡、指纹、虹膜等。 | -| 2 | 个人数据 | 与一个身份已被识别或者身份可被识别的自然人(“数据主体”)相关的任何信息;身份可识别的自然人是指其身份可以通过诸如姓名、身份证号、位置数据等识别码或者通过一个或多个与自然人的身体、生理、精神、经济、文化或者社会身份相关的特定因素来直接或者间接地被识别。个人数据包括:自然人的email地址、电话号码、生物特征(指纹)、位置数据、IP地址、医疗信息、宗教信仰、社保号、婚姻状态等。 | -| 3 | 敏感个人数据 | 敏感个人数据是个人数据的一个重要子集,指的是涉及数据主体的最私密领域的信息或者一旦泄露可能会给数据主体造成重大不利影响的数据。包括种族、政治观点、宗教和哲学信仰、工会成员资格、基因数据、生物信息、健康和性生活状况,还包括可与自然人身份相关联的银行卡号、身份证号、护照号、口令等。敏感个人数据的处理需要更多更严格的保护措施。 | -| 4 | 敏感数据 | 敏感数据的具体范围取决于具体的应用场景,建议根据风险进行分析和判断。典型的敏感数据包括认证凭据(如口令、私钥、动态令牌卡)、加密秘钥、敏感个人数据等 | -| 5 | 数据主体 | 提供个人数据供数据控制者和处理者处理的人。数据主体能够通过个人数据识别,可以通过如姓名等直接识别也可以通过其个人数据的组合而间接识别出。 | -| 6 | 匿名化 | 是对个人数据进行不可逆改变的过程,个人数据匿名化处理后将无法直接或间接地识别数据主体或者识别需要不合理的耗费大量的时间,费用和精力。 | -| 7 | 假名化 | 为了限制通过个人数据来识别数据主体,个人数据中包含的身份信息可以被假名替代。这种替代就是假名化,假名化的两个属性是:(1)和假名相关联的其他属性不足以识别出这些属性关联的数据主体;(2)除假名分配者外,隐私相关方(例如数据控制者)在有限的努力下无法根据假名逆推出数据主体。假名化以后的数据依然属于个人数据。假名化也称作化名。 | -| 8 | 精确位置信息 | 经纬度、如GPS可以限定在几十米之内。精确位置信息的标准是能识别对应到具体的自然人的程度。 | -| 9 | 标准协议 | 本文中提及的“标准协议”指国际标准协议(如ETSI、3GPP、ITU-T等标准组织定义的标准)、区域性标准(如欧盟制定的标准)、国家行业标准(如中国工信部制定的标准)、事实行业标准(如UPnP组织定义的行业标准)。 | - diff --git a/website/docs/_posts/contribute/template/faq-template.md b/website/docs/_posts/contribute/template/faq-template.md deleted file mode 100644 index eacc167d54e94a93a196a100f7dccec09c6dc41c..0000000000000000000000000000000000000000 --- a/website/docs/_posts/contribute/template/faq-template.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: faq-template.md -permalink: /pages/extra/03f82c/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# FAQ:标题(简要描述问题关键信息) - -FAQ页面介绍开发过程中遇到的各类问题及解决方法,帮助更多开发者快速消除此类开发障碍。 - -## 简单类问题写作模板 - -简要描述在完成哪些操作时,遇到的问题现象,以及解决方法。 - -## 复杂类问题写作模板 - -**现象描述** - -- 使用的系统软件、硬件版本? -- 在完成哪些操作时,遇到了什么样的问题? - -- 可能显示什么错误消息? - -- 如果可能,请提供屏幕截图。 - - -**可能原因** - -分析哪些原因导致此问题,如果有多个原因,请使用项目列表一一列举。 - -1. XXX -2. XXX - -**处理步骤** - -- 如果有多个解决方案,请按照复杂性排序,并提供什么场景下选择哪种解决方案。 -- 如果可能,请提供屏幕截图,帮助理解步骤完成标准。 -- 代码如有打印输出,请提示打印输出内容_,帮助理解步骤完成标准_。 - -1. XXX -2. XXX - diff --git "a/website/docs/_posts/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" "b/website/docs/_posts/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" deleted file mode 100644 index 53f59a61d05109e9e2b210196e5a94de45c6d6bb..0000000000000000000000000000000000000000 --- "a/website/docs/_posts/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" +++ /dev/null @@ -1,232 +0,0 @@ ---- -title: 第三方开源软件引入指导.md -permalink: /pages/extra/2ef3d6/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# 第三方开源软件引入指导 - -## 目的 - -OpenHarmony遵从 [Open Source Definition](https://opensource.org/docs/osd) ,满足这一定义的软件,被OpenHarmony社区认同为开源软件。 -提供易用、高质量的开源软件是OpenHarmony的重要目标,因第三方开源软件数量多,而社区开发人员同样数量多、分布广,为确保OpenHarmony项目的整体质量,特别拟定本指南,供社区贡献者参考。 - -## 范围 - -本指导适用于所有引入到OpenHarmony项目中的第三方开源软件。 - -## 本文的改进和修订说明 - -1. 本文档由OpenHarmony SIG-QA主导起草和维护。本文档的最新版本总可以在 [这里](https://gitee.com/openharmony/docs/blob/36955109ed21d73afe09fcb5a5bc7067ad6ce18b/zh-cn/contribute/%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6%E5%BC%95%E5%85%A5%E6%8C%87%E5%AF%BC.md) - 找到。 -2. 任何对于本文中涉及的规则的增加,修改,删除都必须被追踪,请进入该追踪系统 。 -3. 最终规则经过社区充分的讨论后,由PMC评审定稿。 - -## 软件引入与引入原则 - -### 什么是软件引入 - -一个软件的引入指的是为满足OpenHarmony中指定SIG的业务需求,申请将其引入到OpenHarmony项目中,具体的流程请参考的[SIG管理章程](https://gitee.com/openharmony/community/tree/master/sig) 进行具体的开源软件引入,并确保整个引入的过程都必须可被追踪。 - -### 软件引入的基本要求 - -为便于第三方开源软件的维护与演进,在引入第三方开源软件时请参考如下原则: - -1. 软件必须有明确的来源,引入到OpenHarmony的软件必须有清晰定义的上游社区。 -2. 必须有明确的引入理由,若需要引入的软件在OpenHarmony项目中已存在,请重用该版本,避免多版本共存增加维护的复杂性。 -3. 软件应该以源码方式引入,原则上二进制不应该被引入,应从源码构建。如果需要引入二进制,经由PMC评审后决定。 -4. 软件应该在OpenHarmony上可以被正确构建,若该软件有尚未被引入的依赖软件,或者软件的运行或者构建依赖一个不能引入OpenHarmony的组件,需由PMC评审后决定。 -5. 引入软件到OpenHarmony项目中必须将其放置到单独的代码仓或独立的目录,命名统一为third_party_软件名称,其中软件名称和其官网保持一致。 -6. 应当完整保留引入软件的官方代码仓目录结构、许可证及Copyright信息,不要修改第三方开源软件的原始许可证与Copyright信息。 -7. 不建议引入未发布正式版本(如只发布Beta版本)的开源软件。 -8. 不能引入有高危漏洞且无解决方案的版本。 -9. 若需针对引入的开源软件进行修改,请将修改的代码放在该开源软件仓中,并确保满足该开源软件的许可证要求,修改的文件应当保持其原始许可证条款,新增的文件也建议采用相同的许可证条款。 -10. 新引入的开源软件必须在其根目录提供README.OpenSource文件,在该文件中准确描述其软件名、许可证、许可文件位置、版本、对应版本的上游社区地址、软件的维护Owner、功能描述以及引入的原因。 -11. 引入新软件到OpenHarmony时必须有对应的SIG负责管理,原则上如果没有SIG-QA以及相应SIG的确认,PMC不批准相应软件的引入。当要批量引入多个软件时,可以求助PMC主持发起SIG间的临时评审会议,提升协调效率。 如因特殊原因不能满足上述要求但又需要引入,请请联系邮箱:law@openatom.org。 - -### 软件引入流程 - -#### 软件引入前检查 - -| 检查项 | 说明 | -| :----- | :----- | -| 归一化 | 1、检查该软件在OpenHarmony中是否已存在,原则上一款软件只在OpenHarmony中引入一次。 | -| 来源可靠 | 1、应该从开源软件官网获取或官网指定的代码托管地址获取。 | -| 社区活跃 | 1、软件来自知名社区或组织,社区或组织通过发布公告、修改软件仓库状态、将仓库放到特定目录下等方式告知停止维护的,不建议引入。
2、软件来自个人、小型社区或组织,两年内未发布版本(含正式版本与测试版本),无明确版本计划,社区提交了有效的Bug或PR,但是半年以上未响应的,不建议引入。
3、社区运营状态不明确,通过Issue 或者邮件等方式询问社区是否继续维护,半年以上未响应或者答复停止维护的,不建议引入。| -| 安全漏洞 | 1、检索业界已知公开的安全漏洞,如有高危漏洞需要有应对方案。| -| 规范化软件名称 | 1、 仓库命名统一为third_party_软件名称,其中软件名称和其官网保持一致。
2、 不允许以软件的子模块作为软件名。
3、 当软件存在多个语言的开发库时,可在其官方命名前追加python-等前缀予以规范化管理。 | -| 官网信息 | 1、在申请引入请求中准确描述该软件官方网址,如无正式官网则提供主流代码托管商上面对应的项目网址,不能使用maven、mvnrepository、springsource等托管库地址。
2、必须同时提供要引入版本的官方源代码包下载地址,以达到可溯源,如需要二进制包,请提供官方的二进制包下载地址。 | -| License检查 | 1、待引入软件是否有license。
2、入库的License是否和官网对应版本的License保持一致。
3、高风险license的开源软件谨慎引入,在引入前请充分评估并在申请时附上分析结论。 | - -#### 提交申请 - -如需要引入新的软件,请参考[SIG管理章程](https://gitee.com/openharmony/community/tree/master/sig) 进行具体的开源软件引入,并在申请材料中包含如下内容: - -1、自检表 - -| 检查项 | 填写指导 | 自检结果示例 | -| :----- | :----- | :----- | -| 软件名 | 描述该软件官方名称以及引入后的仓名,仓名统一为third_party_加上官方软件名称 | third_party_softwarename | -| 软件官网地址 | 描述该软件官方网站链接地址 | https://softwaresite | -| 软件版本号 | 描述该软件要引入的版本号,版本号为其社区正式发布的版本号,不要随意修改;未正式发布的版本不建议引入 | 1.0.0 | -| 软件版本发布日期 | 描述该软件要引入的版本的社区发布日期 | 2021.01.01 | -| 软件版本地址 | 描述该版本的官方下载链接地址,注意该地址必须为能定位到该具体版本发布包的下载URL | https://gitee.com/softwarecodesite/v1.0.0.zip | -| 软件许可证 | 描述该版本的官方许可证名称及许可证文件的相对路径,如果是多许可证要完整描述,并说明各许可证的关系,如是And还是Or,或者是不同目录对应不同许可证 | Apache-2.0 | -| 软件生命周期 | 描述该软件是否有LTS版本,多长时间发布一个版本,最近一年社区代码提交及Issue解决情况,是否有告知停止维护或演进 | 无LTS版本,6个月发布一个版本,近6个月有10次代码提交 | -| 软件安全漏洞 | 描述该软件存在的业界公开的安全漏洞列表,包括漏洞号、级别、漏洞链接地址、是否已有补丁或解决方案 | 无业界公开漏洞 | -| 业务场景 | 描述该软件被哪些仓使用,解决什么业务场景的问题 | 被XX仓静态链接使用,提升YYY能力 | -| 归一化 | 描述社区是否已有此软件或类似软件,业界类似软件有哪些,为什么要新引入该软件或该版本 | 本社区还未引入此软件,业界相似软件有B、C,只有本软件许可证友好,且该软件生态较好,X、Y等公司也在使用 | -| 许可证兼容性 | 1、描述使用该软件有哪些进程,各进程的许可证是什么,与要引入软件的许可证是否兼容。
2、使用OAT工具扫描要引入软件的源代码,申请时附上OAT工具生成的扫描报告(扫描问题应当清零)、LicenseFile.txt内容 | 1、此软件在用户态X进程中,静态链接使用,该进程的许可证为Apache-2.0,与该软件许可证一致,无兼容性问题;
2、OAT工具扫描生成的Result.txt, LicenseFile.txt内容
| -| 责任人 | 描述该软件引入到本社区后的SIG名称及维护责任人的Gitee用名及邮箱 | SIG XXX,Zhangsan,Zhangsan@xyz.com | - -说明: - -- OAT工具的使用方式请参考 https://gitee.com/openharmony-sig/tools_oat ,如对工具有改进建议请直接在社区提交ISSUE,也可Fork下来完善工具并提交PR。 -- OAT报告原则上应当是清零,格式如下: - -``` -Invalid File Type Total Count: 0 -License Not Compatible Total Count: 0 -License Header Invalid Total Count: 0 -Copyright Header Invalid Total Count: 0 -No License File Total Count: 0 -No Readme.OpenSource Total Count: 0 -No Readme Total Count: 0 -``` - -- LicenseFile.txt位于OAT工具运行目录的log目录下,此文件记录扫描目录下所有疑似许可证的文件,格式如下: - -``` -third_party_abcde/ LICENSEFILE LICENSE Apache-2.0 -third_party_abcde/doc/ LICENSEFILE LICENSE Apache-2.0 -``` - -2、OAT.xml文件 - -请参考 https://gitee.com/openharmony-sig/tools_oat/blob/master/README_zh.md ,完成OAT扫描问题确认及OAT.xml文件配置,申请中附上此文件内容(如果无任何需确认问题则无需配置)。 - -3、该仓的README.OpenSource文件内容,格式如下: - -``` -[ - { - "Name": "softwarename", - "License": "Apache-2.0", - "License File": "LICENSE", - "Version Number": "1.0.0", - "Owner": "Zhangsan@xyz.com", - "Upstream URL": "https://gitee.com/softwarecodesite/v1.0.0.zip", - "Description": "...." - }, - { - ... - }//如有多个许可证,请一一列举 -] -``` - -#### PMC评审 - -参考[SIG管理章程](https://gitee.com/openharmony/community/tree/master/sig),PMC会根据收到的PR统一安排SIG申请评审以及建仓。 - -### 第三方开源软件许可证要求 - -1. 第三方开源软件许可证类型必须是[OSI](https://opensource.org/osd-annotated) 明确定义的。 -2. 第三方开源软件许可证必须与使用该开源软件的代码仓许可证兼容。 -3. 如下类型许可证可以引入到OpenHarmony项目中: - -* Apache License 2.0 -* Mulan Permissive Software License, Version 2 -* BSD 2-clause -* BSD 3-clause -* DOM4J License -* PostgreSQL License -* Eclipse Distribution License 1.0 -* MIT -* ISC -* ICU -* University of Illinois/NCSA -* W3C Software License -* zlib/libpng -* Academic Free License 3.0 -* Python Software Foundation License -* Python Imaging Library Software License -* Boost Software License Version 1.0 -* WTF Public License -* UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE -* Zope Public License 2.0 - -4. 如下类型许可证不建议引入到OpenHarmony项目中: - -* GNU GPL 1, 2, 3 -* GNU Affero GPL 3 -* GNU LGPL 2, 2.1, 3 -* QPL -* Sleepycat License -* Server Side Public License (SSPL) version 1 -* Code Project Open License (CPOL) -* BSD-4-Clause/BSD-4-Clause (University of California-Specific) -* Facebook BSD+Patents license -* NPL 1.0/NPL 1.1 -* The Solipsistic Eclipse Public License -* The "Don't Be A Dick" Public License -* JSON License -* Binary Code License (BCL) -* Intel Simplified Software License -* JSR-275 License -* Microsoft Limited Public License -* Amazon Software License (ASL) -* Java SDK for Satori RTM license -* Redis Source Available License (RSAL) -* Booz Allen Public License -* Creative Commons Non-Commercial -* Sun Community Source License 3.0 -* Common Development and Distribution Licenses: CDDL 1.0 and CDDL 1.1 -* Common Public License: CPL 1.0 -* Eclipse Public License: EPL 1.0 -* IBM Public License: IPL 1.0 -* Mozilla Public Licenses: MPL 1.0, MPL 1.1, and MPL 2.0 -* Sun Public License: SPL 1.0 -* Open Software License 3.0 -* Erlang Public License -* UnRAR License -* SIL Open Font License -* Ubuntu Font License Version 1.0 -* IPA Font License Agreement v1.0 -* Ruby License -* Eclipse Public License 2.0: EPL 2.0 - -如要引入其它类型License或上述(4)所列License,请联系邮箱:law@openatom.org。 - -## 软件退出与退出原则 - -### 什么是软件退出 - -1. 一个软件的退出指的是一个软件(项目)申请从OpenHarmony项目中删除,依照本文件描述的规则讨论,最终在OpenHarmony中移除的过程。 -2. 该软件相关的SIG负责申报议题到PMC评审,管理软件退出。 - -### 软件退出原则 - -当满足以下两个条件时,OpenHarmony中软件的退出申请可以被立即执行,对应文件将从项目中直接删除。 - -1. 软件的License变化,或者其他法律法规影响了目前正在使用的版本,导致OpenHarmony因为法务风险,不能继续集成该软件。 -2. 存在恶意代码或严重安全隐患且OpenHarmony社区无能力修复的,要求软件被立即移除。 - -除以上描述两种场景外,其它场景OpenHarmony对软件的退出实行过程化管理: - -1. 随着技术演进与发展,软件因技术陈旧或架构落后,不能满足现有的应用场景被其他更优秀的软件所取代。 -2. OpenHarmony已经集成的版本过于老旧,且软件新版本License或其他法律法规限制导致OpenHarmony不能升级新版本。 -3. 软件来自知名社区或组织,社区或组织通过发布公告、修改软件仓库状态、将仓库放到特定目录下等方式告知停止维护的。 -4. 软件来自个人、小型社区或组织,两年内未发布版本(含正式版本与测试版本),无明确版本计划,社区提交了有效的Bug或PR,社区半年以上未响应的。 -5. 社区运营状态不明确,通过Issue或者邮件等方式询问社区是否继续维护,社区半年以上未响应或者答复停止维护的。 - -如果软件符合以上任何一条退出条件,PMC与相应SIG首先分析该软件在当前OpenHarmony社区中被依赖、被使用的情况。 - -1. 如果OpenHarmony中存在依赖关系,且短时间内不能解除,我们建议SIG新建分支代码仓,并主动进行社区维护动作。 -2. 如果OpenHarmony中不存在依赖关系,或者短时间内可以解除,则责任SIG将软件从OpenHarmony正式发行中移出,并在相应的Release Notes中说明移除的原因及影响。 \ No newline at end of file diff --git a/website/docs/_posts/design/OpenHarmony-API-governance.md b/website/docs/_posts/design/OpenHarmony-API-governance.md deleted file mode 100644 index c6cc1b678ab9a6acfcfd742979996e4b532986ce..0000000000000000000000000000000000000000 --- a/website/docs/_posts/design/OpenHarmony-API-governance.md +++ /dev/null @@ -1,218 +0,0 @@ ---- -title: OpenHarmony-API-governance.md -permalink: /pages/extra/c065b3/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:45 ---- -# OpenHarmony API治理章程 - -## 总览 - -为了引导OpenHarmony生态健康、有序发展和演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。 - -本章程由[API SIG](https://www.openharmony.cn/SIG/api/)制定,经[PMC](https://www.openharmony.cn/community/pmc/)批准发布;本对章程的修订必须经由API SIG评审后,由PMC批准发布。 - -## 概述 - -### 范围与定义 - -OpenHarmony软件栈中包含了多个角色,因此API也分作多种类型。 - - - -不同的API类型其兼容性要求也不一样,具体如下表所述: - -| 类型 | 提供者 | 使用者 | 兼容性要求 | 看护手段| -|---|---|---|---|---| -| Public API | 系统与框架 | 所有应用开发者 | 5个API版本| XTS| -| Test API | 测试框架 | 所有应用开发者| 3个API版本| 待构建 | -| System API | 系统与框架 |系统应用开发者 |不承诺| 待构建 | -| HDI | HDF| 系统服务 | 4个API版本| XTS | -| Driver API | HDF | 驱动开发者 | 不承诺 | 无 | -| Inner API | 系统部件 | 系统部件 | 不承诺 | 无 | - -各类型API说明如下: - -* Public API:OpenHarmony对所有应用开发者公开的API。 -* Test API:测试专用的API,供开发者使用。 -* System API:提供给系统特权应用使用的API,普通应用无法使用。 -* HDI:描述硬件能力的接口。 -* Driver API:提供给驱动开发者使用的接口。 -* Inner API:系统服务和框架实现彼此调用的API,仅供系统内部使用,不承诺兼容性。 - -### API与编程语言 - -OpenHarmony的目标是构建面向万物互联时代的新一代操作系统,其实现涵盖但不限于以下编程语言: - -* C/C++ -* JavaScript -* TypeScript - -本章程所描述的内容与编程语言无关。即:在不违反编程语言要求的情况下,API不分编程语言都要遵守章程的要求。 - -## API治理 - -### 角色与职责 - -|**涉及角色**|**API治理中的职责**| -| - | - | -|Contributor|API的设计和交付主体,负责API相关的代码与设计文档提交。| -|Committer|API相关的代码评审,涉及API提交预审。| -|领域SIG| 新增API相关的代码提交评审,领域SIG评审通过即可合入。
变更API相关的代码提交预审。| -|API SIG|变更API相关的代码提交评审。| -|PMC|API Version计划发布、API治理章程修订评审发布等。| - -### API评审流程 -API评审流程如下: - - - -主要过程说明: - -1. API评审申请、代码提交(Owner:Contributor),所有涉及API新增或变更需同步提交相应的API评审文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、领域SIG、API SIG等相关人员预审。 -1. 代码评审(Owner:Committer),代码评审和API预审,涉及API提交Code Review通过后,还需要进一步领域SIG评审。如果单次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Committer评审,只有所有对应领域的Committer都完成CodeReview后才能进入下一评审环节。 -1. API评审(Owner:领域SIG),新增API相关的代码提交评审,领域SIG评审通过即可代码合入;变更API相关的代码提交,领域SIG评审通过后,还需要进一步提交API SIG。如果单次提交同时涉及多个领域的API新增,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只需一个领域SIG评审通过即可代码合入。如果单次提交同时涉及多个领域的API变更,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只有所有对应领域的SIG都要评审通过才能进入下一评审环节。 -1. API变更评审(Owner:API SIG),变更API相关的代码提交评审,评审通过即可代码。 -1. 评审完成。 - -### API评审申请要素 - -如果涉及API新增或变更需同步提交相应的API评审文档。API评审文档使用[《OpenHarmony API 评审模板》](/pages/extra/5f7b0a/)描述。 - -针对新增API,需要包含如下要素: -1. 需求来源与使用场景(必须)。 -1. API现状与差距分析,说明API新增或变更的必要性(必须)。 -1. API原型设计与使用方法说明(必须);必要时,可以进一步包含相应的使用样例(可选)。 -1. API权限设计(必须)。 -1. API隐私保护方案与要求满足情况澄清(必须); -1. 提交代码的同时提交相应的API参考(必须);必要时,可同步提交相应的开发者指南文档(可选)。 -1. 兼容性/性能/功耗/可靠性/测试等相关情况说明(可选,如不满足本章程 “API设计要求”,则必须包含相关说明)。 - -针对变更API,需要额外包含如下要素: -1. 针对老接口的处理方式(废弃、隐藏或彻底删除)以及对使用老SDK开发应用的兼容措施(必须); -2. 变更影响、替代接口和相应的应用适配方案(必须)。 -3. 刷新ChangeLog(必须) 和 API-diff文档(涉及JS/Native API变更,必须)。 - -## API设计要求 - - -### 一致性要求 -1. 概念一致性:基于场景的业务模型抽象,形成OpenHarmony的连贯、一致、自恰的用户程序模型和业务概念。 -1. 术语一致性:相应的业务术语必须采用统一名词,不允许使用多个语意接近的名词表示同一个业务对象;同样地,为了避免产生混淆,也不允许针对不同的业务对象使用相同的名词或语言接近的名词。 -1. 操作一致性:相同的操作动作必须采用同一动词。 -1. 参数顺序一致性:相同参数/参数序列在多个API中的位置和顺序保持一致。 -1. 机制及算法一致性:通信机制、调用模式、认证机制、加密算法等保持一致。 -1. 帮助、Demo、模板风格一致性:排版、用法等保持一致。 - -### 易用性要求 -以“能力使用者”视角,而不是“能力提供者”视角设计API: -1. 可理解:API命名和功能特性必须容易理解。 -1. 易使用:提供简单易用的API,减少API之间不必要的耦合,避免多个无之间关联关系API之间调用顺序的依赖,尽可能使调用者优雅,尽量避免使用单一功能时必须同时组合调用多个包/模块或类中的多方法才能实现。 -1. 避免误导:提供使用者期望的能力,避免误导,减少误用。 -1. 提供必要的API文档。 - -### 命名要求 -1. 能清晰的表达意图:使用完整的描述性的单词。 -1. 避免造成误导:有误导的名字比表达不清的名字还要有危害性。 -1. 词义清晰明了,避免使用info,data,object等一般意义的词。 -1. 作用域越大,命名应越精确。 -1. 不用或少用缩写,业界通用术语遵从行业习惯允许使用缩写。 -1. 包名/模块名/命名空间前缀约定: - 1. JS API 统一模块名:@ohos.\*。 - 2. Native API 统一命名空间:namespace OHOS.\*。 - 3. 引用外部开源代码的,可以保留原包名/模块名/命名空间,也可以按照上述规则对包名统一进行替换。 -1. 包名/模块名/命名空间最短不少于2段,最长不超过4段;每一段建议使用一个单词,最长不超过2个单词。 -1. 类名、方法名/函数名、成员变量、变量名最多不超过4个单词。 - -### 权限控制要求 -1. 完备性原则:一切穿透应用沙箱的行为都需考虑使用权限来管控。 -1. 最优粒度原则:一个权限只保护一类对象;一个接口仅需申请一个权限即可访问。 -1. 清晰完整原则:权限定义中必须清晰说明保护对象、开放范围、敏感级别。 -1. 最小开放原则:一个权限仅对确有正当业务需求的应用开放,开放控制可通过权限来实现。 - -### 隐私保护要求 -1. API调用的返回仅包含必要的内容, 避免携带额外信息。 -1. API调用不允许获取、手机用户个人数据, 除非通过用户权限管控、由用户授权同意。 -1. API涉及跨应用调用时,如涉及个人数据向被调用者的披露,由调用方在隐私声明中说明披露的数据类型、数据接收者和数据使用目的。 -1. API涉及到用户敏感数据(如电话、通讯录、媒体等)访问时,需要使用system picker的机制,禁止API通过申请敏感权限方式访问。 -1. API开放禁止捆绑与所开放能力不相关的功能。 - -### 文档化要求 -1. API参考采用英文方式交付。 -1. 模块/包模块的API参考必须包括简要描述和详细描述。 -1. 类、方法、“Interface”、枚举或成员变量的API参考必须包括简要描述。 -1. 类、方法、“Interface”、枚举或成员变量的API参考可选包括详细描述。 -1. 方法、“Interface”的API参考必须包括所有入参的参数描述。 -1. 如果方法或“Interface”有返回值,则API参考必须包含返回值描述。 -1. 如果执行过程中可能抛出异常,则API参数必须包含相关的异常描述。 -1. 必须包含API的起始版本号(使用@since注释标记)。 -1. 可选包括本模块或类自己的版本号(使用@version注释标记)。 -1. 涉及API变更(不兼容),必须同步交付API-Diff和ChangeLog文档。 - -### 兼容性要求 -1. 按严格程度从高到低,API兼容要求包括:契约兼容 > 二进制兼容 > 源码兼容。 - 1. 源码兼容:指版本演进后,开发者已有的源代码可正常编译通过。 - 1. 二进制兼容:指版本演进后,开发者已有程序不用重新编译可正常链接、运行。 - 1. 契约兼容:也称语义兼容,指版本演进后,开发者原有程序行为不发生变化。 -1. OpenHarmony API后向兼容必须满足二进制兼容要求,例外情况需要通过API SIG评审并经过PMC批准。常见破坏二进制兼容的API变更包括: - 1. 任何API元素删除; - 1. 降低方法的可见性,例如protected修改为了private,或者public修改为protected。 - 1. 类类型发生变化,例如抽象类变更为非抽象类,或者接口类(“Interface”)变更为非接口类。 - 1. 方法原型发生变化,例如返回值类型修改,或入参顺序或入参类型发生变化。 - 1. 成员final/static等属性发生变化,例如非final成员变成final,或者非static的成员变成static。 -1. 禁止“原型相同、功能不兼容”的API修改,可受限使用“废弃old-api、新增new-api”的方式进行修改。 -1. 根据发布类型不同,API的生命周期和兼容性要求: - -![](/images/design/figures/API-Lifecycle.png) - - 1. Canary版本:早期发布的预览版本,不承诺API稳定。 - 1. 对上一Release发布版本保持API兼容。 - 1. 相同API Version的多个Canary版本之间无API兼容性要求。 - 1. Beta版本:公开发布的Beta测试版本,不承诺API稳定。 - 1. 对上一Release发布版本保持API兼容。 - 1. 对同一API Version的早期发布的Canary版本不兼容。 - 1. 相同API Version的多个Beta版本之间无API兼容性要求。 - 1. API Stable版本发布之后API即冻结,之后再发布的Beta版不允许任何形式的API新增或变更。 - 1. Release版本:正式发布版本。 - 通过Release版本对外发布的API,需要遵守对外部开发者的“契约承诺”,原则上不允许对已经Release发布的API进行不兼容修改,受限允许对已发布的API进行废弃。已经Release发布的API废弃基本要求包括: - 1. 废弃接口标记。 - 1. 提供可替代接口。 - 1. 废弃API至少保留5个API Version版本(对废弃5个API Version的API可以彻底删除,不再支持)。 - -### 性能要求 -1. 应及时响应,避免调用者等待;如果API调用执行时间过长应设计为异步方式。 -2. 应关注API调用时机、调用频次对RAM占用的影响。 -3. 应关注API调用时机、调用频次对功耗的影响。 -4. 对使用资源的API调用需要能及时释放资源,异常场景具备容错机制,保障资源及时释放。 - -### 功耗要求 - -1. 针对API调用时机、调用频次对功耗的影响做评估,有影响进行相关设计。 -2. 版本演进过程中,功耗不劣化。 - -### 可靠性要求 - -1. API不能因为外部输入(输入参数、系统状态、外部数据等)或者内部状态、数据异常而崩溃,应该返回确定的错误码或者抛出预定义的异常。 -2. API应明确调用是同步还是异步调用,若是同步调用,应明确超时上限或者允许调用者设置超时时间,避免调用卡死导致业务无响应。 -3. API务必支持多线程重入。 -4. 满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。 -5. API内部创建对象的生命周期要闭合,避免对象资源泄漏。 -6. API要明确客户端调用失败后,能够发起重试的最大次数。 - -### 测试要求 -1. 新增API必须同步交付API自动化测试用例,用例100%覆盖API接口。 -2. 用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。 -3. 用例执行高效,每条用例执行时间控制在毫秒级。 -4. 用例执行全自动化:接口用例需要达成100%自动化。 -5. 用例有效性:用户要求必须存在断言,且不能仅是检查是否抛出异常,需要有功能逻辑的断言。 - -### 编程语言要求 - -API根据其编程语言类型,需要遵守相应的OpenHarmony编程语言规范。 diff --git a/website/docs/_posts/device-dev/guide/device-iotcamera-control-demo.md b/website/docs/_posts/device-dev/guide/device-iotcamera-control-demo.md deleted file mode 100644 index f661d01235a47bfb5363c5e2349cd3597f429e83..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/guide/device-iotcamera-control-demo.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: device-iotcamera-control-demo.md -permalink: /pages/extra/0cc11e/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:34 ---- -# 示例开发 - -- **[拍照开发指导](/pages/00060001000100)** - -- **[录像开发指导](/pages/00060001000101)** - - diff --git a/website/docs/_posts/device-dev/guide/device-iotcamera-control.md b/website/docs/_posts/device-dev/guide/device-iotcamera-control.md deleted file mode 100644 index fe8aacbecc2c5252c21264e3675e784b5b39f7fa..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/guide/device-iotcamera-control.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: device-iotcamera-control.md -permalink: /pages/extra/ecd28f/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:34 ---- -# 摄像头控制 - -- **[概述](/pages/000600010000)** - -- **[示例开发](/pages/extra/0cc11e/)** - -- **[应用实例](/pages/000600010002)** - - diff --git a/website/docs/_posts/device-dev/guide/device-iotcamera.md b/website/docs/_posts/device-dev/guide/device-iotcamera.md deleted file mode 100644 index 5786b71150d11c85d0993d219eec73661cbc16dd..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/guide/device-iotcamera.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: device-iotcamera.md -permalink: /pages/extra/77c24f/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:34 ---- -# 无屏摄像头类产品 - -- **[摄像头控制](/pages/extra/ecd28f/)** - - diff --git a/website/docs/_posts/device-dev/guide/device-wlan.md b/website/docs/_posts/device-dev/guide/device-wlan.md deleted file mode 100644 index 1eab973bae90f0a3e6312688a2f396e7e932ca77..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/guide/device-wlan.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: device-wlan.md -permalink: /pages/extra/b17936/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:34 ---- -# WLAN连接类产品 - - -- **[LED外设控制](/pages/extra/2d8771/)** - -- **[集成三方SDK](/pages/0006000001)** - - diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-lite-env-setup.md b/website/docs/_posts/device-dev/quick-start/quickstart-lite-env-setup.md deleted file mode 100644 index ae67b3e270c07254a5c8d975c73ff448f614da62..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/quick-start/quickstart-lite-env-setup.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: quickstart-lite-env-setup.md -permalink: /pages/extra/aa859c/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:37 ---- -# 搭建系统环境 - -- **[概述](/pages/0001000100)** - -- **[Windows开发环境准备](/pages/0001000101)** - -- **[获取源码及Ubuntu编译环境准备](/pages/0001000102)** - -- **[常见问题](/pages/0001000103)** - - diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-lite-steps-hi3861-connection.md b/website/docs/_posts/device-dev/quick-start/quickstart-lite-steps-hi3861-connection.md deleted file mode 100644 index 19d10baefc15bba20adf9b4bb1c17470e8006469..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/quick-start/quickstart-lite-steps-hi3861-connection.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: quickstart-lite-steps-hi3861-connection.md -permalink: /pages/extra/2e61fc/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:38 ---- -# WLAN联网(编译、烧录) - -- [编译](#section191121332125319) -- [镜像烧录](#section3288165814218) -- [WLAN模组联网](#section194671619167) - -本示例将演示如何通过AT命令完成WLAN模组与网关联网。 - -## 编译 - -本节描述如何在Linux服务器上进行WLAN模组版本的编译。 - -如果Linux编译环境通过Docker方式安装,具体编译过程请参见[Docker方式获取编译环境](/pages/000a00#section107932281315)的编译操作。如果Linux编译环境通过软件包方式安装,请参考如下步骤。 - -1. 打开DevEco Device Tool工具,点击“View \> Terminal”,进入终端界面。 - - **图 1** IDE终端工具打开方法 - ![](/images/device-dev/quick-start/figures/IDE终端工具打开方法.png "IDE终端工具打开方法") - - 在终端界面使用ssh命令连接linux服务器,如“ssh user@ipaddr”。 - - **图 2** 终端界面示意图 - ![](/images/device-dev/quick-start/figures/终端界面示意图.png "终端界面示意图") - -2. 进入代码根路径,并在终端窗口,执行脚本命令“hb set”、“.”,选择需要编译的版本“wifiiot\_hispark\_pegasus”。 - - **图 3** 在终端界面选择目标构建版本示意图 - ![](/images/device-dev/quick-start/figures/在终端界面选择目标构建版本示意图.png "在终端界面选择目标构建版本示意图") - -3. 执行“hb build”启动版本构建。 - - **图 4** 在终端界面执行编译命令示意图 - ![](/images/device-dev/quick-start/figures/在终端界面执行编译命令示意图.png "在终端界面执行编译命令示意图") - -4. 编译结束后,如果出现“wifiiot\_hispark\_pegasus build success”字样,则证明构建成功,如下图所示。 - - **图 5** 编译成功示意图 - ![](/images/device-dev/quick-start/figures/编译成功示意图.png "编译成功示意图") - -5. 构建成功后,会在./out/wifiiot/路径中生成以下文件,使用如下命令可以查看,至此编译构建流程结束。 - - ``` - ls -l out/hispark_pegasus/wifiiot_hispark_pegasus/ - ``` - - **图 6** 编译文件存放目录示意图 - ![](/images/device-dev/quick-start/figures/编译文件存放目录示意图.png "编译文件存放目录示意图") - - -## 镜像烧录 - -烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 - -**Hi3861V100开发板支持串口烧录方式,其中Windows系统串口烧录协议包括burn-serial和hiburn-serial,Linux系统串口烧录协议为hiburn-serial。** - ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->Windows下的两种烧录协议**burn-serial**和**hiburn-serial**,在操作上没有区别,**burn-serial**协议主要是为了兼容历史版本工程。 - -Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 - -1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3861-0000001105041324)。 -2. 打开电脑的设备管理器,查看并记录对应的串口号。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果对应的串口异常,请根据[Hi3861V100开发板串口驱动安装](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3861-drivers-0000001058153433)安装USB转串口的驱动程序。 - - ![](/images/device-dev/quick-start/figures/hi3861-record-the-serial-port-number.png) - -3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。 - - ![](/images/device-dev/quick-start/figures/hi3861-deveco-device-tool-setting.png) - -4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3861V100开发板进行适配,无需单独修改。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果待烧录文件是直接通过拷贝的方式获取,需要手动修改待烧录文件的路径。打开待烧录文件的页签,在Partition Settings的New Opiton的下拉列表中,选择Partition\_bin,然后在Partition Opiton的Partition\_bin设置待烧录文件的路径。 - -5. 在“hi3861”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 - - - upload\_port:选择步骤2中查询的串口号。 - - upload\_protocol:选择烧录协议,Windows系统可以选择“burn-serial”或“hiburn-serial”,Linux系统只能选择“hiburn-serial”。 - - upload\_partitions:选择待烧录的文件,默认选择hi3861\_app。 - - ![](/images/device-dev/quick-start/figures/options.png) - -6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 -7. 打开工程文件,在DevEco Device Tool界面的“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。 - - ![](/images/device-dev/quick-start/figures/hi3861-upload.png) - -8. 启动烧录后,显示如下提示信息时,请按开发板上的RST按钮重启开发板。 - - ![](/images/device-dev/quick-start/figures/hi3861-restart-the-development-board.png) - -9. 重新上电后,界面提示如下信息时,表示烧录成功。 - - ![](/images/device-dev/quick-start/figures/hi3861-burning-succeeded.png) - - -## WLAN模组联网 - -完成版本构建及烧录后,下面开始介绍如何在串口终端上执行AT命令,使WLAN模组联网。 - -1. 保持Windows工作台和WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。 - - **图 7** 打开DevEco串口终端示意图 - ![](/images/device-dev/quick-start/figures/打开DevEco串口终端示意图.png "打开DevEco串口终端示意图") - -2. 复位WLAN模组,终端界面显示“ready to OS start”,则启动成功。 - - **图 8** WLAN复位成功示意图 - ![](/images/device-dev/quick-start/figures/WLAN复位成功示意图.png "WLAN复位成功示意图") - -3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。 - - ``` - AT+STARTSTA # 启动STA模式 - AT+SCAN # 扫描周边AP - AT+SCANRESULT # 显示扫描结果 - AT+CONN="SSID",,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码 - AT+STASTAT # 查看连接结果 - AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址 - ``` - -4. 查看WLAN模组与网关联通是否正常,如下图所示。 - - ``` - AT+IFCFG # 查看模组接口IP - AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址 - ``` - - **图 9** WLAN模组联网成功示意图 - ![](/images/device-dev/quick-start/figures/WLAN模组联网成功示意图.png "WLAN模组联网成功示意图") - - diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-standard-docker-environment.md b/website/docs/_posts/device-dev/quick-start/quickstart-standard-docker-environment.md deleted file mode 100644 index 7065b9512be8983fde541b6899c44f72117880ca..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/quick-start/quickstart-standard-docker-environment.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: quickstart-standard-docker-environment.md -permalink: /pages/extra/519b5e/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:38 ---- -# 搭建Ubuntu环境\(获取源码及编译,Docker方式\) - -- [获取标准系统源码](#section8761819202511) - - [前提条件](#section102871547153314) - - [操作步骤](#section429012478331) - -- [执行prebuilts](#section0495320152619) -- [获取Docker环境](#section181431248132513) -- [编译](#section92391739152318) - -OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译工具链进行了封装,开发者可省略对应工具的安装。 - ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->- 在使用Docker前需要先安装Docker,Docker安装请参考[官方指导](https://docs.docker.com/engine/install/ubuntu/)。 ->- Docker方式和安装包方式二选一即可。选择Docker方式的开发者可跳过[安装包方式](/pages/extra/8bd265/)的内容。 - -## 获取标准系统源码 - -### 前提条件 - -1. 注册码云gitee账号。 -2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 - - ``` - git config --global user.name "yourname" - git config --global user.email "your-email-address" - git config --global credential.helper store - ``` - -4. 安装码云repo工具,可以执行如下命令。 - - ``` - curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo #如果没有权限,可下载至其他目录,并将其配置到环境变量中 - chmod a+x /usr/local/bin/repo - pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests - ``` - - -### 操作步骤 - -可通过下方两种方式获取OpenHarmony主干代码,两种方式二选一即可。建议新建个文件夹,在此文件夹下执行以下命令,下载源码,此文件夹即为源码根目录。 - -方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 - -``` -repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' -``` - -方式二:通过repo + https 下载。 - -``` -repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify -repo sync -c -repo forall -c 'git lfs pull' -``` - -## 执行prebuilts - -在源码根目录下执行脚本,安装编译器及二进制工具。 - -``` -bash build/prebuilts_download.sh -``` - -下载的prebuilts二进制默认存放在与OpenHarmony同目录下的OpenHarmony\_2.0\_canary\_prebuilts下。 - -## 获取Docker环境 - -**方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:** - -1. 获取Docker镜像。 - - ``` - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 - ``` - -2. 进入源码根目录执行如下命令,从而进入Docker构建环境。 - - ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 - ``` - - -**方式二:通过Dockerfile 构建本地Docker镜像进行构建**: - -1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 - - ``` - git clone https://gitee.com/openharmony/docs.git - ``` - -2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。 - - ``` - cd docs/docker/standard - ./build.sh - ``` - -3. 进入源码根目录执行如下命令,从而进入Docker构建环境。 - - ``` - docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.5 - ``` - - -## 编译 - -1. 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。 - - ``` - ./build.sh --product-name {product_name} - ``` - - \{product\_name\}为当前版本支持的平台。比如:Hi3516DV300等。 - - 编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在 out/{device_name}/packages/phone/images/ 目录下。 - -2. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](/pages/00010101)。 - ->![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** ->退出Docker执行exit命令即可。 - diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-standard-windows-environment.md b/website/docs/_posts/device-dev/quick-start/quickstart-standard-windows-environment.md deleted file mode 100644 index bd57f9f0d092a2985b99346abb7e2a1073a82853..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/quick-start/quickstart-standard-windows-environment.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: quickstart-standard-windows-environment.md -permalink: /pages/extra/887650/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:38 ---- -# Windows开发环境准备 - -- [安装DevEco Device Tool](#zh-cn_topic_0000001058091994_section10761564496) - -系统要求: - -- Windows 10 64位系统。 -- 系统的用户名不能含有中文字符。 - -## 安装DevEco Device Tool - -DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,同时DevEco Device Tool运行依赖Python,Node.js和hpm工具。 - -DevEco Device Tool支持一体化安装,即DevEco Device Tool安装向导会检测系统是否安装Visual Studio Code、Python、Node.js、hpm的适配版本,当安装向导未检测到这些软件时,会给出相应的提示,根据提示勾选要自动安装的软件,安装向导会自动下载相应的软件进行安装。 - -安装DevEco Device Tool,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用 - -1. 获取软件,请使用华为开发者帐号登录[https://device.harmonyos.com/cn/ide\#download\_beta](https://device.harmonyos.com/cn/ide#download_beta),下载DevEco Device Tool V3.0 Beta1及以上版本。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)。 -2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。 -3. 设置DevEco Device Tool的安装路径,点击Next。 -4. 根据安装向导提示,勾选要自动安装的软件,点击Next。 - - ![](/images/device-dev/quick-start/figures/Snap28.png) - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当安装向导检测到系统中已安装可兼容的Python版本,会提示用户可选择已安装的可兼容的Python版本,也可选择下载推荐的Python版本。 - -5. 在以下界面点击Next,进行软件下载和安装。 - - ![](/images/device-dev/quick-start/figures/Snap8.png) - -6. 在弹出的Python安装向导中,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装,等待安装完成后,点击**Close**。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装可兼容的Python版本,且用户选择了已安装的可兼容的Python版本,则Python安装向导不会弹出,用户不需要执行此步骤。 - >如果安装DevEco Device Tool 2.1 Release版本,Python版本只能为3.8.x版本,不能安装最新的Python3.9.x版本。如果安装DevEco Device Tool V3.0 Beta1及以上版本,Python版本只能为3.8.x或3.9.x版本。 - - ![](/images/device-dev/quick-start/figures/Snap34.png) - -7. 在弹出的Visual Studio Code安装向导中,根据向导提示安装Visual Studio Code,安装过程中,请勾选“添加到PATH(重启后生效)”。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的Visual Studio Code版本,则Visual Studio Code安装向导不会弹出,用户不需要执行此步骤。 - - ![](/images/device-dev/quick-start/figures/Snap33.png) - -8. 在弹出的Node.js安装向导中,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的Node.js版本,则Node.js安装向导不会弹出,用户不需要执行此步骤。 - -9. 等待DevEco Device Tool安装向导自动安装hpm和DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当DevEco Device Tool安装向导检测系统已安装正确的hpm版本,则不会进行hpm软件的下载和安装。 - -10. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](/images/device-dev/quick-start/figures/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。 - - >![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** - >如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。 - - ![](/images/device-dev/quick-start/figures/deveco-device-tool-install-sucessful.png) - - diff --git a/website/docs/_posts/device-dev/quick-start/quickstart-standard.md b/website/docs/_posts/device-dev/quick-start/quickstart-standard.md deleted file mode 100644 index 5ed21cf99170271be0651bf3a02f78506df1a30c..0000000000000000000000000000000000000000 --- a/website/docs/_posts/device-dev/quick-start/quickstart-standard.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: quickstart-standard.md -permalink: /pages/extra/5a0f2a/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:38 ---- -# 标准系统入门 - -- **[入门介绍](/pages/00010100)** - -- **[Windows开发环境准备](/pages/extra/887650/)** - -- **[搭建Ubuntu环境\(获取源码及编译,Docker方式\)](/pages/extra/519b5e/)** - -- **[搭建Ubuntu环境\(获取源码及编译,安装包方式\)](/pages/extra/8bd265/)** - -- **[镜像烧录](/pages/00010101)** - -- **[镜像运行](/pages/00010102)** - -- **[常见问题](/pages/00010103)** - - diff --git a/website/docs/_posts/release-notes/Readme.md b/website/docs/_posts/release-notes/Readme.md deleted file mode 100644 index ea072d0ad827f0b7b55a3fb97c9372af711f8e42..0000000000000000000000000000000000000000 --- a/website/docs/_posts/release-notes/Readme.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Readme.md -permalink: /pages/extra/34805f/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 18:17:34 ---- -# OpenHarmony Release Notes -## OpenHarmony 3.x Releases -[OpenHarmony v3.0 LTS (2021-09-30)](/pages/00000300) - -## OpenHarmony 2.x Releases - -- [OpenHarmony v2.2 beta2 (2021-08-04)](/pages/00000301) -- [OpenHarmony 2.0 Canary (2021-06-02)](/pages/00000302) -## OpenHarmony 1.x Releases -- [OpenHarmony v1.1.3 LTS (2021-09-30)](/pages/00000303) -- [OpenHarmony v1.1.2 LTS (2021-08-04)](/pages/extra/4f9c6b/) -- [OpenHarmony 1.1.1 LTS (2021-06-22)](/pages/extra/a70d2c/) -- [OpenHarmony 1.1.0 LTS (2021-04-01)](/pages/extra/5e1674/) -- [OpenHarmony 1.0 (2020-09-10)](/pages/extra/0a1ae8/) - diff --git a/website/docs/_posts/zh-cn/application-dev/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..47d13a3271a27af3765df9b87013510225cb295e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/Readme-CN.md @@ -0,0 +1,31 @@ +--- +title: Readme-CN +permalink: /pages/extra/302940/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 应用开发 + +- [应用开发导读](/pages/extra/d0fdd9/) +- [DevEco Studio(OpenHarmony)使用指南](/pages/extra/9981e8/) +- [包结构说明](/pages/010c03) +- [快速入门](/pages/extra/1e52c4/) +- [Ability框架](/pages/extra/fdc4f8/) +- 方舟开发框架(ArkUI) + - [基于JS扩展的类Web开发范式](/pages/extra/3adabc/) + - [基于TS扩展的声明式开发范式](/pages/extra/c48b55/) +- [媒体](/pages/extra/56b10d/) +- [安全](/pages/extra/a47051/) +- [IPC与RPC通信](/pages/extra/ec73ba/) +- [分布式数据服务](/pages/extra/ee7fed/) +- [USB服务](/pages/extra/ea8df1/) +- [DFX](/pages/extra/047c71/) +- [开发参考](/pages/extra/b87a8e/) + diff --git a/website/docs/_posts/zh-cn/application-dev/ability/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/ability/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..f2b36040ba9910b37bbafe6cb61cd6321ce1f43d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ability/Readme-CN.md @@ -0,0 +1,21 @@ +--- +title: Readme-CN +permalink: /pages/extra/fdc4f8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# Ability框架 + +* [PageAbility开发说明](/pages/extra/7e1a42/) +* [ServiceAbility开发说明](/pages/extra/bb36f5/) +* [基于Native的Data Ability创建与访问](/pages/extra/d58fe5/) +* [CommonEvent开发指南](/pages/extra/6a04ee/) +* [Notification开发指南](/pages/extra/791aae/) + diff --git a/website/docs/_posts/application-dev/ability/common-event.md b/website/docs/_posts/zh-cn/application-dev/ability/common-event.md similarity index 99% rename from website/docs/_posts/application-dev/ability/common-event.md rename to website/docs/_posts/zh-cn/application-dev/ability/common-event.md index 547095ac82e3c3b116eb90210e8a3a39c5c543b9..1f5bb99966180f850bf29df27f7979d7aed1a5f9 100644 --- a/website/docs/_posts/application-dev/ability/common-event.md +++ b/website/docs/_posts/zh-cn/application-dev/ability/common-event.md @@ -1,15 +1,15 @@ --- -title: common-event.md -permalink: /pages/extra/d9a3ee/ +title: common-event +permalink: /pages/extra/6a04ee/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:33 +date: 2022-02-12 09:01:56 --- # CommonEvent开发指南 diff --git a/website/docs/_posts/zh-cn/application-dev/ability/data-ability-creating-accessing.md b/website/docs/_posts/zh-cn/application-dev/ability/data-ability-creating-accessing.md new file mode 100644 index 0000000000000000000000000000000000000000..7668ed3dcf90c5906f774c6c83a057937c453c43 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ability/data-ability-creating-accessing.md @@ -0,0 +1,199 @@ +--- +title: data-ability-creating-accessing +permalink: /pages/extra/d58fe5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 基于Native的Data Ability创建与访问 + +## Data Ability基本概念 +通过Ability派生出的DataAbility类(以下简称“Data”),有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。 + +## 创建Data +### 1. Data子系统实现 +1. 基于Native的Data子系统,需要继承Ability类,成为Ability的派生类来实现功能 +2. 需要实现父类中Insert,Query,Update,Delete接口的业务内容.保证能够满足数据库存储业务的基本需求.BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑,依赖Insert,Query,Update,Delete接口逻辑,来实现数据的批量处理. +3. 使用REGISTER_AA宏将Data的类名注册到系统服务中 + + +### 2. 子系统配置 + +| Json重要字段 | 备注说明 | +| ------------- | ------------------------------------------------------------ | +| "name" | Ability名子,对应Ability派生的Data类名 | +| "type" | Ability类型,Data对应的Ability类型未"data" | +| "uri" | 通信使用的URI | +| "srcLanguage" | Data实现语言,c++实现的Data填写c++, js实现的Data填写js | +| "visible" | 对其他应用是否可见, 设置为true时, Data才能与其他应用进行通信传输数据 | + +**config.json配置样例** + +```json +"abilities":[{ + "name": ".DataAbility", + "icon": "$media:snowball", + "label": "Data Firs Ability", + "launchType": "standard", + "orientation": "unspecified", + "type": "data", + "uri": "dataability://com.ix.DataAbility", + "srcLanguage": "c++", + "visible": true +}] +``` + +## 访问Data +### 1 JS应用开发前准备 +基础依赖包: + 1. @ohos.ability.featureAbility + 2. @ohos.data.dataability + 3. @ohos.data.rdb +与Data子系统通信的Uri字符串 + +### 2 JS应用开发接口 +工具接口类对象创建 +```js +// 作为参数传递的Uri,与config中定义的Uri的区别是多了一个"/",是因为作为参数传递的uri中,在第二个与第三个"/"中间,存在一个DeviceID的参数 +var urivar = "dataability:///com.ix.DataAbility" +var DAHelper = featureAbility.acquireDataAbilityHelper( + urivar +); +``` +数据库相关的rdb数据构建 +```js +var valuesBucket = {"name": "gaolu"} +var da = new ohos_data_ability.DataAbilityPredicates() +var valArray =new Array("value1"); +var cars = new Array({"batchInsert1" : "value1",}); +``` +向指定的Data子系统插入数据,inster调用 +```js +// callbacke方式调用: +DAHelper.insert( + urivar, + valuesBucket, + (error, data) => { + expect(typeof(data)).assertEqual("number") + } +); +// promise方式调用: +var datainsert = await DAHelper.insert( + urivar, + valuesBucket +); +``` +删除Data子系统中指定的数据, delete调用 +```js +// callbacke方式调用: +DAHelper.delete( + urivar, + da, + (error, data) => { + expect(typeof(data)).assertEqual("number") + } +); +// promise方式调用: +var datadelete = await DAHelper.delete( + urivar, + da, +); +``` +更新指定Data子系统中的数据, update调用 +```js +// callbacke方式调用: +DAHelper.update( + urivar + valuesBucket, + da, + (error, data) => { + expect(typeof(data)).assertEqual("number") + } +); +// promise方式调用: +var dataupdate = await DAHelper.update( + urivar, + valuesBucket, + da, +); +``` +在指定的Data子系统中查找数据,query调用 +```js +// callbacke方式调用: +DAHelper.query( + urivar, + valArray, + da, + (error, data) => { + expect(typeof(data)).assertEqual("object") + } +); +// promise方式调用: +var dataquery = await DAHelper.query( + urivar, + valArray, + da +); +``` +向指定的数据子系统批量插入数据,batchInsert调用 +```js +// callbacke方式调用: +DAHelper.batchInsert( + urivar, + cars, + (error, data) => { + expect(typeof(data)).assertEqual("number") + } +); +// promise方式调用: +var databatchInsert = await DAHelper.batchInsert( + urivar, + cars +); +``` +向指定的Data子系统进行数据的批量处理,executeBatch调用 +```js +// callbacke方式调用: +DAHelper.executeBatch( + urivar, + [ + { + uri: urivar, + type: featureAbility.DataAbilityOperationType.TYPE_INSERT, + valuesBucket: {"executeBatch" : "value1",}, + predicates: da, + expectedCount:0, + PredicatesBackReferences: {}, + interrupted:true, + } + ], + (error, data) => { + expect(typeof(data)).assertEqual("object") + } +); +// promise方式调用: +var dataexecuteBatch = await DAHelper.executeBatch( + urivar, + [ + { + uri: urivar, + type: featureAbility.DataAbilityOperationType.TYPE_INSERT, + valuesBucket: + { + "executeBatch" : "value1", + }, + predicates: da, + expectedCount:0, + PredicatesBackReferences: {}, + interrupted:true, + } + ] +); +``` + diff --git a/website/docs/_posts/zh-cn/application-dev/ability/notification.md b/website/docs/_posts/zh-cn/application-dev/ability/notification.md new file mode 100644 index 0000000000000000000000000000000000000000..8b8102daa1c295f4afcea2bcbfd5cb1b4ddc3266 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ability/notification.md @@ -0,0 +1,1602 @@ +--- +title: notification +permalink: /pages/extra/791aae/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- + + +# Notification开发指南 + +#### 简介 + +OpenHarmony通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,包括文本,长文本,多文本,图片,社交,媒体等。所有系统服务以及应用都可以通过通知接口发送通知消息,用户可以通过SystemUI查看所有通知消息。 + +通知常见的使用场景: + +- 显示接收到短消息、即时消息等。 +- 显示应用的推送消息,如广告、版本更新等。 +- 显示当前正在进行的事件,如导航、下载等。 + + + +#### 接口列表 + +| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | +| ------------------------------------------------------------ | ---- | ---- | ------ | -------- | +| Notification.publish(request: NotificationRequest, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.publish(request: NotificationRequest) | 支持 | 支持 | 支持 | 支持 | +| Notification.cancel(id: number, label: string, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.cancel(id:number, label?:string) | 支持 | 支持 | 支持 | 支持 | +| Notification.cancel(id: number, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.cancelAll(callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.cancelAll() | 支持 | 支持 | 支持 | 支持 | +| Notification.addSlot(type: SlotType, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.addSlot(type: SlotType) | 支持 | 支持 | 支持 | 支持 | +| Notification.getSlot(slotType: SlotType, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.getSlot(slotType: SlotType) | 支持 | 支持 | 支持 | 支持 | +| Notification.getSlots(callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | +| Notification.getSlots() | 支持 | 支持 | 支持 | 支持 | +| Notification.removeSlot(slotType: SlotType, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.removeSlot(slotType: SlotType) | 支持 | 支持 | 支持 | 支持 | +| Notification.removeAllSlots(callback: AsyncCallback): void | 支持 | 支持 | 支持 | 支持 | +| Notification.removeAllSlots(): Promise | 支持 | 支持 | 支持 | 支持 | +| Notification.getActiveNotificationCount(callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| Notification.getActiveNotificationCount() | 支持 | 支持 | 支持 | 支持 | +| Notification.getActiveNotifications(callback: AsyncCallback>) | 支持 | 支持 | 支持 | 支持 | +| Notification.getActiveNotifications() | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getWantAgent(info: WantAgentInfo, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getWantAgent(info: WantAgentInfo): Promise | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getBundleName(agent: WantAgent, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getBundleName(agent: WantAgent): Promise | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getUid(agent: WantAgent, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.getUid(agent: WantAgent): Promise | 支持 | 支持 | 支持 | 支持 | +| WantAgent.cancel(agent: WantAgent, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.cancel(agent: WantAgent): Promise | 支持 | 支持 | 支持 | 支持 | +| WantAgent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback) | 支持 | 支持 | 支持 | 支持 | +| WantAgent.equal(agent: WantAgent, otherAgent: WantAgent): Promise | 支持 | 支持 | 支持 | 支持 | + + + +#### Notification接口 + +##### 导入模块 + +```js +import Notification from '@ohos.notification'; +``` + + + +##### NotificationSlot类型说明 + +NotificationSlot可以对提示音、振动等进行设置。一个应用可以创建一个或多个NotificationSlot,在发布通知时,通过绑定不同的NotificationSlot,实现不同用途。 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------------------- | -------- | ------------- | ---- | ---------------------------- | +| type | 读、写 | SlotType | 是 | 通道类型 | +| level | 读、写 | SlotLevel | 否 | 通知级别 | +| desc | 读、写 | string | 否 | 通知渠道描述信息 | +| badgeFlag | 读、写 | boolean | 否 | 是否显示角标 | +| bypassDnd | 读、写 | boolean | 否 | 置是否在系统中绕过免打扰模式 | +| lockscreenVisibility | 读、写 | boolean | 否 | 在锁定屏幕上显示通知的模式 | +| vibrationEnabled | 读、写 | boolean | 否 | 是否可振动 | +| sound | 读、写 | string | 否 | 通知提示音 | +| lightEnabled | 读、写 | boolean | 否 | 是否闪灯 | +| lightColor | 读、写 | number | 否 | 通知灯颜色 | +| vibrationValues | 读、写 | Array | 否 | 通知振动样式 | + +- SlotType类型说明 + +| 名称 | 读写属性 | 类型 | 描述 | +| -------------------- | -------- | ---- | -------- | +| SOCIAL_COMMUNICATION | 只读 | enum | 社交类型 | +| SERVICE_INFORMATION | 只读 | enum | 服务类型 | +| CONTENT_INFORMATION | 只读 | enum | 内容类型 | +| OTHER_TYPES | 只读 | enum | 其他类型 | + +- SlotLevel类型说明 + +| 名称 | 读写属性 | 类型 | 描述 | +| ------------- | -------- | ---- | ------------------------------------------------------------ | +| LEVEL_NONE | 只读 | enum | 表示通知不发布 | +| LEVEL_MIN | 只读 | enum | 表示通知可以发布,但不在状态栏显示,不自动弹出,无提示音;该级别不适用于前台服务的场景 | +| LEVEL_LOW | 只读 | enum | 表示通知发布后在状态栏显示,不自动弹出,无提示音 | +| LEVEL_DEFAULT | 只读 | enum | 表示通知发布后在状态栏显示,不自动弹出,触发提示音 | +| LEVEL_HIGH | 只读 | enum | 表示通知发布后在状态栏显示,自动弹出,触发提示音 | + + + +##### NotificationRequest类型说明 + +NotificationRequest用于设置具体的通知对象,包括设置通知的属性,如:通知的分发时间、小图标、大图标、自动删除等参数,以及设置具体的通知类型,如普通文本、长文本等。 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------------- | -------- | ------------------------------- | ---- | -------------------------- | +| content | 读、写 | NotificationContent | 是 | 通知内容 | +| id | 读、写 | number | 否 | 通知ID | +| slotType | 读、写 | SlotType | 否 | 通道类型 | +| isOngoing | 读、写 | boolean | 否 | 是否进行时通知 | +| isUnremovable | 读、写 | boolean | 否 | 是否可移除 | +| deliveryTime | 读、写 | number | 否 | 通知发送时间 | +| tapDismissed | 读、写 | boolean | 否 | 通知是否自动清除 | +| autoDeletedTime | 读、写 | number | 否 | 自动清除的时间 | +| wantAgent | 读、写 | WantAgent | 否 | 点击跳转的WantAgent | +| extraInfo | 读、写 | {[key: string]: any} | 否 | 扩展参数 | +| color | 读、写 | number | 否 | 通知背景颜色 | +| colorEnabled | 读、写 | boolean | 否 | 通知背景颜色是否使能 | +| isAlertOnce | 读、写 | boolean | 否 | 设置是否仅有一次此通知警报 | +| isStopwatch | 读、写 | boolean | 否 | 是否显示已用时间 | +| isCountDown | 读、写 | boolean | 否 | 是否显示倒计时时间 | +| isFloatingIcon | 读、写 | boolean | 否 | 是否显示状态栏图标 | +| isFloatingIcon | 读、写 | boolean | 否 | 是否显示状态栏图标 | +| label | 读、写 | string | 否 | 通知标签 | +| badgeIconStyle | 读、写 | number | 否 | 通知角标类型 | +| showDeliveryTime | 读、写 | boolean | 否 | 是否显示分发时间 | +| actionButtons | 读、写 | Array | 否 | 通知按钮,最多两个按钮 | +| smallIcon | 读、写 | PixelMap | 否 | 通知小图标 | +| largeIcon | 读、写 | PixelMap | 否 | 通知大图标 | +| creatorBundleName | 只读 | string | 否 | 创建通知的包名 | +| creatorUid | 只读 | number | 否 | 创建通知的UID | +| creatorPid | 只读 | number | 否 | 创建通知的PID | +| hashCode | 只读 | string | 否 | 通知唯一标识 | + +- NotificationContent类型说明 + + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ----------- | -------- | ---------------------------- | ---- | -------------------- | +| contentType | 读、写 | ContentType | 是 | 通知内容类型 | +| normal | 读、写 | NotificationBasicContent | 否 | 普通类型通知内容 | +| longText | 读、写 | NotificationLongTextContent | 否 | 长文本类型通知内容 | +| multiLine | 读、写 | NotificationMultiLineContent | 否 | 多行文本类型通知内容 | +| picture | 读、写 | NotificationPictureContent | 否 | 图片类型通知内容 | + +- ContentType类型说明 + +| 名称 | 读写属性 | 类型 | 描述 | +| --------------------------------- | -------- | ---- | ---------------- | +| NOTIFICATION_CONTENT_BASIC_TEXT | 只读 | enum | 普通类型通知 | +| NOTIFICATION_CONTENT_LONG_TEXT | 只读 | enum | 长文本类型通知 | +| NOTIFICATION_CONTENT_PICTURE | 只读 | enum | 图片类型通知 | +| NOTIFICATION_CONTENT_CONVERSATION | 只读 | enum | 社交类型通知 | +| NOTIFICATION_CONTENT_MULTILINE | 只读 | enum | 多行文本类型通知 | + +- NotificationBasicContent类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------------- | -------- | ------ | ---- | -------------------------------- | +| title | 读、写 | string | 是 | 通知标题 | +| text | 读、写 | string | 是 | 通知内容 | +| additionalText | 读、写 | string | 是 | 通知次要内容,是对通知内容的补充 | + +- NotificationLongTextContent类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ------------- | -------- | ------ | ---- | ---------------------- | +| title | 读、写 | string | 是 | 通知标题 | +| text | 读、写 | string | 是 | 通知内容 | +| additionalText | 读、写 | string | 是 | 通知次要内容,是对通知内容的补充 | +| longText | 读、写 | string | 是 | 通知的长文本 | +| briefText | 读、写 | string | 是 | 通知概要内容,是对通知内容的总结 | +| expandedTitle | 读、写 | string | 是 | 通知展开时的标题 | + +- NotificationMultiLineContent类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| --------- | -------- | ------------- | ---- | ---------------------- | +| title | 读、写 | string | 是 | 通知标题 | +| text | 读、写 | string | 是 | 通知内容 | +| additionalText | 读、写 | string | 是 | 通知次要内容,是对通知内容的补充 | +| briefText | 读、写 | string | 是 | 通知概要内容,是对通知内容的总结 | +| longTitle | 读、写 | string | 是 | 通知展开时的标题 | +| lines | 读、写 | Array | 是 | 通知的多行文本 | + +- NotificationPictureContent类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------------- | -------- | -------------- | ---- | -------------------------------- | +| title | 读、写 | string | 是 | 通知标题 | +| text | 读、写 | string | 是 | 通知内容 | +| additionalText | 读、写 | string | 是 | 通知次要内容,是对通知内容的补充 | +| briefText | 读、写 | string | 是 | 通知概要内容,是对通知内容的总结 | +| expandedTitle | 读、写 | string | 是 | 通知展开时的标题 | +| picture | 读、写 | image.PixelMap | 是 | 通知的图片内容 | + +- NotificationActionButton类型说明 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| --------- | -------- | -------------- | ---- | ------------------------- | +| title | 读、写 | string | 是 | 按钮标题 | +| wantAgent | 读、写 | wantAgent | 是 | 点击按钮时触发的WantAgent | +| extras | 读、写 | Array | 否 | 按钮扩展信息 | +| icon | 读、写 | image.PixelMap | 否 | 按钮图标 | + + + +##### 创建通知通道 + +- 创建通知通道(callback形式) + + Notification.addSlot(type: SlotType, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | ---------------------- | + | type | 只读 | SlotType | 是 | 要创建的通知通道的类型 | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //addslot回调 + function addSlotCallBack(err) { + console.info("==========================>addSlotCallBack=======================>"); + } + Notification.addSlot(SOCIAL_COMMUNICATION, addSlotCallBack) + ``` + + + +- 创建通知通道(Promise形式) + + Notification.addSlot(type: SlotType) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ---- | -------- | -------- | ---- | ---------------------- | + | type | 只读 | SlotType | 是 | 要创建的通知通道的类型 | + + - 返回值 + + Promise<**void**> + + - 示例代码 + + ```js + Notification.addSlot(SOCIAL_COMMUNICATION).then((void) => { + console.info("==========================>addSlotCallback=======================>"); + }); + ``` + + + +##### 获取通知通道 + +- 获取一个通知通道(callback形式) + + Notification.getSlot(slotType: SlotType, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------------------- | ---- | ----------------------------------------------------------- | + | slotType | 只读 | slotType | 是 | 通知渠道类型,目前分为社交通信、服务提醒、内容咨询和其他类型 | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //getSlot回调 + function getSlotCallback(err,data) { + console.info("==========================>getSlotCallback=======================>"); + } + var slotType = SOCIAL_COMMUNICATION; + Notification.getSlot(slotType, getSlotCallback) + ``` + + + +- 获取一个通知通道(Promise形式) + + Notification.getSlot(slotType) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | -------- | ---- | ----------------------------------------------------------- | + | slotType | 只读 | slotType | 是 | 通知渠道类型,目前分为社交通信、服务提醒、内容咨询和其他类型 | + + - 返回值 + + Promise + + - 示例代码 + + ```js + var slotType = SOCIAL_COMMUNICATION; + Notification.getSlot(slotType).then((data) => { + console.info("==========================>getSlotCallback=======================>"); + }); + ``` + + + +- 获取本应用程序的所有通知通道(callback形式) + + Notification.getSlots(callback: AsyncCallback>) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------------------- | ---- | -------------------- | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //getSlots回调 + function getSlotsCallback(err,data) { + console.info("==========================>getSlotsCallback=======================>"); + } + Notification.getSlots(getSlotsCallback) + ``` + + + +- 获取此应用程序的所有通知通道(Promise形式) + + Notification.getSlots() + + - 参数描述 + + 无参数 + + - 返回值 + + Promise> + + - 示例代码 + + ```js + Notification.getSlots().then((data) => { + console.info("==========================>getSlotsCallback=======================>"); + }); + ``` + + + +##### 删除通知通道 + +- 根据通知通道类型删除通知通道(callback形式) + + Notification.removeSlot(slotType: SlotType, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | ----------------------------------------------------------- | + | SlotType | 只读 | SlotType | 是 | 通知渠道类型,目前分为社交通信、服务提醒、内容咨询和其他类型 | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //removeSlot回调 + function removeSlotCallback(err) { + console.info("==========================>removeSlotCallback=======================>"); + } + var slotType = SOCIAL_COMMUNICATION; + Notification.removeSlot(slotType, removeSlotCallback) + ``` + + + +- 根据通知通道类型删除通知通道(Promise形式) + + Notification.removeSlot(slotType: SlotType) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | -------- | ---- | ----------------------------------------------------------- | + | SlotType | 只读 | SlotType | 是 | 通知渠道类型,目前分为社交通信、服务提醒、内容咨询和其他类型 | + + - 返回值 + + Promise<**void**> + + - 示例代码 + + ```js + var slotType = SOCIAL_COMMUNICATION; + Notification.removeSlot(slotType).then((void) => { + console.info("==========================>removeSlotCallback=======================>"); + }); + ``` + + + +- 删除所有通知通道(callback形式) + + Notification.removeAllSlots(callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | -------------------- | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + function removeAllSlotsCallBack(err) { + console.info("================>removeAllSlotsCallBack=======================>"); + } + Notification.removeAllSlots(removeAllCallBack) + ``` + + + +- 删除所有通知通道(Promise形式) + + Notification.removeAllSlots() + + - 参数描述 + + 无参数 + + - 返回值 + + Promise<**void**> + + - 示例代码 + + ```js + Notification.removeAllSlots().then((void) => { + console.info("==========================>removeAllSlotsCallBack=======================>"); + }); + ``` + + + +##### 发布通知 + +- 发布通知(callback形式) + + Notification.publish(request: NotificationRequest, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | ------------------------------------------- | + | request | 只读 | NotificationRequest | 是 | 设置要发布通知内容的NotificationRequest对象 | + | callback | 只读 | AsyncCallback | 是 | 被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //publish回调 + function publishCallback(err) { + console.info("==========================>publishCallback=======================>"); + } + //通知Request对象 + var request = { + id: 1, + content: { + contentType: notify.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + normal: { + title: "test_title", + text: "test_text", + additionalText: "test_additionalText" + } + } + } + Notification.publish(request, publishCallback); + ``` + + + + +- 发布通知(Promise形式) + + Notification.publish(request: NotificationRequest) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ------- | -------- | ------------------- | ---- | ------------------------------------------- | + | request | 只读 | NotificationRequest | 是 | 设置要发布通知内容的NotificationRequest对象 | + + - 返回值 + + Promise<**void**> + + - 示例代码 + + ```js + //通知Request对象 + var notificationRequest = { + notificationId: 1, + content: { + contentType: notify.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + normal: { + title: "test_title", + text: "test_text", + additionalText: "test_additionalText" + } + } + } + Notification.publish(notificationRequest).then((void) => { + ``` + + console.info("==========================>publishCallback=======================>"); + }); + ``` + + + +##### 取消通知 + +- 取消指定通知(callback形式) + + Notification.cancel(id: number, label: string, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | -------------------- | + | id | 只读 | number | 是 | 通知ID | + | lable | 只读 | string | 是 | 通知标签 | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //cancel回调 + function cancelCallback(err) { + console.info("==========================>cancelCallback=======================>"); + } + Notification.cancel(0, "label", cancelCallback) + ``` + + + +- 取消指定通知(Promise形式) + + Notification.cancel(id:number, label?:string) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ----- | -------- | ------ | ---- | -------- | + | id | 只读 | number | 是 | 通知ID | + | lable | 只读 | string | 是 | 通知标签 | + + - 返回值 + + Promise<**void**> + + - 示例代码 + + ```js + Notification.cancel(0).then((void) => { + console.info("==========================>cancelCallback=======================>"); + }); + ``` + + + +- 取消指定id通知(callback形式) + + Notification.cancel(id: number, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | -------------------- | + | id | 只读 | number | 是 | 通知ID | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //cancel回调 + function cancelCallback(err) { + console.info("==========================>cancelCallback=======================>"); + } + Notification.cancel(0, cancelCallback) + ``` + + + +- 取消所有已发布的通知(callback形式) + + Notification.cancelAll(callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | -------------------- | + | callback | 只读 | AsyncCallback | 是 | 表示被指定的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + //cancel回调 + function cancelAllback(err) { + console.info("==========================>cancelAllback=======================>"); + } + Notification.cancelAll(cancelCallback) + ``` + + + +- 取消所有已发布的通知(Promise形式) + + Notification.cancelAll() + + - 参数描述 + + 无参数 + + - 返回值 + + Promise + + - 示例代码 + + ```js + Notification.cancelAll().then((void) => { + ``` + + console.info("==========================>cancelAllback=======================>"); + }); + ``` + + + +##### 获取当前应用活动通知 + +- 获取当前应用的活动通知数(Callback形式) + + Notification.getActiveNotificationCount(callback: AsyncCallback<**number**>) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------------- | ---- | ---------------------- | + | callback | 只读 | AsyncCallback<**number**> | 是 | 获取活动通知数回调函数 | + + - 返回值 + + void + + - 示例代码 + + ```js + function getActiveNotificationCountCallback(err, data) { + console.info("==========================>getActiveNotificationCountCallback=======================>"); + } + Notification.getActiveNotificationCount(getActiveNotificationCountCallback); + ``` + + + +- 获取当前应用的活动通知数(Promise形式) + + Notification.getActiveNotificationCount() + + - 参数描述 + + 无 + + - 返回值 + + Promise<**number**> + + - 示例代码 + + ```js + Notification.getActiveNotificationCount().then((data) => { + console.info("==========================>getActiveNotificationCountCallback=======================>"); + }); + ``` + + + +- 获取当前应用的活动通知(Callback形式) + + Notification.getActiveNotifications(callback: AsyncCallback>) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ----------------------------------------- | ---- | ------------------------------ | + | callback | 只读 | AsyncCallback> | 是 | 获取当前应用的活动通知回调函数 | + + - 返回值 + + void + + - 示例代码 + + ```js + function getActiveNotificationsCallback(err, data) { + console.info("==========================>getActiveNotificationsCallback=======================>"); + } + Notification.getActiveNotifications(getActiveNotificationsCallback); + ``` + + + +- 获取当前应用的活动通知(Promise形式) + + Notification.getActiveNotifications() + + - 参数描述 + + 无 + + - 返回值 + + Promise> + + - 示例代码 + + ```js + Notification.getActiveNotifications().then((data) => { + console.info("==========================>getActiveNotificationsCallback=======================>"); + }); + ``` + + + +#### WantAgent接口 + +##### 导入模块 + +```js +import WantAgent from '@ohos.wantAgent'; +``` + + + +##### WantAgentInfo类型说明 + +WantAgentInfo类封装了获取一个WantAgent实例所需的数据。 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| -------------- | -------- | ------------------------------- | ---- | ---------------------- | +| wants | 读、写 | Array | 是 | 将被执行的动作列表 | +| operationType | 读、写 | wantAgent.OperationType | 是 | 动作类型 | +| requestCode | 读、写 | number | 是 | 使用者定义的一个私有值 | +| wantAgentFlags | 读、写 | Array | 否 | 动作执行属性 | +| extraInfo | 读、写 | {[key: string]: any} | 否 | 额外数据 | + +- OperationType类型说明 + +| 名称 | 读写属性 | 类型 | 描述 | +| ----------------- | -------- | ---- | ----------------------- | +| UNKNOWN_TYPE | 只读 | enum | 不识别的类型 | +| START_ABILITY | 只读 | enum | 开启一个有页面的Ability | +| START_ABILITIES | 只读 | enum | 开启多个有页面的Ability | +| START_SERVICE | 只读 | enum | 开启一个无页面的ability | +| SEND_COMMON_EVENT | 只读 | enum | 发送一个公共事件 | + +- WantAgentFlags类型说明 + + +| 名称 | 读写属性 | 类型 | 描述 | +| ------------------- | -------- | ---- | ------------------------------------------------------------ | +| ONE_TIME_FLAG | 只读 | enum | WantAgent仅能使用一次 | +| NO_BUILD_FLAG | 只读 | enum | 如果描述WantAgent对象不存在,则不创建它,直接返回null | +| CANCEL_PRESENT_FLAG | 只读 | enum | 在生成一个新的WantAgent对象前取消已存在的一个WantAgent对象 | +| UPDATE_PRESENT_FLAG | 只读 | enum | 使用新的WantAgent的额外数据替换已存在的WantAgent中的额外数据 | +| CONSTANT_FLAG | 只读 | enum | WantAgent是不可变的 | +| REPLACE_ELEMENT | 只读 | enum | 当前Want中的element属性可被WantAgent.trigger()中Want的element属性取代 | +| REPLACE_ACTION | 只读 | enum | 当前Want中的action属性可被WantAgent.trigger()中Want的action属性取代 | +| REPLACE_URI | 只读 | enum | 当前Want中的uri属性可被WantAgent.trigger()中Want的uri属性取代 | +| REPLACE_ENTITIES | 只读 | enum | 当前Want中的entities属性可被WantAgent.trigger()中Want的entities属性取代 | +| REPLACE_BUNDLE | 只读 | enum | 当前Want中的bundleName属性可被WantAgent.trigger()中Want的bundleName属性取代 | + + + +##### TriggerInfo类型说明 + +TriggerInfo类封装了主动激发一个WantAgent实例所需的数据。 + +| 名称 | 读写属性 | 类型 | 必填 | 描述 | +| ---------- | -------- | -------------------- | ---- | ----------- | +| code | 读、写 | number | 是 | result code | +| want | 读、写 | Want | 否 | Want | +| permission | 读、写 | string | 否 | 权限定义 | +| extraInfo | 读、写 | {[key: string]: any} | 否 | 额外数据 | + + + +##### 创建WantAgent + +- 创建WantAgent(callback形式) + + WantAgent.getWantAgent(info: WantAgentInfo, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------------ | ---- | ----------------------- | + | info | 只读 | WantAgentInfo | 是 | WantAgent信息 | + | callback | 只读 | AsyncCallback | 是 | 创建WantAgent的回调方法 | + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + ``` + + + +- 创建WantAgent(Promise形式) + + WantAgent.getWantAgent(info: WantAgentInfo): Promise + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ---- | -------- | ------------- | ---- | ------------- | + | info | 只读 | WantAgentInfo | 是 | WantAgent信息 | + - 返回值 + + Promise + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + wantAgent.getWantAgent(wantAgentInfo).then((data) => { + ``` + + console.info("==========================>getWantAgentCallback=======================>"); + }); + ``` + + + +##### 获取WantAgent实例的包名 + +- 获取WantAgent实例的包名(callback形式) + + WantAgent.getBundleName(agent: WantAgent, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | --------------------- | ---- | ---------------------------------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | callback | 只读 | AsyncCallback | 是 | 获取WantAgent指定的bundle name的回调方法 | + + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + //wantAgent对象 + var WantAgent; + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + if (err.code == 0) { + WantAgent = data; + } else { + console.info('----getWantAgent failed!----'); + } + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + //getBundleName回调 + function getBundleNameCallback(err, data) { + console.info("==========================>getBundleNameCallback=======================>"); + } + wantAgent.getBundleName(WantAgent, getBundleNameCallback) + ``` + + + +- 获取WantAgent实例的包名(Promise形式) + + WantAgent.getBundleName(agent: WantAgent): Promise + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ----- | -------- | --------- | ---- | ------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + - 返回值 + + Promise + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + //wantAgent对象 + var WantAgent; + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + wantAgent.getWantAgent(wantAgentInfo).then((data) => { + console.info("==========================>getWantAgentCallback=======================>"); + WantAgent = data; + }); + wantAgent.getBundleName(WantAgent).then((data) => { + console.info("==========================>getBundleNameCallback=======================>"); + }); + ``` + + + + +##### 获取WantAgent实例的用户ID + +- 获取WantAgent实例的用户ID(callback形式) + + WantAgent.getUid(agent: WantAgent, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | --------------------- | ---- | ----------------------------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | callback | 只读 | AsyncCallback | 是 | 获取WantAgent实例的用户ID的回调方法 | + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent; + + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + if (err.code == 0) { + WantAgent = data; + } else { + console.info('----getWantAgent failed!----'); + } + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + + //getUid回调 + function getUidCallback(err, data) { + console.info("==========================>getUidCallback=======================>"); + } + wantAgent.getUid(WantAgent, getUidCallback) + ``` + + + +- 获取WantAgent实例的用户ID(Promise形式) + + WantAgent.getUid(agent: WantAgent): Promise + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ----- | -------- | --------- | ---- | ------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + - 返回值 + + Promise + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent; + + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo).then((data) => { + console.info("==========================>getWantAgentCallback=======================>"); + WantAgent = data; + }); + + wantAgent.getUid(WantAgent).then((data) => { + console.info("==========================>getUidCallback=======================>"); + }); + ``` + + + +##### 取消WantAgent实例 + +- 取消WantAgent实例(callback形式) + + WantAgent.cancel(agent: WantAgent, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | -------- | -------- | ------------------- | ---- | --------------------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | callback | 只读 | AsyncCallback | 是 | 取消WantAgent实例的回调方法 | + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent; + + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + if (err.code == 0) { + WantAgent = data; + } else { + console.info('----getWantAgent failed!----'); + } + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + + //cancel回调 + function cancelCallback(err, data) { + console.info("==========================>cancelCallback=======================>"); + } + wantAgent.cancel(WantAgent, cancelCallback) + ``` + + + +- 取消WantAgent实例(Promise形式) + + WantAgent.cancel(agent: WantAgent): Promise + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ----- | -------- | --------- | ---- | ------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + - 返回值 + + Promise + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent; + + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo).then((data) => { + console.info("==========================>getWantAgentCallback=======================>"); + WantAgent = data; + }); + + wantAgent.cancel(WantAgent).then((data) => { + console.info("==========================>cancelCallback=======================>"); + }); + ``` + + + + +##### 主动激发WantAgent实例 + +- 主动激发WantAgent实例(callback形式) + + WantAgent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ----------- | -------- | --------------------------- | ---- | ------------------------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | triggerInfo | 只读 | TriggerInfo | 是 | TriggerInfo对象 | + | callback | 只读 | AsyncCallback | 是 | 主动激发WantAgent实例的回调方法 | + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent; + + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + if (err.code == 0) { + WantAgent = data; + } else { + console.info('----getWantAgent failed!----'); + } + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + + //cancel回调 + function triggerCallback(err, data) { + console.info("==========================>triggerCallback=======================>"); + } + wantAgent.trigger(WantAgent, triggerCallback) + ``` + + + + +##### 判断两个WantAgent实例是否相等 + +- 判断两个WantAgent实例是否相等(callback形式) + + WantAgent.equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback) + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ---------- | -------- | ---------------------- | ---- | --------------------------------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | otherAgent | 只读 | WantAgent | 是 | WantAgent对象 | + | callback | 只读 | AsyncCallback | 是 | 判断两个WantAgent实例是否相等的回调方法 | + - 返回值 + + void + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent1; + var WantAgent2; + + //getWantAgent回调 + function getWantAgentCallback(err, data) { + console.info("==========================>getWantAgentCallback=======================>"); + if (err.code == 0) { + WantAgent1 = data; + WantAgent2 = data; + } else { + console.info('----getWantAgent failed!----'); + } + } + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) + + //cancel回调 + function equalCallback(err, data) { + console.info("==========================>equalCallback=======================>"); + } + wantAgent.equal(WantAgent1, WantAgent1, equalCallback) + ``` + + + +- 判断两个WantAgent实例是否相等(Promise形式) + + WantAgent.equal(agent: WantAgent, otherAgent: WantAgent): Promise + + - 参数描述 + + | 名称 | 读写属性 | 类型 | 必填 | 描述 | + | ---------- | -------- | --------- | ---- | ------------- | + | agent | 只读 | WantAgent | 是 | WantAgent对象 | + | otherAgent | 只读 | WantAgent | 是 | WantAgent对象 | + - 返回值 + + Promise + + - 示例代码 + + ```js + import wantAgent from '@ohos.wantAgent'; + import { OperationType, Flags } from '@ohos.wantagent'; + + //wantAgent对象 + var WantAgent1; + var WantAgent2; + + //WantAgentInfo对象 + var wantAgentInfo = { + wants: [ + { + deviceId: "deviceId", + bundleName: "com.neu.setResultOnAbilityResultTest1", + abilityName: "com.example.test.MainAbility", + action: "action1", + entities: ["entity1"], + type: "MIMETYPE", + uri: "key={true,true,false}", + parameters: + { + mykey0: 2222, + mykey1: [1, 2, 3], + mykey2: "[1, 2, 3]", + mykey3: "ssssssssssssssssssssssssss", + mykey4: [false, true, false], + mykey5: ["qqqqq", "wwwwww", "aaaaaaaaaaaaaaaaa"], + mykey6: true, + } + } + ], + operationType: OperationType.START_ABILITIES, + requestCode: 0, + wantAgentFlags:[Flags.UPDATE_PRESENT_FLAG] + } + + wantAgent.getWantAgent(wantAgentInfo).then((data) => { + console.info("==========================>getWantAgentCallback=======================>"); + WantAgent = data; + }); + + wantAgent.equal(WantAgent1, WantAgent2).then((data) => { + console.info("==========================>equalCallback=======================>"); + }); + ``` + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/docs/_posts/zh-cn/application-dev/ability/page-ability.md b/website/docs/_posts/zh-cn/application-dev/ability/page-ability.md new file mode 100644 index 0000000000000000000000000000000000000000..6c9b098eee82ad48220c8be846ac4f5429b11a11 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ability/page-ability.md @@ -0,0 +1,140 @@ +--- +title: page-ability +permalink: /pages/extra/7e1a42/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# PageAbility开发说明 + +## PageAbility介绍 + +Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供与用户交互的能力。 + +## PageAbility的生命周期 + +**Ability生命周期介绍**(Ability Life Cycle)是Ability被调度到INACTIVE、ACTIVE、BACKGROUND等各个状态的统称(主要涉及PageAbility类型和ServiceAbility类型的Ability)。 + + - **PageAbility类型的Ability生命周期流转如下图所示** + +![PageAbility-Lifecycle](/images/application-dev/ability/figures/page-ability-lifecycle.png) + + +**Ability生命周期状态说明:** + + - **UNINITIALIZED**:未初始状态,为临时状态,Ability被创建后会由UNINITIALIZED状态进入INITIAL状态。 + + - **INITIAL**:初始化状态,也表示停止状态,表示当前Ability未运行,Ability被启动后由INITIAL态进入INACTIVE状态。 + + - **INACTIVE**:未激活状态,表示当前窗口已显示但是无焦点状态,由于Window暂未支持焦点的概念,当前状态与ACTIVE一致。 + + - **ACTIVE**:前台激活状态,表示当前窗口已显示,并获取焦点,Ability在退到后台之前先由ACTIVE状态进入INACTIVE状态。 + + - **BACKGROUND**: 后台状态,表示当前Ability退到后台,Ability在被销毁后由BACKGROUND状态进入INITIAL状态,或者重新被激活后由BACKGROUND状态进入ACTIVE状态。 + +**PageAbility类型Ability生命周期回调如下图所示:** + +![PageAbility-Lifecycel-Callbacks](/images/application-dev/ability/figures/page-ability-lifecycle-callbacks.png) + + + +## 启动本地PageAbility + + 导入模块 + +``` +import featureAbility from '@ohos.ability.featureAbility' +``` +``` + FeatureAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback) +``` + +* 接口说明 + + 启动新的ability(callback形式) + +* 示例 + +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.startAbility( + { + want: + { + action: "", + entities: [""], + type: "", + options: { + // indicates the grant to perform read operations on the URI + authReadUriPermission: true, + // indicates the grant to perform write operations on the URI + authWriteUriPermission: true, + // support forward intent result to origin ability + abilityForwardResult: true, + // used for marking the ability start-up is triggered by continuation + abilityContinuation: true, + // specifies whether a component does not belong to ohos + notOhosComponent: true, + // specifies whether an ability is started + abilityFormEnabled: true, + // indicates the grant for possible persisting on the URI. + authPersistableUriPermission: true, + // indicates the grant for possible persisting on the URI. + authPrefixUriPermission: true, + // support distributed scheduling system start up multiple devices + abilitySliceMultiDevice: true, + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. + startForegroundAbility: true, + // install the specified ability if it's not installed. + installOnDemand: true, + // return result to origin ability slice + abilitySliceForwardResult: true, + // install the specified ability with background mode if it's not installed. + installWithBackgroundMode: true + }, + deviceId: "", + bundleName: "com.example.startability", + abilityName: "com.example.startability.MainAbility", + uri: "" + }, + }, + ); +) +``` +## 启动远程PageAbility + + 导入模块 + +``` +import featureAbility from '@ohos.ability.featureAbility' +``` + +``` +FeatureAbility.startAbility(parameter: StartAbilityParameter) +``` +* 接口说明 + + 启动远程的ability(promise形式) + 前提:通过deviceManager获取远程deviceid + +* 示例 + +```javascript + var promise = await ability.startAbility( + { + want: + { + deviceId: this.deviceId, + bundleName: "com.example.test", + abilityName: "com.example.test.MainAbility", + }, + } + ); +``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ability/service-ability.md b/website/docs/_posts/zh-cn/application-dev/ability/service-ability.md new file mode 100644 index 0000000000000000000000000000000000000000..3153acbaa11c10674c6f3cad08b36554079fc4c9 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ability/service-ability.md @@ -0,0 +1,279 @@ +--- +title: service-ability +permalink: /pages/extra/bb36f5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# ServiceAbility开发说明 + +## 创建Service + +1. Service也是一种Ability,Ability为Service提供了以下生命周期方法,开发者可以重写这些方法,来添加其他Ability请求与Service Ability交互时的处理方法。 + + - onStart() + + 该方法在创建Service的时候调用,用于Service的初始化。在Service的整个生命周期只会调用一次,调用时传入的Want应为空。 + + - onCommand() + + 在Service创建完成之后调用,该方法在客户端每次启动该Service时都会调用,开发者可以在该方法中做一些调用统计、初始化类的操作。 + + - onConnect() + + 在Ability和Service连接时调用,该方法返回IRemoteObject对象,开发者可以在该回调函数中生成对应Service的IPC通信通道,以便Ability与Service交互。Ability可以多次连接同一个Service,系统会缓存该Service的IPC通信对象,只有第一个客户端连接Service时,系统才会调用Service的onConnect方法来生成IRemoteObject对象,而后系统会将同一个IRemoteObject对象传递至其他连接同一个Service的所有客户端,而无需再次调用onConnect方法。 + + - onDisconnect() + + 在Ability与绑定的Service断开连接时调用。 + + - onStop() + + 在Service销毁时调用。Service应通过实现此方法来清理任何资源,如关闭线程、注册的侦听器等。 + + 创建Service的代码示例如下: + + ```javascript + export default { + onStart(want) { + console.log('SerivceAbility onStart'); + }, + onCommand(want, restart, startId) { + console.log('SerivceAbility onCommand'); + }, + onConnect(want) { + console.log('SerivceAbility OnConnect'); + }, + onDisconnect() { + console.log('SerivceAbility OnDisConnect'); + }, + onStop() { + console.log('SerivceAbility onStop'); + }, + } + ``` + +2. 注册Service。 + + Service也需要在应用配置文件config.json中进行注册,注册类型type需要设置为service。 + + ```javascript + { + "module": { + "abilities": [ + { + "name": ".ServiceAbility", + "type": "service", + "visible": true + ... + } + ] + ... + } + ... + } + ``` + + + + +## 启动Service + +Ability为开发者提供了startAbility()方法来启动另外一个Ability。因为Service也是Ability的一种,开发者同样可以通过将Want传递给该方法来启动Service。 + +开发者可以通过构造包含BundleName与AbilityName的Want对象来设置目标Service信息。参数的含义如下: + +- BundleName:表示包名称。 +- AbilityName:表示待启动的Ability名称。 + +启动本地设备Service的代码示例如下: + +```javascript +import featureAbility from '@ohos.ability.featureability'; +var promise = await featureAbility.startAbility( + { + want: + { + bundleName: "com.jstest.serviceability", + abilityName: "com.jstest.serviceability.MainAbility", + }, + } +); +``` + +- 执行上述代码后,Ability将通过startAbility() 方法来启动Service。 + - 如果Service尚未运行,则系统会先调用onStart()来初始化Service,再回调Service的onCommand()方法来启动Service。 + - 如果Service正在运行,则系统会直接回调Service的onCommand()方法来启动Service。 + +- 停止Service + + Service一旦创建就会一直保持在后台运行,除非必须回收内存资源,否则系统不会停止或销毁Service。开发者可以在Service中通过terminateAbility()停止本Service或在其他Ability调用stopAbility()来停止Service。 + + + +## 连接本地Service + +如果Service需要与Page Ability或其他应用的Service Ability进行交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行连接。 + +在使用connectAbility()处理回调时,需要传入目标Service的Want与IAbilityConnection的实例。IAbilityConnection提供了以下方法供开发者实现:onConnect()是用来处理连接Service成功的回调,onDisconnect()是用来处理Service异常死亡的回调,onFailed()是用来处理连接Service失败的回调。 + +创建连接本地Service回调实例的代码示例如下: + +```javascript +var mRemote; +function onConnectCallback(element, remote){ + console.log('ConnectAbility onConnect Callback') + mRemote = remote; +} + +function onDisconnectCallback(element){ + console.log('ConnectAbility onDisconnect Callback') +} + +function onFailedCallback(code){ + console.log('ConnectAbility onFailed Callback') +} +``` + +连接本地Service的代码示例如下: + +```javascript +import featureAbility from '@ohos.ability.featureability'; +var connId = featureAbility.connectAbility( + { + bundleName: "com.jstest.serviceability", + abilityName: "com.jstest.serviceability.MainAbility", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +``` + +同时,Service侧也需要在onConnect()时返回IRemoteObject,从而定义与Service进行通信的接口。onConnect()需要返回一个IRemoteObject对象,OpenHarmony提供了IRemoteObject的默认实现,用户可以通过继承rpc.RemoteObject来创建自定义的实现类。 + +Service侧把自身的实例返回给调用侧的代码示例如下: + +```javascript +import rpc from "@ohos.rpc"; + +var mMyStub; +export default { + onStart(want) { + class MyStub extends rpc.RemoteObject{ + constructor(des) { + if (typeof des === 'string') { + super(des); + } + return null; + } + onRemoteRequest(code, message, reply, option) { + } + } + mMyStub = new MyStub("ServiceAbility-test"); + }, + onCommand(want, restart, startId) { + console.log('SerivceAbility onCommand'); + }, + onConnect(want) { + console.log('SerivceAbility OnConnect'); + return mMyStub; + }, + onDisconnect() { + console.log('SerivceAbility OnDisConnect'); + }, + onStop() { + console.log('SerivceAbility onStop'); + }, +} +``` + +## 连接远程Service + +如果Service需要与Page Ability或其他应用的Service Ability进行跨设备交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行跨设备连接。 + +在使用connectAbility()处理回调时,需要传入目标Service的Want与IAbilityConnection的实例。IAbilityConnection提供了以下方法供开发者实现:onConnect()是用来处理连接Service成功的回调,onDisconnect()是用来处理Service异常死亡的回调,onFailed()是用来处理连接Service失败的回调。 + +创建连接远程Service回调实例的代码示例如下: + +```javascript +var mRemote; +function onConnectCallback(element, remote){ + console.log('ConnectRemoteAbility onConnect Callback') + mRemote = remote; +} + +function onDisconnectCallback(element){ + console.log('ConnectRemoteAbility onDisconnect Callback') +} + +function onFailedCallback(code){ + console.log('ConnectRemoteAbility onFailed Callback') +} +``` + +目标Service的Want需要包含远程deviceId,该远程deviceId可通过deviceManager获取。 + +连接远程Service的代码示例如下: + +```javascript +import featureAbility from '@ohos.ability.featureability'; +var connId = featureAbility.connectAbility( + { + deviceId: deviceId, + bundleName: "com.jstest.serviceability", + abilityName: "com.jstest.serviceability.MainAbility", + }, + { + onConnect: onConnectCallback, + onDisconnect: onDisconnectCallback, + onFailed: onFailedCallback, + }, +); +``` + +同时,Service侧也需要在onConnect()时返回IRemoteObject,从而定义与Service进行通信的接口。onConnect()需要返回一个IRemoteObject对象,OpenHarmony提供了IRemoteObject的默认实现,用户可以通过继承rpc.RemoteObject来创建自定义的实现类。 + +Service侧把自身的实例返回给调用侧的代码示例如下: + +```javascript +import rpc from "@ohos.rpc"; + +var mMyStub; +export default { + onStart(want) { + class MyStub extends rpc.RemoteObject{ + constructor(des) { + if (typeof des === 'string') { + super(des); + } + return null; + } + onRemoteRequest(code, message, reply, option) { + } + } + mMyStub = new MyStub("ServiceAbility-test"); + }, + onCommand(want, restart, startId) { + console.log('SerivceAbility onCommand'); + }, + onConnect(want) { + console.log('SerivceAbility OnConnect'); + return mMyStub; + }, + onDisconnect() { + console.log('SerivceAbility OnDisConnect'); + }, + onStop() { + console.log('SerivceAbility onStop'); + }, +} +``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/application-dev-guide.md b/website/docs/_posts/zh-cn/application-dev/application-dev-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..7c1f6fd58042119c0be29d3b9d7a48f6f8ae3e34 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/application-dev-guide.md @@ -0,0 +1,23 @@ +--- +title: application-dev-guide +permalink: /pages/extra/d0fdd9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 应用开发导读 + +应用开发文档用于指导开发者通过OpenHarmony提供的接口完成应用开发。当前应用开发文档提供了在标准系统上开发应用的JS接口。 + +在这部分中,开发者可以通过“[入门](/pages/extra/348033/)”来了解应用开发的基本方法。完整的接口清单和参考使用指导可参见“[开发参考](/pages/extra/b87a8e/)”。 + +除此之外,为方便开发者对常用功能进行深入理解,还提供了[UI](/pages/extra/e9d6f1/)、[媒体](/pages/extra/56b10d/)、[网络与连接](/pages/extra/8cc6cb/)三个模块的开发指南。 + +如果需要了解各子系统的原理和基本信息,可以参考“docs/zh-cn/readme”目录中各子系统readme的介绍。 + diff --git a/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..1037461df03e5d78254421cc23306d67c3885225 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/Readme-CN.md @@ -0,0 +1,17 @@ +--- +title: Readme-CN +permalink: /pages/extra/3474ef/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 后台代理提醒 + +- [概述](/pages/extra/b47e74/) +- [开发指导](/pages/extra/584ff8/) diff --git a/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-guide.md b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..43060b8f1bbd4415a73ed69cd96a1681fa907cab --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-guide.md @@ -0,0 +1,280 @@ +--- +title: background-agent-scheduled-reminder-guide +permalink: /pages/extra/584ff8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 开发指导 + +## 场景介绍 + +后台代理提醒主要提供后台提醒发布接口,开发者在应用开发时,可以调用这些接口去创建定时提醒,包括倒计时、日历、闹钟三种提醒类型。使用后台代理提醒能力后,应用可以被冻结或退出,计时和弹出提醒的功能将被后台系统服务代理。 + + +## 接口说明 + +reminderAgent:封装了发布、取消提醒类通知的方法 + +**表1** reminderAgent主要接口 + +| 接口名 | 描述 | +| -------- | -------- | +| function publishReminder(reminderReq: ReminderRequest, callback: AsyncCallback<number>): void;
function publishReminder(reminderReq: ReminderRequest): Promise<number>; | 发布一个定时提醒类通知。
单个应用有效的提醒个数最多支持30个(不包括已经超时,即后续不会再提醒的提醒实例)
整个系统有效的提醒个数最多支持2000个(不包括已经超时,即后续不会再提醒的提醒实例) | +| function cancelReminder(reminderId: number, callback: AsyncCallback<void>): void;
function cancelReminder(reminderId: number): Promise<void>; | 取消一个指定的提醒类通知。(reminderId从publishReminder的返回值获取) | +| function getValidReminders(callback: AsyncCallback<Array<ReminderRequest>>): void;
function getValidReminders(): Promise<Array<ReminderRequest>>; | 获取当前应用设置的所有有效的提醒。 | +| function cancelAllReminders(callback: AsyncCallback<void>): void;
function cancelAllReminders(): Promise<void>; | 取消当前应用设置的所有提醒 | +| function addNotificationSlot(slot: NotificationSlot, callback: AsyncCallback<void>): void;
function addNotificationSlot(slot: NotificationSlot): Promise<void>; | 注册一个提醒类需要使用的NotificationSlot | +| function removeNotificationSlot(slotType: notification.SlotType, callback: AsyncCallback<void>): void;
function removeNotificationSlot(slotType: notification.SlotType): Promise<void>; | 删除指定类型的NotificationSlot | + +enum ActionButtonType: 在提醒弹出的通知界面上的按钮的类型。 + +**表2** ActionButtonType 枚举类型 + +| 枚举名 | 描述 | +| -------- | -------- | +| ACTION_BUTTON_TYPE_CLOSE | 指明是close按钮,点击后关闭当前提醒的铃声(如果正在响铃),关闭提醒的通知,取消延迟提醒。 | + +enum ReminderType: 提醒类型 + +**表3** ReminderType 提醒类型枚举 + +| 枚举名 | 描述 | +| -------- | -------- | +| REMINDER_TYPE_TIMER | 指明是倒计时类型 | +| REMINDER_TYPE_CALENDAR | 指明是日历类型 | +| REMINDER_TYPE_ALARM | 指明是闹钟类型 | + +interface ActionButton:在提醒弹出的通知界面上的按钮实例 + +**表4** ActionButton + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| title | string | 是 | 按钮上显示的名称 | +| type | ActionButtonType | 是 | 按钮的类型 | + +interface WantAgent: 设置点击通知后需要跳转的目标ability信息 + +**表5** WantAgent + +| 参数名 | 类型 | 是否必选 | 描述 | +| -------- | -------- | -------- | -------- | +| pkgName | string | 是 | 目标包的名称 | +| abilityName | string | 是 | 目标ability的名称 | + +interface MaxScreenWantAgent: 设置提醒到达时跳转的目标包。如果设备正在使用中,则弹出一个通知框 + +**表6** MaxScreenWantAgent + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| pkgName | string | 是 | 目标包的名称 | +| abilityName | string | 是 | 目标ability的名称 | + +interface ReminderRequest: 需要发布的提醒实例的信息 + +**表7** ReminderRequest + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| reminderType | ReminderType | 是 | 提醒的类型 | +| actionButton | [ActionButton?,ActionButton?] | 否 | 弹出的提醒通知栏中显示的按钮 | +| wantAgent | WantAgent | 否 | 点击通知后需要跳转的目标ability信息 | +| maxScreenWantAgent | MaxScreenWantAgent | 否 | 提醒到达时跳转的目标包。如果设备正在使用中,则弹出一个通知框 | +| ringDuration | number | 否 | 响铃时长 | +| snoozeTimes | number | 否 | 延迟提醒次数 | +| timeInterval | number | 否 | 延迟提醒间隔 | +| title | string | 否 | 提醒的标题 | +| content | string | 否 | 提醒的内容 | +| expiredContent | string | 否 | 提醒“过期”时显示的扩展内容 | +| snoozeContent | string | 否 | 提醒“再响”时显示的扩展内容 | +| notificationId | number | 否 | 提醒使用的notificationRequest的id,参见NotificationRequest.setNotificationId(int id) | +| slotType | SlotType | 否 | 提醒使用的slot类型 | + +interface ReminderRequestCalendar extends ReminderRequest: 日历类提醒实例。 + +第一次指定的目标时间必须大于当前时间。 + +**表8** ReminderRequestCalendar + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| dateTime | LocalDataTime | 是 | 设置目标时间 | +| repeatMonths | Array<number> | 否 | 设置重复提醒的月份 | +| repeatDays | Array<number> | 否 | 设置重复提醒的日期 | + +interface ReminderRequestAlarm extends ReminderRequest: 闹钟类提醒实例。 + +**表9** ReminderRequestAlarm + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| hour | number | 是 | 设置目标时间(小时) | +| minute | number | 是 | 设置目标时间(分钟) | +| daysOfWeek | Array<number> | 否 | 设置每个星期哪一天重复提醒 | + +interface ReminderRequestTimer extends ReminderRequest:倒计时提醒实例 + +**表10** ReminderRequestTimer + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| triggerTimeInSeconds | number | 是 | 设置倒计时秒数 | + +interface LocalDateTime:时间信息实例 + +**表11** LocalDateTime + +| 参数名 | 类型 | 必填 | 描述 | +| -------- | -------- | -------- | -------- | +| year | number | 是 | 年 | +| month | number | 是 | 月 | +| day | number | 是 | 日 | +| hour | number | 是 | 时 | +| minute | number | 是 | 分 | +| second | number | 否 | 秒 | + + +## 开发步骤 + +> ![icon-note.gif](/images/application-dev/background-agent-scheduled-reminder/public_sys-resources/icon-note.gif) **说明:** +> 应用需要配置权限:ohos.permission.PUBLISH_AGENT_REMINDER + +发布一个10秒倒计时提醒 + +1. 定义一个倒计时实例 + ``` + import reminderAgent from '@ohos.reminderAgent'; + import notification from '@ohos.notification';export default { + timer: { + reminderType: reminderAgent.ReminderType.REMINDER_TYPE_TIMER, + triggerTimeInSeconds: 10, + actionButton: [ + { + title: "close", + type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE + } + ], + wantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + maxScreenWantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + title: "this is title", + content: "this is content", + expiredContent: "this reminder has expired", + notificationId: 100, + slotType: notification.SlotType.SOCIAL_COMMUNICATION + } + } + ``` + +2. 发布提醒 + ``` + startTimer() { + reminderAgent.publishReminder(this.timer, (err, reminderId) =>{ + this.printInfo(JSON.stringify(err)); + this.printInfo("reminderId:" + reminderId); + }); + } + ``` + + html页面: + ``` +
+ +
+ ``` + +日历实例定义: + +``` +calendar: { + reminderType: reminderAgent.ReminderType.REMINDER_TYPE_CALENDAR, + dateTime: { + year: 2050, + month: 7, + day: 30, + hour: 11, + minute: 14, + second: 30 + }, + repeatMonths: [0], + repeatDays: [0], + actionButton: [ + { + title: "close", + type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE + }, + { + title: "snooze", + type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE + }, + ], + wantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + maxScreenWantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + ringDuration: 5, + snoozeTimes: 2, + timeInterval: 5, + title: "this is title", + content: "this is content", + expiredContent: "this reminder has expired", + snoozeContent: "remind later", + notificationId: 100, + slotType: notification.SlotType.SOCIAL_COMMUNICATION +} +``` + +闹钟实例定义: + +``` +alarm: { + reminderType: reminderAgent.ReminderType.REMINDER_TYPE_ALARM, + hour: 11, + minute: 14, + daysOfWeek: [0], + actionButton: [ + { + title: "close", + type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE + }, + { + title: "snooze", + type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE + }, + ], + wantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + maxScreenWantAgent: { + pkgName: "com.example.phone", + abilityName: "com.example.phone.MainAbility" + }, + ringDuration: 5, + snoozeTimes: 2, + timeInterval: 5, + title: "this is title", + content: "this is content", + expiredContent: "this reminder has expired", + snoozeContent: "remind later", + notificationId: 100, + slotType: notification.SlotType.SOCIAL_COMMUNICATION +} +``` diff --git a/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-overview.md b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..4889abf3eec9508cde2a8ee4d9c145bb5b1b4344 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/background-agent-scheduled-reminder/background-agent-scheduled-reminder-overview.md @@ -0,0 +1,16 @@ +--- +title: background-agent-scheduled-reminder-overview +permalink: /pages/extra/b47e74/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 概述 + +开发者在应用开发时,可以调用后台代理提醒类ReminderRequest去创建定时提醒,包括倒计时、日历、闹钟三种提醒类型。使用后台代理提醒能力后,应用可以被冻结或退出,计时和弹出提醒的功能将被后台系统服务代理。 diff --git a/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-dev-guide.md b/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-dev-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..c8c2044f5804c6717c1bb57897419cf0ad61bc6a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-dev-guide.md @@ -0,0 +1,92 @@ +--- +title: background-task-dev-guide +permalink: /pages/extra/1c2f19/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 后台任务开发指导 + +## 场景介绍 + +应用或业务模块处于后台(无可见界面)时,如果有需要继续执行或者后续执行的业务,可基于业务类型,申请短时任务延迟挂起(Suspend)或者长时任务避免进入挂起状态。 + + +## 接口说明 + +``` +import backgroundTaskManager from '@ohos.backgroundTaskManager'; +``` + +**表1** backgroundTaskManager主要接口 + +| 接口名 | 描述 | +| -------- | -------- | +| function requestSuspendDelay(reason: string, callback: Callback<void>): **DelaySuspendInfo**; | 后台应用申请延迟挂起。
延迟挂起时间一般情况下默认值为180000,低电量(依据系统低电量广播)时默认值为60000。 | +| function getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>): void;
function getRemainingDelayTime(requestId: number): Promise<number>; | 获取应用程序进入挂起状态前的剩余时间。(requestId从requestSuspendDelay的返回值获取)
提供两种异步方法,使用Callback形式其任务执行结果以参数形式提供给回调函数,Promise形式则返回一个Promise对象。 | +| function cancelSuspendDelay(requestId: number): void; | 取消延迟挂起。(requestId从requestSuspendDelay的返回值获取) | + +**表2** DelaySuspendInfo包含参数 + +| 参数名 | 类型 | 是否必选 | 描述 | +| -------- | -------- | -------- | -------- | +| requestId | number | 是 | 延迟挂起的请求ID。 | +| actualDelayTime | number | 是 | 应用的实际挂起延迟时间,以毫秒为单位。 | + + +## 开发步骤 + +1. 申请延迟挂起 + ``` + import backgroundTaskManager from '@ohos.backgroundTaskManager'; + let myReason = 'test requestSuspendDelay'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.info("Request suspension delay will time out."); + }); + var id = delayInfo.requestId;console.info("requestId is: " + id); + ``` + +2. 获取进入挂起前的剩余时间 + ``` + backgroundTaskManager.getRemainingDelayTime(id).then( res => { + console.log('promise => Operation succeeded. Data: ' + JSON.stringify(res)); + }).catch( err => { + console.log('promise => Operation failed. Cause: ' + err.data); + }); + ``` + +3. 取消延迟挂起 + ``` + backgroundTaskManager.cancelSuspendDelay(id); + ``` + + +## 开发实例 + +``` +import backgroundTaskManager from '@ohos.backgroundTaskManager'; +let myReason = 'test requestSuspendDelay'; +// 申请延迟挂起 +let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.info("Request suspension delay will time out."); +}); +// 打印延迟挂起信息 +var id = delayInfo.requestId; +var time = delayInfo.actualDelayTime; +console.info("The requestId is: " + id); +console.info("The actualDelayTime is: " + time); +// 获取应用程序进入挂起状态前的剩余时间 +backgroundTaskManager.getRemainingDelayTime(id).then( res => { + console.log('promise => Operation succeeded. Data: ' + JSON.stringify(res)); +}).catch( err => { + console.log('promise => Operation failed. Cause: ' + err.data); +}); +// 取消延迟挂起 +backgroundTaskManager.cancelSuspendDelay(id); +``` diff --git a/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-overview.md b/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..e769cc3094444670e0614fde0d44052bee1857fb --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/background-task-management/background-task-overview.md @@ -0,0 +1,48 @@ +--- +title: background-task-overview +permalink: /pages/extra/2d793c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 概述 + +对于有用户交互的OS来说,资源优先分配给与用户交互的业务进程,换句话说,在支撑OS运行的进程以外,用户能感知到的业务进程优先级最高,所以后台任务管理的范围是用户感知不到的业务进程。 + + +## 后台任务类型 + +本文描述的后台任务特指应用或业务模块处于后台(无可见界面)时,有需要继续执行或者后续执行的业务。对这些应用不可见但要继续或者将要执行的业务动作,为避免后台任务管理对业务执行的影响,OpenHarmony将后台任务分为三种类型: + +1. 无后台业务:退后台后,无任务需要处理。 + +2. 短时任务:退后台后,如果有紧急不可推迟且短时间能完成的任务,如应用退后台要进行数据压缩,不可中断,则使用短时任务申请延迟进入挂起(Suspend)状态。 + +3. 长时任务:如果是用户发起的可感知业务需要长时间后台运行的,如后台播放音乐、导航、上传下载、设备连接、VoIP等,则使用长时任务避免进入挂起(Suspend)状态。 + + +## 短时任务 + +退到后台的应用有不可中断且短时间能完成的任务时,可以使用短时任务机制,该机制允许应用在后台短时间内完成任务,保障应用业务运行不受后台生命周期管理的影响。 + +> ![icon-note.gif](/images/application-dev/background-task-management/public_sys-resources/icon-note.gif) **说明:** +> 短时任务仅针对应用的临时任务提供资源使用生命周期保障,限制单次最大使用时长为3分钟,全天使用配额默认为10分钟(具体时长系统根据应用场景和系统状态智能调整)。 + + +### 短时任务使用约束 + +短时任务的使用需要遵从如下约束和规则: + +- **申请时机**:允许应用在前台时,或退后台在被挂起之前(应用退到后台默认有6~12秒的运行时长,具体时长由系统根据具体场景决定)申请延迟挂起,否则可能被挂起(Suspend),导致申请失败。 + +- **超时**:延迟挂起超时(Timeout),系统通过回调知会应用,应用需要取消对应的延迟挂起,或再次申请延迟挂起。超期不取消或不处理,该应用会被强制取消延迟挂起。 + +- **取消时机**:任务完成后申请方应用主动取消延时申请,不要等到超时后被系统取消,否则会影响该应用的后台允许运行时长配额。 + +- **配额机制**:为了防止应用滥用保活,或者申请后不取消,每个应用每天都会有一定配额(会根据用户的使用习惯动态调整),配额消耗完就不再允许申请短时任务,所以应用完成短时任务后立刻取消延时申请,避免消耗配额。(注,这个配额指的是申请的时长,系统默认应用在后台运行的时间不计算在内)。 diff --git a/website/docs/_posts/zh-cn/application-dev/connectivity/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/connectivity/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..02f1151708e331847c99c2d57b616bebb70b0f4e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/connectivity/Readme-CN.md @@ -0,0 +1,19 @@ +--- +title: Readme-CN +permalink: /pages/extra/8cc6cb/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 网络与连接 + +- IPC与RPC通信 + - [IPC与RPC通信概述](/pages/01080501) + - [IPC与RPC通信开发指导](/pages/01080502) + - [远端状态订阅开发实例](/pages/01080503) diff --git a/website/docs/_posts/zh-cn/application-dev/connectivity/ipc-rpc.md b/website/docs/_posts/zh-cn/application-dev/connectivity/ipc-rpc.md new file mode 100644 index 0000000000000000000000000000000000000000..d618ec69712b9be02bf53b585faa4bb66754a1fe --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/connectivity/ipc-rpc.md @@ -0,0 +1,21 @@ +--- +title: ipc-rpc +permalink: /pages/extra/ec73ba/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# IPC与RPC通信 + + +- **[IPC与RPC通信概述](/pages/01080501)** + +- **[IPC与RPC通信开发指导](/pages/01080502)** + +- **[远端状态订阅开发实例](/pages/01080503)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/database/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/database/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..302ee966e2f1a1b9a1a8b089ad5e6be0c3f16974 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/database/Readme-CN.md @@ -0,0 +1,17 @@ +--- +title: Readme-CN +permalink: /pages/extra/ee7fed/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 分布式数据服务 + +- [分布式数据服务概述](/pages/01080601) +- [分布式数据服务开发指导](/pages/01080602) diff --git a/website/docs/_posts/zh-cn/application-dev/dfx/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/dfx/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..59d2aee8e414cb4297693975e993f66177739c23 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/dfx/Readme-CN.md @@ -0,0 +1,19 @@ +--- +title: Readme-CN +permalink: /pages/extra/047c71/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# DFX + +- 应用事件打点 + - [应用事件打点概述](/pages/01080801) + - [应用事件打点开发指导](/pages/01080802) + diff --git a/website/docs/_posts/zh-cn/application-dev/media/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/media/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..a65fc89f7d79c3e47c01f4c18d86c485eb7e6f9d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/media/Readme-CN.md @@ -0,0 +1,21 @@ +--- +title: Readme-CN +permalink: /pages/extra/56b10d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 媒体 + +- 音频 + - [音频开发概述](/pages/0108030101) + - [音频播放开发指导](/pages/0108030102) + - [音频管理开发指导](/pages/0108030103) + - [音频录制开发指导](/pages/0108030104) + diff --git a/website/docs/_posts/zh-cn/application-dev/media/audio.md b/website/docs/_posts/zh-cn/application-dev/media/audio.md new file mode 100644 index 0000000000000000000000000000000000000000..9018456492dd45d1ab0cfb0fa115282f4db9e652 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/media/audio.md @@ -0,0 +1,23 @@ +--- +title: audio +permalink: /pages/extra/ccd07c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 音频 + + +- **[音频开发概述](/pages/0108030101)** + +- **[音频播放开发指导](/pages/0108030102)** + +- **[音频管理开发指导](/pages/0108030103)** + +- **[音频录制开发指导](/pages/0108030104)** \ No newline at end of file diff --git "a/website/docs/_posts/zh-cn/application-dev/quick-start/DevEco-Studio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/website/docs/_posts/zh-cn/application-dev/quick-start/DevEco-Studio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227.md" deleted file mode 100644 index 75032de315e216d3123f08005a00f10dd0e3ffc5..0000000000000000000000000000000000000000 --- "a/website/docs/_posts/zh-cn/application-dev/quick-start/DevEco-Studio\357\274\210OpenHarmony\357\274\211\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: DevEco-Studio(OpenHarmony)使用指南.md -permalink: /pages/extra/5aac88/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:45 ---- -# DevEco Studio(OpenHarmony)使用指南 - -- **[概述](/pages/00090000)** - -- **[配置OpenHarmony SDK](/pages/00090001)** - -- **[创建OpenHarmony工程](/pages/00090002)** - -- **[配置OpenHarmony应用签名信息](/pages/00090003)** - -- **[安装运行OpenHarmony应用](/pages/00090004)** - - diff --git a/website/docs/_posts/zh-cn/application-dev/quick-start/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/quick-start/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..787d97eeb027671bfe02c4812e508247793be808 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/quick-start/Readme-CN.md @@ -0,0 +1,29 @@ +--- +title: Readme-CN +permalink: /pages/extra/348033/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 入门 + +- DevEco Studio(OpenHarmony)使用指南 + - [概述](/pages/01080901) + - [版本变更说明](/pages/01080902) + - [配置OpenHarmony SDK](/pages/01080903) + - 创建OpenHarmony工程 + - [使用工程向导创建新工程](/pages/0108090401) + - [通过导入Sample方式创建新工程](/pages/0108090402) + - [配置OpenHarmony应用签名信息](/pages/01080905) + - [安装运行OpenHarmony应用](/pages/01080906) +- [包结构说明](/pages/010c03) +- 快速入门 + - [开发准备](/pages/01080101) + - [使用JS语言开发](/pages/01080102) + - [使用eTS语言开发](/pages/01080103) diff --git a/website/docs/_posts/application-dev/quick-start/create-openharmony-project.md b/website/docs/_posts/zh-cn/application-dev/quick-start/create-openharmony-project.md similarity index 32% rename from website/docs/_posts/application-dev/quick-start/create-openharmony-project.md rename to website/docs/_posts/zh-cn/application-dev/quick-start/create-openharmony-project.md index e64b82af620f40b22de1cd7f9e5ae7bc5e6e889d..bd6befbe5eeb95360808c5fdd123e25ac73a1050 100644 --- a/website/docs/_posts/application-dev/quick-start/create-openharmony-project.md +++ b/website/docs/_posts/zh-cn/application-dev/quick-start/create-openharmony-project.md @@ -1,19 +1,20 @@ --- -title: create-openharmony-project.md -permalink: /pages/extra/ea2f5f/ +title: create-openharmony-project +permalink: /pages/extra/31eb04/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:38 +date: 2022-02-12 09:01:57 --- # 创建OpenHarmony工程 -- **[使用工程向导创建新工程](/pages/0007050300)** -- **[通过导入Sample方式创建新工程](/pages/0007050301)** \ No newline at end of file +- **[使用工程向导创建新工程](/pages/0108090401)** + +- **[通过导入Sample方式创建新工程](/pages/0108090402)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md b/website/docs/_posts/zh-cn/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md new file mode 100644 index 0000000000000000000000000000000000000000..549f35d7d16344b63e1c7a0fa9917809691bd782 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/quick-start/deveco-studio-user-guide-for-openharmony.md @@ -0,0 +1,28 @@ +--- +title: deveco-studio-user-guide-for-openharmony +permalink: /pages/extra/9981e8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# DevEco Studio(OpenHarmony)使用指南 + + + +- **[概述](/pages/01080901)** + +- **[版本变更说明](/pages/01080902)** + +- **[配置OpenHarmony SDK](/pages/01080903)** + +- **[创建OpenHarmony工程](/pages/extra/31eb04/)** + +- **[配置OpenHarmony应用签名信息](/pages/01080905)** + +- **[安装运行OpenHarmony应用](/pages/01080906)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/quick-start/start.md b/website/docs/_posts/zh-cn/application-dev/quick-start/start.md new file mode 100644 index 0000000000000000000000000000000000000000..df20bada524ad9e2d46842fd1d12d246508732fe --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/quick-start/start.md @@ -0,0 +1,21 @@ +--- +title: start +permalink: /pages/extra/1e52c4/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 快速入门 + + +- **[开发准备](/pages/01080101)** + +- **[使用JS语言开发](/pages/01080102)** + +- **[使用eTS语言开发](/pages/01080103)** \ No newline at end of file diff --git "a/website/docs/_posts/zh-cn/application-dev/quick-start/\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" "b/website/docs/_posts/zh-cn/application-dev/quick-start/\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" deleted file mode 100644 index 58e677cfcfbb3469a7fd48d8a9e68733102ff91a..0000000000000000000000000000000000000000 --- "a/website/docs/_posts/zh-cn/application-dev/quick-start/\345\210\233\345\273\272\346\226\260\345\267\245\347\250\213.md" +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: 创建新工程.md -permalink: /pages/extra/d4221e/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:45 ---- -# 创建新工程 - -- [前提条件](#section13642104391619) -- [操作步骤](#section132671712101714) - -创建一个OpenHarmony工程,该功能只有DevEco Studio 2.2 Beta1及以上版本支持。如果是DevEco Studio 2.1 Release版本,请根据[导入OpenHarmony工程](/pages/extra/55a502/)进行操作。 - -## 前提条件 - -已安装OpenHarmony SDK,具体请参考[配置OpenHarmony SDK](/pages/00090001)。 - -## 操作步骤 - -1. 通过如下两种方式,打开工程创建向导界面。 - - 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择**Create HarmonyOS Project**开始创建一个新工程。 - - 如果已经打开了工程,可以在菜单栏选择**File \> New \> New Project**来创建一个新工程。 - -2. 根据工程创建向导,选择“\[Standard\]Empty Ability\(JS\)”模板,点击**Next**。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001177051523.png) - -3. 点击**Next**,进入到工程配置阶段,需要根据向导配置工程的基本信息。 - - **Project Name**:工程的名称,可以自定义。 - - **Project Type**:工程的类型,标识该工程是一个[原子化服务](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/atomic-service-definition-0000001090840664)(Service)或传统方式的需要安装的应用(Application)。 - - >![](/images/zh-cn/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** - >如果是创建的原子化服务,则: - >- 原子化服务调试、运行时,在设备桌面上没有应用图标,请使用DevEco Studio的调试和运行功能,来启动原子化服务。 - >- 原子化服务是免安装的,config.json中自动添加**installationFree**字段,取值为“true”。 - >- 如果entry模块的**installationFree**字段为true,则其相关的所有hap模块的**installationFree**字段都默认为true;如果entry模块的**installationFree**字段为false,则其相关的所有hap模块可以配置为true或false。 - >- 编译构建App时,每个hap包大小不能超过10MB。 - - - **Package Name**:软件包名称,默认情况下,应用ID也会使用该名称,应用发布时,应用ID需要唯一。 - - **Save Location**:工程文件本地存储路径。 - - **Compatible API Version**:兼容的SDK最低版本。 - - **Device Type**:该工程模板支持的设备类型。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001130932554.png) - - -4. 点击**Finish**,工具会自动生成示例代码和相关资源,等待工程创建完成。 - diff --git "a/website/docs/_posts/zh-cn/application-dev/quick-start/\345\257\274\345\205\245OpenHarmony\345\267\245\347\250\213.md" "b/website/docs/_posts/zh-cn/application-dev/quick-start/\345\257\274\345\205\245OpenHarmony\345\267\245\347\250\213.md" deleted file mode 100644 index 27071a702d24813640ac2e0af761bf6bf32240ff..0000000000000000000000000000000000000000 --- "a/website/docs/_posts/zh-cn/application-dev/quick-start/\345\257\274\345\205\245OpenHarmony\345\267\245\347\250\213.md" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: 导入OpenHarmony工程.md -permalink: /pages/extra/55a502/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:45 ---- -# 导入OpenHarmony工程 - ->![](/images/zh-cn/application-dev/quick-start/public_sys-resources/icon-note.gif) **说明:** ->该功能适用于通过DevEco Studio 2.1 Release及以上版本,创建OpenHarmony工程。 - -OpenHarmony SDK配置完成后,便可以启动应用开发。针对OpenHarmony应用开发,**只能通过导入Sample工程的方式来创建一个新工程**。 - -目前,支持OpenHarmony应用开发的Sample工程,请选择导入含有“**This sample is intended for novices at developing OpenHarmony applications.**”说明的Sample,例如选择common分类中的**JsHelloWorld**。 - -![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001165463605.png) - -1. 在DevEco Studio的欢迎页,进入**Configure (或**![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118018452.png)**图标) \> Settings \> Version Control \> Git**界面,点击Test按钮检测是否安装Git工具。 - - 已安装,请根据[2](#li5947194711181)开始导入Sample。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118018088.png) - - - 未安装,请点击**Download and Install**,DevEco Studio会自动下载并安装。安装完成后,请根据[2](#li5947194711181)开始导入Sample。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001164498191.png) - - -2. 在DevEco Studio的欢迎页,点击**Import HarmonyOS Sample**按钮,导入Sample工程。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163835551.png) - -3. 选择common下的**JsHelloWorld**工程,然后点击**Next**。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001118201202.png) - -4. 设置**App Name**和**Project Location**,然后点击**Finish**,等待Sample工程导入完成。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163915521.png) - -5. Sample导入后,请打开工程下的build.gradle,修改hap插件的版本号为“2.4.4.3-RC”。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001117475776.png) - -6. 修改完成后,点击右上角Gradle中的![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163835553.png)按钮,重新同步工程。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001117635680.png) - -7. 等待工程同步完成,同步成功后,便可以进行OpenHarmony应用开发了。 - - ![](/images/zh-cn/application-dev/quick-start/figures/zh-cn_image_0000001163915523.png) - - diff --git a/website/docs/_posts/zh-cn/application-dev/reference/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/reference/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..227b2e0be31faf1d8b353622653d830f8e046389 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/Readme-CN.md @@ -0,0 +1,21 @@ +--- +title: Readme-CN +permalink: /pages/extra/b87a8e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 开发参考 + +- [基于JS扩展的类Web开发范式](/pages/extra/3d8851/) + +- [基于TS扩展的声明式开发范式](/pages/extra/e756d7/) + +- [接口](/pages/extra/36fa82/) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..cabeb08c646e9ddae88de4d817192f703d95a55f --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/Readme-CN.md @@ -0,0 +1,106 @@ +--- +title: Readme-CN +permalink: /pages/extra/36fa82/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 接口 + +- Ability框架 + - [FeatureAbility模块](/pages/010c010101) + - [ParticleAbility模块](/pages/010c010102) + - [DataAbilityHelper模块](/pages/010c010103) + - [DataUriUtils模块](/pages/010c010104) + - [Bundle模块](/pages/010c010105) + - [Context模块](/pages/010c010108) +- 事件与通知 + - [CommonEvent模块](/pages/010c010106) + - [Notification模块](/pages/010c010107) + - [后台代理提醒](/pages/extra/1a845b/) +- 资源管理 + - [资源管理](/pages/010c010201) + - [国际化-Intl](/pages/010c010203) + - [国际化-I18n](/pages/010c010202) +- 媒体 + - [音频管理](/pages/010c010301) + - [媒体服务](/pages/010c010302) +- 安全 + - [用户认证](/pages/010c010401) + - [访问控制](/pages/extra/5dcba5/) +- 数据管理 + - [轻量级存储](/pages/010c010501) + - [分布式数据管理](/pages/010c010502) + - [关系型数据库](/pages/010c010503) + - [结果集](/pages/010c010504) + - [DataAbility 谓词](/pages/010c010505) + - [设置数据项名称](/pages/010c010506) +- 文件管理 + - [文件管理](/pages/010c010601) + - [Statfs](/pages/010c010602) + - [目录环境](/pages/010c010603) +- 账号管理 + - [分布式帐号管理](/pages/010c010701) + - [应用帐号管理](/pages/010c010702) +- 电话服务 + - [拨打电话](/pages/010c010801) + - [短信服务](/pages/010c010802) + - [SIM卡管理](/pages/010c010803) + - [网络搜索](/pages/010c010804) +- 网络与连接 + - [WLAN](/pages/010c010901) +- 设备管理 + - [传感器](/pages/010c010a01) + - [振动](/pages/010c010a02) + - [屏幕亮度](/pages/010c010a03) + - [电量信息](/pages/010c010a04) + - [系统电源管理](/pages/010c010a05) + - [Runninglock锁](/pages/010c010a06) + - [设备信息](/pages/010c010a07) + - [系统属性](/pages/010c010a08) + - [设备管理](/pages/010c010a09) + - [窗口](/pages/010c010a0a) + - [显示设备属性](/pages/010c010a0b) + - [升级](/pages/010c010a0c) + - [USB管理](/pages/010c010a0d) +- 基本功能 + - [应用上下文](/pages/010c010b01) + - [日志打印](/pages/010c010b02) + - [页面路由](/pages/010c010b03) + - [弹窗](/pages/010c010b04) + - [应用配置](/pages/010c010b05) + - [定时器](/pages/010c010b06) + - [设置系统时间](/pages/010c010b07) + - [动画](/pages/010c010b08) + - [应用打点](/pages/010c010b09) + - [性能打点](/pages/010c010b0a) + - [故障日志获取](/pages/010c010b0b) +- 语言基础类库 + - [获取进程相关的信息](/pages/010c010c01) + - [URL字符串解析](/pages/010c010c02) + - [URI字符串解析](/pages/010c010c03) + - [util工具函数](/pages/010c010c04) + - [xml解析与生成](/pages/010c010c05) + - [xml转换JavaScript](/pages/010c010c06) + - [启动一个worker](/pages/010c010c07) + - [线性容器ArrayList](/pages/extra/6cbbc6/) + - [线性容器Deque](/pages/extra/459b73/) + - [线性容器List](/pages/extra/0af489/) + - [线性容器LinkedList](/pages/extra/fbaa4b/) + - [线性容器Queue](/pages/extra/8f3490/) + - [线性容器Stack](/pages/extra/1ce286/) + - [线性容器Vector](/pages/extra/0f10a5/) + - [非线性容器HashSet](/pages/extra/c0caab/) + - [非线性容器HashMap](/pages/extra/73b9d5/) + - [非线性容器PlainArray](/pages/extra/7c7d4b/) + - [非线性容器TreeMap](/pages/extra/15f518/) + - [非线性容器TreeSet](/pages/extra/e12e5b/) + - [非线性容器LightWeightMap](/pages/extra/c7ecab/) + - [非线性容器LightWeightSet](/pages/extra/461720/) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-ability-context.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-ability-context.md new file mode 100644 index 0000000000000000000000000000000000000000..07e751ec592d70a7e2dd22adb88f65673928653f --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-ability-context.md @@ -0,0 +1,230 @@ +--- +title: js-apis-ability-context +permalink: /pages/extra/e4ad41/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# AbilityContext + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +Ability的上下文环境,继承自Context。 + + +## 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| abilityInfo | AbilityInfo | 是 | 否 | Abilityinfo相关信息 | +| currentHapModuleInfo | HapModuleInfo | 是 | 否 | 当前hap包的信息 | + + +## startAbility + +startAbility(want: Want, callback: AsyncCallback<void>): void + +启动Ability。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | 启动Ability的want信息。 | + | callback | AsyncCallback<void> | 是 | callback形式返回启动结果 | + +- 示例: + ``` + var want = { + "deviceId": "", + "bundleName": "com.extreme.test", + "abilityName": "com.extreme.test.MainAbility" + }; + this.context.startAbility(want, (error) => { + console.log("error.code = " + error.code) + }) + ``` + + +## startAbility + +startAbility(want: Want): Promise<void>; + +启动Ability。通过Promise返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | 启动Ability的want信息。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | Promise形式返回启动结果。 | + +- 示例: + ``` + var want = { + "deviceId": "", + "bundleName": "com.extreme.test", + "abilityName": "com.extreme.test.MainAbility" + }; + this.context.startAbility(want) + .then((data) => { + console.log('Operation successful.') + }).catch((error) => { + console.log('Operation failed.'); + }) + ``` + + +## startAbilityForResult + +startAbilityForResult(want: Want, callback: AsyncCallback<AbilityResult>): void; + +启动Ability并在结束的时候返回执行结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want |[Want](/pages/010c010101#Want类型说明) | 是 | 启动Ability的want信息。 | + | callback | Callback<[AbilityResult](/pages/010c010101#abilityresult)> | 是 | 执行结果回调函数。 | + + +- 示例: + ``` + this.context.startAbilityForResult( + {bundleName: "com.extreme.myapplication", abilityName: "MainAbilityDemo2"}, + (error, result) => { + console.log("startAbilityForResult AsyncCallback is called, error.code = " + error.code) + console.log("startAbilityForResult AsyncCallback is called, result.resultCode = " + result.resultCode) + } + ); + ``` + + +## startAbilityForResult + +startAbilityForResult(want: Want): Promise<AbilityResult>; + +启动Ability并在结束的时候返回执行结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | 启动Ability的want信息。 | + +- 返回值 + | 类型 | 说明 | + | -------- | -------- | + | Promise<[AbilityResult](/pages/010c010101#abilityresult)> | Promise形式返回执行结果。 | + +- 示例: + ``` + this.context.startAbilityForResult({bundleName: "com.extreme.myapplication", abilityName: "MainAbilityDemo2"}).then((result) => { + console.log("startAbilityForResult Promise.resolve is called, result.resultCode = " + result.resultCode) + }, (error) => { + console.log("startAbilityForResult Promise.Reject is called, error.code = " + error.code) + }) + ``` + + +## terminateSelf + +terminateSelf(callback: AsyncCallback<void>): void; + +停止Ability自身。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 否 | 回调函数,返回接口调用是否成功的结果。 | + +- 示例: + ``` + this.context.terminateSelf((err) => { + console.log('terminateSelf result:' + JSON.stringfy(err); + } + ``` + + +## terminateSelf + +terminateSelf(): Promise<void>; + +停止Ability自身。通过Promise返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 返回一个Promise,包含接口的结果。 | + +- 示例: + ``` + this.context.terminateSelf(want).then((data) => { + console.log('success:' + JSON.stringfy(data)); + )).catch((error) => { + console.log('failed:' + JSON.stringfy(error)); + }); + ``` + + +## terminateSelfWithResult + +terminateSelfWithResult(parameter: AbilityResult, callback: AsyncCallback<void>): void; + +停止Ability,并返回给调用startAbilityForResult 接口调用方的相关信息。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | parameter | [AbilityResult](/pages/010c010101#abilityresult) | 是 | 返回给调用startAbilityForResult 接口调用方的相关信息。 | + | callback | Callback<void> | 否 | callback形式返回停止结果 | + +- 示例: + ``` + this.context.terminateSelfWithResult( + { + want: {bundleName: "com.extreme.myapplication", abilityName: "MainAbilityDemo"}, + resultCode: 100 + }, (error) => { + console.log("terminateSelfWithResult is called = " + error.code) + } + ); + ``` + + +## terminateSelfWithResult + +terminateSelfWithResult(parameter: AbilityResult): Promise<void>; + +停止Ability,并返回给调用startAbilityForResult 接口相关信息。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | parameter | [AbilityResult](/pages/010c010101#abilityresult) | 是 | 返回给startAbilityForResult 调用方的信息。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | promise形式返回停止结果 | + +- 示例: + ``` + this.context.terminateSelfWithResult( + { + want: {bundleName: "com.extreme.myapplication", abilityName: "MainAbilityDemo"}, + resultCode: 100 + }).then((result) => { + console.log("terminateSelfWithResult") + } + ) + ``` diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-arraylist.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-arraylist.md new file mode 100644 index 0000000000000000000000000000000000000000..73265b7f7237b82532a502ebe7745958e29cd7ff --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-arraylist.md @@ -0,0 +1,531 @@ +--- +title: js-apis-arraylist +permalink: /pages/extra/6cbbc6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器ArrayList + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 导入模块 + +``` +import {ArrayList} from '@ohos.util.ArrayList' +``` + +## 权限 + +无 + +## ArrayList + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | ArrayList的元素个数 | + + +### constructor + +constructor(); + +ArrayList的构造函数。 + +- 示例: + ``` + let arrayList = new ArrayList(); + ``` + + +### add + +add(element: T): boolean; + +在ArrayList尾部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 插入成功返回true,失败返回false | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add("a"); + arrayList.add(1); + let b = [1, 2, 3]; + arrayList.add(b); + let c = {name: "lala", age: "13"}; + arrayList.add(false); + ``` + +### insert + +insert(element: T, index: number): void; + +在长度范围内任意位置插入指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 被插入的元素 | + | index | number | 是 | 被插入的位置索引 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.insert("A", 0); + arrayList.insert(0, 1); + arrayList.insert(true, 2); + ``` + +### has + +has(element: T): boolean; + +判断此ArrayList中是否含有该指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + arrayList.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + arrayList.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + +### getIndexOf + +getIndexOf(element: T): number; + +返回指定元素第一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(2); + arrayList.add(1); + arrayList.add(2); + arrayList.add(4); + arrayList.getIndexOf(2); + ``` +### getLastIndexOf + +getLastIndexOf(element: T): number; + +返回指定元素最后一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素最后一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(2); + arrayList.add(1); + arrayList.add(2); + arrayList.add(4); + arrayList.getLastIndexOf(2); + ``` +### removeByIndex + +removeByIndex(index: number): T; + +根据元素的下标值查找元素,返回元素后将其删除。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定元素的下标值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(2); + arrayList.add(4); + arrayList.removeByIndex(2); + ``` + +### remove + +remove(element: T): boolean; + +删除查找到的第一个指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.remove(2); + ``` + +### removeByRange + +removeByRange(fromIndex: number, toIndex: number): void; + +从一段范围内删除元素,包括起始值但不包括终止值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromIndex | number | 是 | 起始下标 | + | toIndex | number | 是 | 终止下标 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.removeByRange(2, 4); + arrayList.removeByRange(4, 3); + arrayList.removeByRange(2, 6); + ``` +### replaceAllElements +replaceAllElements(callbackfn: (value: T, index?: number, arraylist?: ArrayList<T>) => T, +thisArg?: Object): void; + +用户操作ArrayList中的元素,用操作后的元素替换原元素并返回操作后的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | arraylist | ArrayList<T> | 否 | 当前调用replaceAllElements方法的实例对象 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.replaceAllElements((value, index) => { + return value = 2 * value; + }); + arrayList.replaceAllElements((value, index) => { + return value = value - 2; + }); + ``` +### forEach +forEach(callbackfn: (value: T, index?: number, arraylist?: ArrayList<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历ArrayList实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数。 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素。 | + | index | number | 否 | 当前遍历到的下标值。 | + | arraylist | ArrayList<T> | 否 | 当前调用forEach方法的实例对象。 | + + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.forEach((value, index) => { + console.log(value, index); + }); + ``` +### sort +sort(comparator?: (firstValue: T, secondValue: T) => number): void; + +对ArrayList中的元素进行一个排序操作 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | comparator | function | 否 | 回调函数 | + +- comparator的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | firstValue | T | 是 | 前一项元素 | + | secondValue | T | 是 | 后一项元素 | + + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.sort(a, (b => a - b)); + arrayList.sort(a, (b => b - a)); + arrayList.sort(); + ``` +### subArrayList +subArrayList(fromIndex: number, toIndex: number): ArrayList<T>; + +根据下标截取ArrayList中的一段元素,并返回这一段ArrayList实例, 包括起始值但不包括终止值 +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromIndex | number | 是 | 起始下标 | + | toIndex | number | 是 | 终止下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | ArrayList<T> | 返回ArrayList对象实例 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.subArrayList(2, 4); + arrayList.subArrayList(4, 3); + arrayList.subArrayList(2, 6); + ``` + +### clear +clear(): void; + +清除ArrayList中的所有元素,并把length置为0。 + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.clear(); + ``` +### clone +clone(): ArrayList<T> ; + +克隆一个与ArrayList一模一样的实例,并返回克隆后的实例,修改克隆后的实例并不会影响原实例。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | ArrayList<T> | 返回ArrayList对象实例 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.clone(); + ``` +### getCapacity +getCapacity(): number; + +获取当前实例的容量大小。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回arraylist的容量大小 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.getCapacity(); + ``` +### convertToArray +convertToArray(): Array<T>; + +把当前ArrayList实例转换成数组,并返回转换后的数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<T> | 返回数组类型 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.convertToArray(); + ``` +### isEmpty +isEmpty(): boolean; + +判断该ArrayList是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.isEmpty(); + ``` +### increaseCapacityTo +increaseCapacityTo(newCapacity: number): void; + +如果传入的新容量大于或等于ArrayList中的元素个数,将容量变更为新容量。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | newCapacity | number | 是 | 新容量 | + + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.increaseCapacityTo(2); + arrayList.increaseCapacityTo(8); + ``` +### trimToCurrentLength +trimToCurrentLength(): void; + +把容量限制为当前的length大小。 + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + arrayList.trimToCurrentLength(2); + ``` +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let arrayList = new ArrayList(); + arrayList.add(2); + arrayList.add(4); + arrayList.add(5); + arrayList.add(4); + + // 使用方法一: + for (let item of arrayList) { + console.log(item); + } + + // 使用方法二: + let iter = arrayList[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-backgroundTaskManager.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-backgroundTaskManager.md new file mode 100644 index 0000000000000000000000000000000000000000..b9ac4a87bcfc7d0404fe370a607491dce371ffbe --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-backgroundTaskManager.md @@ -0,0 +1,137 @@ +--- +title: js-apis-backgroundTaskManager +permalink: /pages/extra/183811/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 后台任务管理 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import backgroundTaskManager from '@ohos.backgroundTaskManager'; +``` + + +## 权限 + +无 + + +## backgroundTaskManager.requestSuspendDelay + +requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspendInfo + +后台应用申请延迟挂起。 + +延迟挂起时间一般情况下默认值为180000,低电量(依据系统低电量广播)时默认值为60000。 + +- **参数**: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | reason | string | 是 | 延迟挂起申请的原因。 | + | callback | Callback<void> | 是 | 延迟即将超时的回调函数,一般在超时前6秒通过此回调通知应用。 | + +- **返回值**: + | 类型 | 说明 | + | -------- | -------- | + | [DelaySuspendInfo](#delaysuspendinfo) | 返回延迟挂起信息。 | + +- **示例**: + ``` + let myReason = 'test requestSuspendDelay'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.info("Request suspension delay will time out."); + }) + ``` + + +## backgroundTaskManager.getRemainingDelayTime + +getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>): void + +获取应用程序进入挂起状态前的剩余时间,使用callback形式返回。 + +- **参数**: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | requestId | number | 是 | 延迟挂起的请求ID。 | + | callback | AsyncCallback<number> | 是 | 指定的callback回调方法。用于返回应用程序进入挂起状态之前的剩余时间,以毫秒为单位。 | + +- **示例**: + ``` + let id = 1; + backgroundTaskManager.getRemainingDelayTime(id, (err, res) => { + if(err.data === 0) { + console.log('promise => Operation succeeded. Data: ' + JSON.stringify(res)); + } else { + console.log('promise => Operation failed. Cause: ' + err.data); + } + }) + ``` + + +## backgroundTaskManager.getRemainingDelayTime + +getRemainingDelayTime(requestId: number): Promise<number> + +获取应用程序进入挂起状态前的剩余时间,使用Promise形式返回。 + +- **参数**: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | requestId | number | 是 | 延迟挂起的请求ID。 | + +- **返回值**: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 指定的Promise回调方法。返回应用程序进入挂起状态之前的剩余时间,以毫秒为单位。 | + +- **示例**: + ``` + let id = 1; + backgroundTaskManager.getRemainingDelayTime(id).then( res => { + console.log('promise => Operation succeeded. Data: ' + JSON.stringify(res)); + }).catch( err => { + console.log('promise => Operation failed. Cause: ' + err.data); + }) + ``` + + +## backgroundTaskManager.cancelSuspendDelay + +cancelSuspendDelay(requestId: number): void + +取消延迟挂起。 + +- **参数**: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | requestId | number | 是 | 延迟挂起的请求ID。 | + +- **示例**: + ``` + backgroundTaskManager.cancelSuspendDelay(id); + ``` + + +#### DelaySuspendInfo + +延迟挂起信息。 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| requestId | number | 是 | 延迟挂起的请求ID。 | +| actualDelayTime | number | 是 | 应用的实际挂起延迟时间,以毫秒为单位。
一般情况下默认值为180000,低电量(依据系统低电量广播)时默认值为60000。 | + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-deque.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-deque.md new file mode 100644 index 0000000000000000000000000000000000000000..21f77d4bc1a3b2da7a920d571c7ccdb798c0df75 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-deque.md @@ -0,0 +1,264 @@ +--- +title: js-apis-deque +permalink: /pages/extra/459b73/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器Deque + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {Deque} from '@ohos.util.Deque' +``` + +## 权限 + +无 + +## Deque + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | Deque的元素个数 | + +### constructor + +constructor(); + +Deque的构造函数。 + +- 示例: + ``` + let queue = new Queue(); + ``` + +### insertFront + +insertFront(element: T): void; + +在deque头部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 示例: + ``` + let deque = new Deque; + deque.insertFront("a"); + deque.insertFront(1); + let b = [1, 2, 3]; + deque.insertFront(b); + let c = {name : "lala", age : "13"}; + deque.insertFront(false); + ``` +### insertEnd + +insertEnd(element: T): void; + +在deque尾部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 示例: + ``` + let deque = new Deque; + deque.insertEnd("a"); + deque.insertEnd(1); + let b = [1, 2, 3]; + deque.insertEnd(b); + let c = {name : "lala", age : "13"}; + deque.insertEnd(false); + ``` +### has + +has(element: T): boolean; + +判断此Deque中是否含有该指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let deque = new Deque(); + deque.has("Ahfbrgrbgnutfodgorrogorg"); + deque.insertFront("Ahfbrgrbgnutfodgorrogorg"); + deque.has("Ahfbrgrbgnutfodgorrogorg"); + ``` +### popFirst + +popFirst(): T; + +删除并返回双端队列的首元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let deque = new Deque(); + deque.insertFront(2); + deque.insertFront(4); + deque.insertEnd(5); + deque.insertFront(2); + deque.insertFront(4); + deque.popFirst(); + ``` +### popLast + +popLast(): T; + +删除并返回双端队列的尾元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let deque = new Deque(); + deque.insertFront(2); + deque.insertEnd(4); + deque.insertFront(5); + deque.insertFront(2); + deque.insertFront(4); + deque.popLast(); + ``` + +### forEach +forEach(callbackfn: (value: T, index?: number, deque?: Deque<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历Deque实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | deque | Deque<T> | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let deque = new Deque(); + deque.insertFront(2); + deque.insertEnd(4); + deque.insertFront(5); + deque.insertEnd(4); + deque.forEach((value, index) => { + console.log(value, index); + }); + ``` + +### getFirst + +getFirst(): T; +获取Deque实例中的头元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let deque = new Deque(); + deque.insertEnd(2); + deque.insertEnd(4); + deque.insertFront(5); + deque.insertFront(4); + deque.getFirst(); + ``` +### getLast + +getLast(): T; +获取Deque实例中的尾元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let deque = new Deque(); + deque.insertFront(2); + deque.insertFront(4); + deque.insertFront(5); + deque.insertFront(4); + deque.getLast(); + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器。 | + + +- 示例: + ``` + let deque = new Deque(); + deque.insertFront(2); + deque.insertFront(4); + deque.insertFront(5); + deque.insertFront(4); + + // 使用方法一: + for (let item of deque) { + console.log(item); + } + + // 使用方法二: + let iter = deque[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-emitter.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-emitter.md new file mode 100644 index 0000000000000000000000000000000000000000..77049460fa5abcdd9030b0c5453a5a47deb90f2a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-emitter.md @@ -0,0 +1,151 @@ +--- +title: js-apis-emitter +permalink: /pages/extra/e22381/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Emitter + +> 说明:本模块首批接口从API version 7开始支持。 + +## 导入模块 + +```javascript +import emitter from '@ohos.events.emitter' +``` + +## 权限列表 + +无 + +## EventPriority + +用于表示事件被投递的优先级。 + +| 名称 | 值 | 说明 | +| --------- | ---- | ------------------------------------------------- | +| IMMEDIATE | 0 | 表示事件被立即投递 | +| HIGH | 1 | 表示事件先于LOW优先级投递 | +| LOW | 2 | 表示事件优于IDLE优先级投递,事件的默认优先级是LOW | +| IDLE | 3 | 表示在没有其他事件的情况下,才投递该事件 | + +## emitter.on + +on(event: [InnerEvent](#InnerEvent), callback: Callback\<[EventData](#EventData)\>): void + +持续订阅某个事件以及接收事件的回调处理。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ------------------------ | +| event | [InnerEvent](#InnerEvent) | 是 | 持续订阅的事件 | +| callback | Callback\<[EventData](#EventData)\> | 是 | 接收订阅事件时的回调处理 | + +**示例:** + +```javascript +var innerEvent = { + eventId : 1 +}; +var callback = (eventData) => { + console.info('callback'); +}; +emitter.on(innerEvent, callback); +``` + +## emitter.once + +once(event: [InnerEvent](#InnerEvent), callback: Callback\<[EventData](#EventData)\>): void + +单次订阅某个事件以及接收事件的回调处理,接收到回调处理后自动取消订阅。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ------------------------ | +| event | [InnerEvent](#InnerEvent) | 是 | 单次订阅的事件 | +| callback | Callback\<[EventData](#EventData)\> | 是 | 接收订阅事件时的回调处理 | + +**示例:** + +```javascript +var innerEvent = { + eventId : 1 +}; +var callback = (eventData) => { + console.info('once callback'); +}; +emitter.once(innerEvent, callback); +``` + +## emitter.off + +off(eventId: number): void + +取消订阅某个事件。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------- | ------ | ---- | -------------- | +| eventId | number | 是 | 单次订阅的事件 | + +**示例:** + +```javascript +emitter.off(1); +``` + +## emitter.emit + +emit(event: InnerEvent, data?: EventData): void + +发送一个事件到事件队列。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------------------------- | ---- | -------------- | +| event | [InnerEvent](#InnerEvent) | 是 | 发送的事件 | +| data | [EventData](#EventData) | 否 | 事件携带的数据 | + +**示例:** + +```javascript +var eventData = { + data: { + 1:"t", + 'content':"c", + "id":1, + }}; +var innerEvent = { + eventId : 1, + priority: emitter.EventPriority.HIGH +}; +emitter.emit(innerEvent, eventData); +``` + +## InnerEvent + +进程内的事件。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | ------------------------------- | ---- | ---- | ---------------------------------- | +| eventId | number | 是 | 是 | 事件的ID,由开发者定义用来辨别事件 | +| priority | [EventPriority](#EventPriority) | 是 | 是 | 事件被投递的优先级 | + +## EventData + +发送事件时传递的数据。 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| ---- | ------------------ | ---- | ---- | -------------- | +| data | [key: string]: any | 是 | 是 | 事件携带的数据 | diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-extension-context.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-extension-context.md new file mode 100644 index 0000000000000000000000000000000000000000..5164eadf96f41f88ae713e4d75571895903e53fb --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-extension-context.md @@ -0,0 +1,27 @@ +--- +title: js-apis-extension-context +permalink: /pages/extra/ba9fbc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# ExtensionContext + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +Extension的上下文环境,继承自Context。 + + +## 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| currentHapModuleInfo | HapModuleInfo | 是 | 否 | 当前Hap包的信息。 | diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-filemanager.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-filemanager.md new file mode 100644 index 0000000000000000000000000000000000000000..9b5372921c162fadcffd92c4ab452f6d29ca1994 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-filemanager.md @@ -0,0 +1,255 @@ +--- +title: js-apis-filemanager +permalink: /pages/extra/cd2a3d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 公共文件访问与管理 + +## 导入模块 + +``` +import filemanager from 'ohos.filemanager' +``` + +## 权限 + +应用需要拥有SystemCapability.FileManagement.FileManagerService权限 + +## filemanager.getRoot +getRoot(options? : {dev? : DevInfo}) : Promise<FileInfo[]> + +以异步方法获取第一层相册,目录信息。使用promise形式返回结果。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | --- | --- | --- | -- | + | dev | DevInfo | 否 | 设备名, 当前仅支持设备'local' | + +- 返回值 + + | 类型 | 说明 | + | --- | -- | + | Promise<FileInfo[]> | 第一层目录相册信息 | + +- 示例 + +```js +filemanager.getRoot() +.then((fileInfo) => { + if(Array.isArray(fileInfo)) { + for (var i = 0; i < fileInfo.length; i++) { + console.log(JSON.Stringify(fileInfo)) + } + } +}) +.catch((err) => { + console.log(err) +}) +``` + +## filemanager.getRoot + +getRoot(options? : {dev? : DevInfo}, callback : AsyncCallback<FileInfo[]>) : void + +以异步方法获取第一层相册,目录信息。使用callback形式返回结果。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------- | ---- | ----------------------------- | + | dev | DevInfo | 否 | 设备名, 当前仅支持设备'local' | + | callback | AsyncCallback<FileInfo[]> | 是 | 异步获取文件的信息之后的回调 | + +- 示例 + +```js +filemanager.getRoot((err, fileInfo) => { + if(Array.isArray(fileInfo)) { + for (var i = 0; i < fileInfo.length; i++) { + console.log(JSON.Stringify(fileInfo)) + } + } +}) +``` + +## filemanager.listFile + +listFile(path : string, type : string, options? : {dev? : DevInfo, offset? : number, count? : number}) : Promise<FileInfo[]> + +以异步方法获取获取第二层相册,文件信息。使用promise形式返回结果。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | --- | --- | --- | -- | + | type | string | 是 | 待查询文件类型, 支持以下类型 "file", "image", "audio", "video" | + | path | string | 是 | 待查询目录uri | + | dev | DevInfo | 是 | 设备名, 当前仅支持设备'local' | + | offset | number | 否 | 待查询文件偏移 | + | count | number | 否 | 待查询文件个数 | + +- 返回值 + + | 类型 | 说明 | + | --- | -- | + | Promise<FileInfo[]> | 文件信息 | + +- 异常 + | 错误名称 | 错误类型 | 错误码 |说明 | + | --- | -- | --- | -- | + | 对应的目录、相册不存在 | No such file or directory | 2 | uri对应的目录、相册不存在 | + | 获取FMS服务失败 | No such process | 3 | 获取FMS服务失败 | + | path对应uri不是相册、目录 | Not a directory | 20 | path对应uri不是相册、目录 | + +```js +// 获取目录下所有文件 +// 通过listFile、getRoot获取的文件uri +let media_path = file.uri +filemanager.listFile(media_path, "file") +.then((fileInfo) => { + if(Array.isArray(fileInfo)) { + for (var i = 0; i < fileInfo.length; i++) { + console.log(JSON.Stringify(fileInfo)) + } + } +}) +.catch((err) => { + console.log(err) +}) +``` +## filemanager.listFile + +listFile(path : string, type : string, options? : {dev? : DevInfo, offset? : number, count? : number}, callback : AsyncCallback<FileInfo[]>) : void + +以异步方法获取获取第二层相册,文件信息。使用callback形式返回结果。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------- | ---- | ------------------------------------------------------------ | + | type | string | 是 | 待查询文件类型, 支持以下类型 "file", "image", "audio", "video" | + | path | string | 是 | 待查询目录uri | + | dev | DevInfo | 否 | 设备名, 当前仅支持设备'local' | + | offset | number | 否 | 待查询文件偏移 | + | count | number | 否 | 待查询文件个数 | + | callback | AsyncCallback<FileInfo[]> | 是 | 异步获取文件的信息之后的回调 | +- 异常 + + | 错误名称 | 错误类型 | 错误码 | 说明 | + | ------------------------- | ------------------------- | ------ | ------------------------- | + | 对应的目录、相册不存在 | No such file or directory | 2 | uri对应的目录、相册不存在 | + | 获取FMS服务失败 | No such process | 3 | 获取FMS服务失败 | + | path对应uri不是相册、目录 | Not a directory | 20 | path对应uri不是相册、目录 | + +```js +// 通过listFile、getRoot获取的文件uri +let media_path = file.uri +filemanager.listFile(media_path, "file", (err, fileInfo) => { + if(Array.isArray(fileInfo)) { + for (var i = 0; i < fileInfo.length; i++) { + console.log(JSON.Stringify(fileInfo)) + } + } +}) +``` + +## filemanager.createFile + +filemanager.createFile(path : string, filename : string, options? : {dev? : DevInfo}) : promise<string> + +以异步方法创建文件到指定路径,返回文件uri。使用promise形式返回结果。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | --- | --- | --- | -- | + | filename | string | 是 | 待创建的文件名 | + | path | string | 是 | 待保存目的相册uri | + | dev | DevInfo | 否 | 设备名, 当前仅支持设备'local' | + +- 返回值 + + | 类型 | 说明 | + | --- | -- | + | string | 文件uri | + +- 异常 + | 错误名称 | 错误类型 | 错误码 |说明 | + | --- | -- | --- | -- | + | 创建文件不允许 | Operation not permitted | 1 | 已有重名文件 | + | 对应的目录、相册不存在 | No such file or directory | 2 | uri对应的目录、相册不存在 | + | 获取FMS服务失败 | No such process | 3 | 获取FMS服务失败 | + | path对应uri不是相册、目录 | Not a directory | 20 | path对应uri不是相册、目录 | + +```js +// 创建文件,返回文件uri +let media_path = file.uri // 通过listFile、getRoot获取的文件uri +let name = "xxx.jpg" // 待保存文件的后缀 +filemanager.createFile(media_path, name) +.then((uri) => { +// 返回uri给应用 +}) +.catch((err) => { + console.log(err) +}) +``` + +## filemanager.createFile + +createFile(path : string, filename: string, options? : {dev? : DevInfo}, callback : AsyncCallback<string>) : void + +以异步方法创建文件到指定路径,返回文件uri。使用callback形式返回结果。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------------- | ---- | ----------------------------- | + | filename | string | 是 | 待创建的文件名 | + | path | string | 是 | 待保存目的相册uri | + | dev | DevInfo | 否 | 设备名, 当前仅支持设备'local' | + | callback | AsyncCallback<FileInfo[]> | 是 | 异步获取文件的信息之后的回调 | + +- 异常 + + | 错误名称 | 错误类型 | 错误码 | 说明 | + | ------------------------- | ------------------------- | ------ | ------------------------- | + | 创建文件不允许 | Operation not permitted | 1 | 已有重名文件 | + | 对应的目录、相册不存在 | No such file or directory | 2 | uri对应的目录、相册不存在 | + | 获取FMS服务失败 | No such process | 3 | 获取FMS服务失败 | + | path对应uri不是相册、目录 | Not a directory | 20 | path对应uri不是相册、目录 | + +```js +// 创建文件,返回文件uri +// 通过listFile、getRoot获取的文件uri +let media_path = file.uri +// 待保存文件的后缀 +let name = "xxx.jpg" +filemanager.createFile(media_path, name, (err, uri) => { +// 返回uri给应用 +}) +``` + +## FileInfo +文件信息类型,通过getRoot, listFile等接口返回的类型。 + +| 参数名 | 类型 | 可读 | 可写 | 说明 | +| --- | -- | -- | -- | -- | +| name | string | 是 | 否 | 文件名称 | +| path | string | 是 | 否 | 文件Uri | +| type | string | 是 | 否 | 文件类型 | +| size | number | 是 | 否 | 文件大小 | +| addedTime | number | 是 | 否 | 媒体插入时间 | +| modifiedTime | number | 是 | 否 | 媒体修改时间 | + +## DevInfo +设备类型,配置接口访问的设备类型。 + + | 参数名 | 类型 | 可读 | 可写 | 说明 | + | --- | -- | -- | -- | -- | + | name | string | 是 | 是 | 设备名称 | \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formbindingdata.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formbindingdata.md new file mode 100644 index 0000000000000000000000000000000000000000..f3b4b5b82ab00f68586418c8544659d01543a4f7 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formbindingdata.md @@ -0,0 +1,64 @@ +--- +title: js-apis-formbindingdata +permalink: /pages/extra/6e0d82/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 卡片数据绑定类 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 导入模块 + +``` +import formBindingData from '@ohos.application.formBindingData'; +``` + +## 权限 + +无 + +## formBindingData.createFormBindingData + +createFormBindingData(obj?: Object | string): FormBindingData + +创建一个FormBindingData对象。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | -------------- | ---- | ------------------------------------------------------------ | + | obj | Object或string | 否 | js卡片要展示的数据。可以是包含若干键值对的Object或者 json 格式的字符串。 | + + + +- 返回值: + + | 类型 | 说明 | + | ----------------------------------- | --------------------------------------- | + | [FormBindingData](#formbindingdata) | 根据传入数据创建的FormBindingData对象。 | + + + +- 示例: + + ``` + let obj = {"temperature": "21°"}; + let formBindingDataObj = formBindingData.createFormBindingData(obj); + ``` + +## FormBindingData + +FormBindingData相关描述。 + +| 名称 | 类型 | 说明 | +| ---- | -------------- | ------------------------------------------------------------ | +| obj | Object或string | js卡片要展示的数据。可以是包含若干键值对的Object或者 json 格式的字符串。 | \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextension.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextension.md new file mode 100644 index 0000000000000000000000000000000000000000..b9933be5602cde3cd4f860708c2ad1b782e5128d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextension.md @@ -0,0 +1,184 @@ +--- +title: js-apis-formextension +permalink: /pages/extra/50078e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# FormExtension + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +提供FormExtension卡片扩展相关接口。 + +## 导入模块 + +``` +import FormExtension from '@ohos.application.FormExtension'; +``` + +## 权限 + +无 + +## 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| ------- | ------------------------------------------------------- | ---- | ---- | --------------------------------------------------- | +| context | [FormExtensionContext](/pages/extra/f2917a/) | 是 | 否 | FormExtension的上下文环境,继承自ExtensionContext。 | + +## onCreate + +onCreate(want: Want): formBindingData.FormBindingData + +卡片提供方接收创建卡片的通知接口。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | -------------------------------------- | ---- | ------------------------------------------------------------ | + | want | [Want](/pages/010c010101#want) | 是 | 当前Extension相关的Want类型信息,包括卡片ID、卡片名称、卡片样式等。这些卡片信息必须作为持久数据进行管理,以便后续更新和删除卡片。 | + +- 返回值: + + | 类型 | 说明 | + | ------------------------------------------------------------ | ----------------------------------------------------------- | + | [formBindingData.FormBindingData](/pages/extra/6e0d82/#formbindingdata) | 一个formBindingData.FormBindingData对象,卡片要显示的数据。 | + +- 示例: + + ``` + onCreate(want) { + console.log('FormExtension onCreate, want:' + want.abilityName); + let dataObj1 = { + temperature:"11c", + "time":"11:00" + }; + let obj1 = formBindingData.createFormBindingData(dataObj1); + return obj1; + } + ``` + +## onCastToNormal + +onCastToNormal(formId: string): void + +卡片提供方接收临时卡片转常态卡片的通知接口。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------ | + | formId | string | 是 | 请求转换为常态的卡片ID。 | + +- 示例: + + ``` + onCastToNormal(formId) { + console.log('FormExtension onCastToNormal, formId:' + formId); + } + ``` + +## onUpdate + +onUpdate(formId: string): void + +卡片提供方接收更新卡片的通知接口。获取最新数据后调用[FormExtensionContext](/pages/extra/f2917a/)的updateForm接口刷新卡片数据。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------ | + | formId | string | 是 | 请求更新的卡片ID。 | + +- 示例: + + ``` + onUpdate(formId) { + console.log('FormExtension onUpdate, formId:' + formId); + let obj2 = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + this.context.updateForm(formId, obj2) + .then((data)=>{ + console.log('FormExtension context updateForm, data:' + data); + }).catch((error) => { + console.error('Operation updateForm failed. Cause: ' + error);}); + } + ``` + +## onVisibilityChange + +onVisibilityChange(newStatus: { [key: string]: number }): void + +卡片提供方接收修改可见性的通知接口。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------------- | ---- | ---------------------------- | + | newStatus | { [key: string]: number } | 是 | 请求修改的卡片ID和可见状态。 | + +- 示例: + + ``` + onVisibilityChange(newStatus) { + console.log('FormExtension onVisibilityChange, newStatus:' + newStatus); + let obj2 = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + + for (let key in newStatus) { + console.log('FormExtension onVisibilityChange, key:' + key + ", value=" + newStatus[key]); + this.context.updateForm(key, obj2) + .then((data)=>{ + console.log('FormExtension context updateForm, data:' + data); + }).catch((error) => { + console.error('Operation updateForm failed. Cause: ' + error);}); + } + } + ``` + +## onEvent + +onEvent(formId: string, message: string): void + +卡片提供方接收处理卡片事件的通知接口。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | ------ | ---- | ---------------------- | + | formId | string | 是 | 请求触发事件的卡片ID。 | + | message | string | 是 | 事件消息。 | + +- 示例: + + ``` + onEvent(formId, message) { + console.log('FormExtension onEvent, formId:' + formId + ", message:" + message); + } + ``` + +## onDestroy + +onDestroy(formId: string): void + +卡片提供方接收销毁卡片的通知接口。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------ | + | formId | string | 是 | 请求销毁的卡片ID。 | + +- 示例: + + ``` + onDestroy(formId) { + console.log('FormExtension onDestroy, formId:' + formId); + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextensioncontext.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextensioncontext.md new file mode 100644 index 0000000000000000000000000000000000000000..fd569ab8904e79594ca8f8f4dd8aba54efb53f62 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-formextensioncontext.md @@ -0,0 +1,72 @@ +--- +title: js-apis-formextensioncontext +permalink: /pages/extra/f2917a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# FormExtensionContext + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +FormExtension的上下文环境,提供FormExtension具有的能力和接口,继承自ExtensionContext。 + +## updateForm + +updateForm(formId: string, formBindingData: formBindingData.FormBindingData, callback: AsyncCallback\): void + +主动更新卡片。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------------- | ------------------------------------------------------------ | ---- | -------------------------------------- | + | formId | string | 是 | 请求更新的卡片ID。 | + | formBindingData | [formBindingData.FormBindingData](/pages/extra/6e0d82/#formbindingdata) | 是 | 卡片新的数据。 | + | callback | AsyncCallback\ | 是 | 回调函数,返回接口调用是否成功的结果。 | + +- 示例: + + ``` + let obj2 = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + this.context.updateForm(formId, obj2, (data)=>{ + console.log('FormExtension context updateForm, data:' + data); + }); + ``` + +## updateForm + +updateForm(formId: string, formBindingData: formBindingData.FormBindingData): Promise\ + +更新卡片。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------------- | ------------------------------------------------------------ | ---- | ------------------ | + | formId | string | 是 | 请求更新的卡片ID。 | + | formBindingData | [formBindingData.FormBindingData](/pages/extra/6e0d82/#formbindingdata) | 是 | 卡片新的数据。 | + +- 返回值: + + | 类型 | 说明 | + | -------------- | --------------------------------- | + | Promise\ | 返回一个Promise,包含接口的结果。 | + +- 示例: + + ``` + let obj2 = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + this.context.updateForm(formId, obj2) + .then((data)=>{ + console.log('FormExtension context updateForm, data:' + data); + }).catch((error) => { + console.error('Operation updateForm failed. Cause: ' + error);}); + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashmap.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashmap.md new file mode 100644 index 0000000000000000000000000000000000000000..c682b294a5526575ba4b2e014a4fd87bf53ebf72 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashmap.md @@ -0,0 +1,393 @@ +--- +title: js-apis-hashmap +permalink: /pages/extra/73b9d5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器HashMap + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {HashMap} from '@ohos.util.HashMap' +``` + + +## 权限 + +无 + +## HashMap + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | HashMap的元素个数 | + + +### constructor + +constructor(); + +HashMap的构造函数。 + +- 示例: + ``` + let hashMap = new HashMap(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该HashMap是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const hashMap = new HashMap(); + hashMap.isEmpty(); + ``` + + +### hasKey + +hasKey(key: K): boolean; + +判断此HashMap中是否含有该指定key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### hasValue + +hasValue(value: V): boolean; + +判断此HashMap中是否含有该指定value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.hasValue(123); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.hasValue(123); + ``` + + +### get + +get(key: K): V; + +获取指定key所对应的value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 查找的指定key | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回key映射的value值 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + hashMap.get("sdfs"); + ``` + + +### setAll + +setAll(map: HashMap): void; + +将一个HashMap中的所有元素组添加到另一个hashmap中。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | map | HashMap | 是 | 被添加元素的hashmap | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + let newHashMap = new HashMap(); + hashMap.setAll(newHashMap); + ``` + + +### set + +set(key: K, value: V): Object; + +向HashMap中添加一组数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 添加成员数据的键名 | + | value | V | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Object | 返回添加后的hashmap | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + ``` + + +### remove + +remove(key: K): V; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 依据key指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回删除元素的值 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + hashMap.remove("sdfs"); + ``` + + +### clear + +clear(): void; + +清除HashMap中的所有元素,并把length置为0。 + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + hashMap.clear(); + ``` + + +### keys + +keys(): IterableIterator<K>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<K> | 返回一个迭代器 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + let iter = hashMap.keys(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### values + +values(): IterableIterator<V>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<V> | 返回一个迭代器 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + let iter = hashMap.values(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### replace + +replace(key: K, value: V): boolean; + +对HashMap中一组数据进行更新(替换)。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 依据key指定替换的元素 | + | value | V | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否成功对已有数据进行替换 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("sdfs", 123); + hashMap.replace("sdfs", 357); + ``` + + +### forEach + +forEach(callbackfn: (value: V, key?: K, hashMap?: HashMap) => void, thisArg?: Object): void; + +通过回调函数来遍历HashMap实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 当前遍历到的元素键值对的值 | + | key | K | 是 | 当前遍历到的元素键值对的键 | + | hashMap | HashMap | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("sdfs", 123); + hashMap.set("dfsghsf", 357); + hashMap.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### entries + +entries(): IterableIterator<[K, V]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + let iter = hashMap.entries(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<[K, V]>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let hashMap = new HashMap(); + hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + hashMap.set("sdfs", 356); + + // 使用方法一: + for (let item of hashMap) { + console.log("key: " + item[0]); + console.log("value: " + item[1]); + } + + // 使用方法二: + let iter = hashMap[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashset.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashset.md new file mode 100644 index 0000000000000000000000000000000000000000..3db617d079e7d52c3a8cea7f35a9d38a4d67fad1 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-hashset.md @@ -0,0 +1,269 @@ +--- +title: js-apis-hashset +permalink: /pages/extra/c0caab/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器HashSet + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {HashSet} from '@ohos.util.HashSet' +``` + + +## 权限 + +无 + +## HashSet + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | HashSet的元素个数 | + + +### constructor + +constructor(); + +HashSet的构造函数。 + +- 示例: + ``` + let hashSet = new HashSet(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该HashSet是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const hashSet = new HashSet(); + hashSet.isEmpty(); + ``` + + +### has + +has(value: T): boolean; + +判断此HashSet中是否含有该指定key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### add + +add(value: T): boolean; + +向HashSet中添加数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 添加成员数据 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回是否有成功增加元素 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### remove + +remove(value: T): boolean; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回是否成功删除指定元素 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("sdfs"); + hashSet.remove("sdfs"); + ``` + + +### clear + +clear(): void; + +清除HashSet中的所有元素,并把length置为0。 + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("sdfs"); + hashSet.clear(); + ``` + + +### values + +values(): IterableIterator<T>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("sdfs"); + let iter = hashSet.values(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### forEach + +forEach(callbackfn: (value: T, key?: T, hashSet?: HashSet<T>) => void, thisArg?: Object): void; + +通过回调函数来遍历实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素键值对的值 | + | key | T | 否 | 当前遍历到的元素键值对的值(和value相同) | + | hashSet | HashSet<T> | 否 | 当前调用forEach方法的实例对象 | + + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("sdfs"); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### entries +entries(): IterableIterator<[T, T]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[T, T]> | 返回一个迭代器 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("sdfs"); + let iter = hashSet.entries(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let hashSet = new HashSet(); + hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + hashSet.add("sdfs"); + + // 使用方法一: + for (let item of hashSet) { + console.log("value: " + item); + } + + // 使用方法二: + let iter = hashSet[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightmap.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightmap.md new file mode 100644 index 0000000000000000000000000000000000000000..fa5f29c91bb47dd616291de5da38b14ec4c94c62 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightmap.md @@ -0,0 +1,564 @@ +--- +title: js-apis-lightweightmap +permalink: /pages/extra/c7ecab/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器LightWeightMap + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {LightWeightMap} from '@ohos.util.LightWeightMap' +``` + + +## 权限 + +无 + +## LightWeightMap + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | LightWeightMap的元素个数 | + + +### constructor + +constructor(); + +LightWeightMap的构造函数。 + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该LightWeightMap是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const lightWeightMap = new LightWeightMap(); + lightWeightMap.isEmpty(); + ``` + + +### hasAll + +hasAll(map: LightWeightMap): boolean; + +判断此LightWeightMap中是否含有该指定map中的所有元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | map | LightWeightMap | 是 | 比较对象 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含所有元素 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + let map = new LightWeightMap(); + map.set("sdfs", 356); + let result = lightWeightMap.hasAll(map); + ``` + + +### hasKey + +hasKey(key: K): boolean; + +判断此LightWeightMap中是否含有该指定key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### hasValue + +hasValue(value: V): boolean; + +判断此LightWeightMap中是否含有该指定value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.hasValue(123); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.hasValue(123); + ``` + + +### increaseCapacityTo + +increaseCapacityTo(minimumCapacity: number): void; + +将当前LightWeightMap扩容至可以容纳指定数量元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | minimumCapacity | number | 是 | 需要容纳数量 | + + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.increaseCapacityTo(10); + ``` + + +### get + +get(key: K): V; + +获取指定key所对应的value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 查找的指定key | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回key映射的value值 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.get("sdfs"); + ``` + + +### getIndexOfKey + +getIndexOfKey(key: K): number; + +查找指定元素第一次出现的下标值,如果没有找到该元素返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 被查找的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.getIndexOfKey("sdfs"); + ``` + + +### getIndexOfValue + +getIndexOfValue(value: V): number; + +查找指定元素第一次出现的下标值,如果没有找到该元素返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 被查找的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.getIndexOfValue(123); + ``` + + +### getKeyAt + +getKeyAt(index: number): K; + +查找指定下标的元素键值对中key值,否则返回undefined。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 所查找的下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K | 返回该下标对应的元素键值对中key值 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.getKeyAt(1); + ``` + + +### setAll + +setAll(map: LightWeightMap): void; + +将一个LightWeightMap中的所有元素组添加到另一个lightweightmap中。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | map | LightWeightMap | 是 | 被添加元素的lightweightmap | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + let map = new LightWeightMap(); + lightWeightMap.setAll(map); + ``` + + +### set +set(key: K, value: V): Object; + +向LightWeightMap中添加一组数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 添加成员数据的键名 | + | value | V | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Object | 返回添加后的hashmap | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + ``` + + +### remove + +remove(key: K): V; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 依据key指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回删除元素的值 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.remove("sdfs"); + ``` + + +### removeAt + +removeAt(index: number): boolean; + +删除指定下标的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定想要删除元素下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 确认是否成功删除元素 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.removeAt(1); + ``` + + +### setValueAt + +setValueAt(index: number, newValue: V): boolean; + +向LightWeightMap中具体位置替换键值对中的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定替换数据下标 | + | newValue | V | 是 | 替换键值对中的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否成功替换指定位置数据 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.setValueAt(1, 3546); + ``` + + +### getValueAt + +getValueAt(index: number): V; + +获取LightWeightMap中具体位置键值对中的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定查询数据下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回指定位置中键值对的值 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.getValueAt(1); + ``` + + +### clear + +clear(): void; + +清除LightWeightMap中的所有元素,并把length置为0。 + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + lightWeightMap.clear(); + ``` + + +### keys + +keys(): IterableIterator<K>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<K> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + let iter = lightWeightMap.keys(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### values + +values(): IterableIterator<V>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<V> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + let iter = lightWeightMap.values(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### forEach + +forEach(callbackfn: (value: V, key?: K, lightWeightMap?: LightWeightMap) => void, thisArg?: Object): void; + +通过回调函数来遍历实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 当前遍历到的元素键值对的值 | + | key | K | 是 | 当前遍历到的元素键值对的键 | + | lightWeightMap | LightWeightMap | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("sdfs", 123); + lightWeightMap.set("dfsghsf", 357); + lightWeightMap.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### entries + +entries(): IterableIterator<[K, V]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + let iter = lightWeightMap.entries(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<[K, V]>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightMap = new LightWeightMap(); + lightWeightMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + lightWeightMap.set("sdfs", 356); + + // 使用方法一: + for (let item of lightWeightMap) { + console.log("key: " + item[0]); + console.log("value: " + item[1]); + } + + // 使用方法二: + let iter = lightWeightMap[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightset.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightset.md new file mode 100644 index 0000000000000000000000000000000000000000..5802486339a03c1e435bde75037fcf6aeaf261b1 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-lightweightset.md @@ -0,0 +1,476 @@ +--- +title: js-apis-lightweightset +permalink: /pages/extra/461720/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器LightWeightSet + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {LightWeightSet} from '@ohos.util.LightWeightSet' +``` + + +## 权限 + +无 + +## LightWeightSet + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | LightWeightSet的元素个数 | + + +### constructor + +constructor(); + +LightWeightSet的构造函数。 + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该容器是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const lightWeightSet = new LightWeightSet(); + lightWeightSet.isEmpty(); + ``` + +### add + +add(value: T): boolean; + +向此容器中添加数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 添加的成员数据 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否成功添加元素 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### addAll + +addAll(set: LightWeightSet<T>): boolean; + +将另一个容器中的所有元素组添加到当前容器中。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | set | LightWeightSet<T> | 是 | 提供添加元素的lightweightmap | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + let set = new LightWeightSet(); + set.add("sfage"); + lightWeightSet.addAll(set); + ``` + + +### hasAll + +hasAll(set: LightWeightSet<T>): boolean; + +判断此容器中是否含有该指定set中的所有元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | set | LightWeightSet<T> | 是 | 比较对象 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含所有元素 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + let set = new LightWeightSet(); + set.add("sdfs"); + let result = lightWeightSet.hasAll(set); + ``` + + +### has + +has(value: T): boolean; + +判断此容器中是否含有该指定value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.has(123); + lightWeightSet.add(123); + lightWeightSet.has(123); + ``` + + +### equal + +equal(obj: Object): boolean; + +判断此容器中是否含有该指定obj同类型。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | obj | Object | 是 | 比较对象 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否构成类型相同 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + let obj = {"Ahfbrgrbgnutfodgorrogorgrogofdfdf", "sdfs"}; + let result = lightWeightSet.equal(obj); + ``` + + +### ensureCapacityTo + +ensureCapacityTo(minimumCapacity: number): void; + +将当前容器扩容至可以容纳指定数量元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | minimumCapacity | number | 是 | 需要容纳数量 | + + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.ensureCapacityTo(10); + ``` + + +### getIndexOf + +getIndexOf(key: T): number; + +获取指定key所对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | T | 是 | 查找的指定key | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 在lightweightset中指定数据的下标 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.getIndexOf("sdfs"); + ``` + + +### remove + +remove(key: T): T; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | T | 是 | 依据key指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除元素的值 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.remove("sdfs"); + ``` + + +### removeAt + +removeAt(index: number): boolean; + +删除指定下标的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定想要删除元素下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 确认是否成功删除元素 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.removeAt(1); + ``` + + +### getValueAt + +getValueAt(index: number): T; + +获取此容器中具体位置的元素 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定查询数据下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回指定位置中元素 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.getValueAt(1); + ``` + + +### clear + +clear(): void; + +清除容器中的所有元素,并把length置为0。 + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.clear(); + ``` + + +### toString + +toString(): String; + +获取包含容器中所有键和值的字符串。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | String | 返回一个字符串 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.toString(); + ``` + + +### toArray + +toArray(): Array<T>; + +获取包含此容器中所有对象的数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<T> | 返回一个数组 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + lightWeightSet.toString(); + ``` + + +### values + +values(): IterableIterator<T>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + let iter = lightWeightSet.values(); + let index = 0; + while(index < lightWeightSet.length) { + console.log(JSON.stringify(iter.next().value)); + index++; + } + ``` + + +### forEach + +forEach(callbackfn: (value: T, key?: T, lightWeightSet?: LightWeightSet<T>) => void, thisArg?: Object): void; + +通过回调函数来遍历LightWeightSet实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | key | T | 否 | 当前遍历到的元素(和value相同) | + | lightWeightSet | LightWeightSet<T> | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("sdfs"); + lightWeightSet.add("dfsghsf"); + lightWeightSet.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### entries + +entries(): IterableIterator<[T, T]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[T, T]> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + let iter = lightWeightSet.entries(); + let index = 0; + while(index < lightWeightSet.length) { + console.log(JSON.stringify(iter.next().value)); + index++; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let lightWeightSet = new LightWeightSet(); + lightWeightSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + lightWeightSet.add("sdfs"); + + // 使用方法一: + for (let item of lightWeightSet) { + console.log("value: " + item); + } + + // 使用方法二: + let iter = lightWeightSet[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-linkedlist.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-linkedlist.md new file mode 100644 index 0000000000000000000000000000000000000000..d7e8c0057861ba77ce7e8c8875a46cb5d3a452e3 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-linkedlist.md @@ -0,0 +1,564 @@ +--- +title: js-apis-linkedlist +permalink: /pages/extra/fbaa4b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器LinkedList + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {LinkedList} from '@ohos.util.LinkedList' +``` + + +## 权限 + +无 + + +## LinkedList + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | LinkedList的元素个数 | + + +### constructor + +constructor(_head?: NodeObj<T>, _tail?: NodeObj<T>); + +LinkedList的构造函数。 + +- 参数: + | 参数名 | 类型 | 可读 | 可写 | 说明 | + | -------- | -------- | -------- | -------- | -------- | + | _head | NodeObj<T> | 是 | 否 | 入参对象,节点对象,含有element,和next指向,和prev指向 | + | _tail | NodeObj<T> | 是 | 否 | 入参对象,节点对象,含有element,和next指向,和prev指向 | + +- 示例: + ``` + let linkedList = new LinkedList(); + ``` + + +### add + +add(element: T): boolean; + +在LinkedList尾部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 插入成功返回true,失败返回false | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add("a"); + linkedList.add(1); + let b = [1, 2, 3]; + linkedList.add(b); + let c = {name : "lala", age : "13"}; + linkedList.add(false); + ``` +### addFirst + +addFirst(element: T): void; + +在LinkedList头部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.addFirst("a"); + linkedList.addFirst(1); + let b = [1, 2, 3]; + linkedList.addFirst(b); + let c = {name : "lala", age : "13"}; + linkedList.addFirst(false); + ``` + +### insert + +insert(element: T, index: number): void; + +在长度范围内任意插入指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 被插入的元素 | + | index | number | 是 | 被插入的位置索引 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.insert("A", 0); + linkedList.insert(0, 1); + linkedList.insert(true, 2); + ``` + +### has + +has(element: T): boolean; + +判断此LinkedList中是否含有该指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.has("Ahfbrgrbgnutfodgorrogorg"); + linkedList.add("Ahfbrgrbgnutfodgorrogorg"); + linkedList.has("Ahfbrgrbgnutfodgorrogorg"); + ``` + +### get + +get(index: number): T; + +根据下标获取LinkedList中的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定的下标值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 根据下标查找到的元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(1); + linkedList.add(2); + linkedList.add(4); + linkedList.get(2); + ``` +### getLastIndexOf + +getLastIndexOf(element: T): number; + +返回指定元素最后一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素最后一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(1); + linkedList.add(2); + linkedList.add(4); + linkedList.getLastIndexOf(2); + ``` + +### getIndexOf + +getIndexOf(element: T): number; + +返回指定元素第一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(1); + linkedList.add(2); + linkedList.add(4); + linkedList.getIndexOf(2); + ``` +### removeByIndex + +removeByIndex(index: number): T; + +根据元素的下标值查找元素,返回元素后将其删除。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定元素的下标值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(4); + linkedList.removeByIndex(2); + ``` +### removeFirst + +removeFirst(): T; + +删除并返回LinkedList的第一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(4); + linkedList.removeFirst(); + ``` +### removeLast + +removeLst(): T; + +删除并返回LinkedList的最后一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(2); + linkedList.add(4); + linkedList.removeLast(); + ``` + +### remove + +remove(element: T): boolean; + +删除查找到的第一个指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.remove(2); + ``` +### removeFirstFound + +removeFirstFound(element: T): boolean; + +删除第一次出现的指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.removeFirstFound(4); + ``` +### removeLastFound + +removeLastFound(element: T): boolean; + +删除最后一次出现的指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.removeLastFound(4); + ``` +### clone +clone(): LinkedList<T>; + +克隆一个与LinkedList一模一样的实例,并返回克隆后的实例,修改克隆后的实例并不会影响原实例。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | LinkedList<T> | 返回LinkedList对象实例 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.clone(); + ``` +### forEach +forEach(callbackfn: (value: T, index?: number, linkedlist?: LinkedList<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历LinkedList实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | linkedlist | LinkedList<T> | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.forEach((value, index) => { + console.log(value, index); + }); + ``` +### clear +clear(): void; + +清除LinkedList中的所有元素,并把length置为0。 + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.clear(); + ``` +### set +set(index: number, element: T): T; +将此 LinkedList 中指定位置的元素替换为指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 查找的下标值 | + | element | T | 是 | 用来替换的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T类型 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.set(2, "b"); + ``` +### convertToArray +convertToArray(): Array<T>; + +把当前LinkedList实例转换成数组,并返回转换后的数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<T> | 返回数组类型 | + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.convertToArray(); + ``` + +### getFirst + +getFirst(): T; +获取LinkedList实例中的第一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.getFirst(); + ``` +### getLast + +getLast(): T; +获取LinkedList实例中的最后一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + linkedList.getLast(); + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器。 | + + +- 示例: + ``` + let linkedList = new LinkedList(); + linkedList.add(2); + linkedList.add(4); + linkedList.add(5); + linkedList.add(4); + + // 使用方法一: + for (let item of linkedList) { + console.log(item); + } + + // 使用方法二: + let iter = linkedList[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-list.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-list.md new file mode 100644 index 0000000000000000000000000000000000000000..25605e1f75bd5aeefb2685764c021e8b57ddf0f5 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-list.md @@ -0,0 +1,574 @@ +--- +title: js-apis-list +permalink: /pages/extra/0af489/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器List + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {List} from '@ohos.util.List' +``` + + +## 权限 + +无 + + +## List + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | List的元素个数 | + + +### constructor + +constructor(_head?: NodeObj<T>); + +List的构造函数。 + +- 参数: + | 参数名 | 类型 | 可读 | 可写 | 说明 | + | -------- | -------- | -------- | -------- | -------- | + | _head | NodeObj<T> | 是 | 否 | 入参对象,节点对象,含有element,和next指向 | + +- 示例: + ``` + let list = new List(); + ``` + + +### add + +add(element: T): boolean; + +在List尾部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 插入成功返回true,失败返回false | + +- 示例: + ``` + let list = new List; + list.add("a"); + list.add(1); + let b = [1, 2, 3]; + list.add(b); + let c = {name : "lala", age : "13"}; + list.add(false); + ``` + +### insert + +insert(element: T, index: number): void; + +在长度范围内任意位置插入指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 被插入的元素 | + | index | number | 是 | 被插入的位置索引 | + +- 示例: + ``` + let list = new List(); + list.insert("A", 0); + list.insert(0, 1); + list.insert(true, 2); + ``` + +### has + +has(element: T): boolean; + +判断此List中是否含有该指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let list = new List(); + list.has("Ahfbrgrbgnutfodgorrogorg"); + list.add("Ahfbrgrbgnutfodgorrogorg"); + list.has("Ahfbrgrbgnutfodgorrogorg"); + ``` + +### get + +get(index: number): T; + +根据下标获取List中的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 要查找的下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 根据下标查找到的元素 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(2); + list.add(1); + list.add(2); + list.add(4); + list.get(2); + ``` +### getLastIndexOf + +getLastIndexOf(element: T): number; + +查找指定元素最后一次出现的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 查找指定元素最后一次出现的下标值,查找失败返回-1 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(2); + list.add(1); + list.add(2); + list.add(4); + list.getLastIndexOf(2); + ``` + +### getIndexOf + +getIndexOf(element: T): number; + +查找指定元素第一次出现的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回第一次找到指定元素的下标,没有找到返回-1 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(2); + list.add(1); + list.add(2); + list.add(4); + list.getIndexOf(2); + ``` + +### equal + +equal(obj: Object): boolean; + +比较指定对象与此List是否相等。如果对象与此列表相同,返回true,否则返回false。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | obj | Object | 是 | 用来比较的对象 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 返回boolean类型 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(2); + let obj1 = new List(); + obj1.add(2); + obj1.add(4); + obj1.add(5); + list.equal(obj1); + let obj2 = {name : "lala", age : "13"}; + list.equal(obj2); + ``` +### removeByIndex + +removeByIndex(index: number): T; + +根据元素的下标值查找元素,返回元素后将其删除。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定元素的下标值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(2); + list.add(4); + list.removeByIndex(2); + ``` + +### remove + +remove(element: T): boolean; + +删除查找到的第一个指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.remove(2); + ``` + +### replaceAllElements +replaceAllElements(callbackfn: (value: T, index?: number, list?: List<T>) => T, +thisArg?: Object): void; + +用户操作List中的元素,用操作后的元素替换原元素并返回操作后的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | list | List<T> | 否 | 当前调用replaceAllElements方法的实例对象 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.replaceAllElements((value, index) => { + return value = 2 * value; + }); + list.replaceAllElements((value, index) => { + return value = value - 2; + }); + ``` +### forEach +forEach(callbackfn: (value: T, index?: number, list?: List<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历List实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素。 | + | index | number | 否 | 当前遍历到的下标值。 | + | list | List<T> | 否 | 当前调用forEach方法的实例对象 | + + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.forEach((value, index) => { + console.log(value, index); + }); + + ``` +### sort +sort(comparator: (firstValue: T, secondValue: T) => number): void; + +对List中的元素进行一个排序操作。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | comparator | function | 是 | 回调函数。 | + +- comparator的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | firstValue | T | 是 | 前一项元素 | + | secondValue | T | 是 | 后一项元素 | + + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.sort(a, (b => a - b)); + list.sort(a, (b => b - a)); + ``` +### getSubList +getSubList(fromIndex: number, toIndex: number): List<T>; + +根据下标截取List中的一段元素,并返回这一段List实例,包括起始值但不包括终止值。 +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromIndex | number | 是 | 起始下标 | + | toIndex | number | 是 | 终止下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | List<T> | 返回List对象实例 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.subList(2, 4); + list.subList(4, 3); + list.subList(2, 6); + ``` + +### clear +clear(): void; + +清除List中的所有元素,并把length置为0。 + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.clear(); + ``` +### set +set(index: number, element: T): T; +将此 List 中指定位置的元素替换为指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 查找的下标值 | + | element | T | 是 | 用来替换的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T类型 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.set(2, "b"); + + ``` +### convertToArray +convertToArray(): Array<T>; + +把当前List实例转换成数组,并返回转换后的数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<T> | 返回数组类型 | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.convertToArray(); + ``` +### isEmpty +isEmpty(): boolean; + +判断该List是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.isEmpty(); + ``` +### getFirst + +getFirst(): T; +获取List实例中的第一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let list = new Vector(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.getFirst(); + ``` +### getLast + +getLast(): T; +获取List实例中的最后一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let list = new Vector(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + list.getLast(); + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器。 | + + +- 示例: + ``` + let list = new List(); + list.add(2); + list.add(4); + list.add(5); + list.add(4); + + // 使用方法一: + for (let item of list) { + console.log(item); + } + + // 使用方法二: + let iter = list[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-plainarray.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-plainarray.md new file mode 100644 index 0000000000000000000000000000000000000000..ad3c80b1e4a2db97c34f83f2bb81a9c3044baa41 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-plainarray.md @@ -0,0 +1,434 @@ +--- +title: js-apis-plainarray +permalink: /pages/extra/7c7d4b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器PlainArray + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {PlainArray} from '@ohos.util.PlainArray' +``` + + +## 权限 + +无 + +## PlainArray + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | PlainArray的元素个数 | + + +### constructor + +constructor(); + +PlainArray的构造函数。 + +- 示例: + ``` + let plainArray = new PlainArray(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该容器是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const plainArray = new PlainArray(); + plainArray.isEmpty(); + ``` + + +### has + +has(key: number): boolean; + +判断此容器中是否含有该指定key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | number | 是 | 查询的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.has(1); + plainArray.add(1, "sddfhf"); + plainArray.has(1); + ``` + + +### get + +get(key: number): T; + +获取指定key所对应的value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | number | 是 | 查找的指定key | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回key映射的value值 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.get(1); + ``` + + +### getIndexOfKey + +getIndexOfKey(key: number): number; + +查找指定元素第一次出现的下标值,如果没有找到该元素返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | number | 是 | 被查找的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.getIndexOfKey("sdfs"); + ``` + + +### getIndexOfValue + +getIndexOfValue(value: T): number; + +查找指定元素第一次出现的下标值,如果没有找到该元素返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 被查找的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.getIndexOfValue("sddfhf"); + ``` + + +### getKeyAt + +getKeyAt(index: number): number; + +查找指定下标的元素键值对中key值,否则返回undefined。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 所查找的下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回该下标对应的元素键值对中key值 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.getKeyAt(1); + ``` + + +### clone + +clone(): PlainArray<T>; + +克隆一个一模一样的实例,并返回克隆后的实例,修改克隆后的实例并不会影响原实例。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | PlainArray<T> | 返回新的对象实例 | + +- 示例: + ``` + let plainArray = new ArrayList(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + let newPlainArray = plainArray.clone(); + ``` + + +### add + +add(key: number, value: T): boolean; + +向容器中添加一组数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | number | 是 | 添加成员数据的键名 | + | value | T | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 确认是否成功添加 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + ``` + + +### remove + +remove(key: number): T; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | number | 是 | 依据key指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除元素的值 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.remove(2); + ``` + + +### removeAt + +removeAt(index: number): boolean; + +删除指定下标的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定想要删除元素下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 确认是否成功删除元素 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.removeAt(1); + ``` + + +### removeRangeFrom + +removeRangeFrom(index: number, size: number): number; + +删除一定范围内的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 删除元素的起始下标 | + | size | number | 是 | 期望删除元素个数 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 实际删除元素个数 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.removeAt(1, 3); + ``` + + +### setValueAt + +setValueAt(index: number, newValue: T): void; + +向容器中具体位置替换键值对中的值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定替换数据下标 | + | newValue | T | 是 | 替换键值对中的值 | + + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.setValueAt(1, 3546); + ``` + + +### toString + +toString(): String; + +获取包含容器中所有键和值的字符串。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | String | 返回一个字符串 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.toString(); + ``` + + +### clear + +clear(): void; + +清除容器中的所有元素,并把length置为0。 + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.clear(); + ``` + + +### forEach + +forEach(callbackfn: (value: T, key?: number, plainArray?: PlainArray) => void, thisArg?: Object): void; + +通过回调函数来遍历实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素键值对的值 | + | key | number | 是 | 当前遍历到的元素键值对的键 | + | plainArray | PlainArray | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + plainArray.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<[number, T]>; + +返回一个迭代器,迭代器的每一项都是一个 JavaScript对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[number, T]> | 返回一个迭代器 | + +- 示例: + ``` + let plainArray = new PlainArray(); + plainArray.add(1, "sddfhf"); + plainArray.add(2, "sffdfhf"); + + // 使用方法一: + for (let item of plainArray) { + console.log("index: " + item[0]); + console.log("value: " + item[1]); + } + + // 使用方法二: + let iter = plainArray[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-queue.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-queue.md new file mode 100644 index 0000000000000000000000000000000000000000..43cda70086e46bed0634815ad8031b6b7918bed9 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-queue.md @@ -0,0 +1,193 @@ +--- +title: js-apis-queue +permalink: /pages/extra/8f3490/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器Queue + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {Queue} from '@ohos.util.Queue' +``` + + +## 权限 + +无 + + +## Queue + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | Queue的元素个数 | + + +### constructor + +constructor(); + +Queue的构造函数。 + + +- 示例: + ``` + let queue = new Queue(); + ``` + + +### add + +add(element: T): boolean; + +在队列尾部插入元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 插入成功返回true,失败返回false | + +- 示例: + ``` + let queue = new Queue(); + queue.add("a"); + queue.add(1); + let b = [1, 2, 3]; + queue.add(b); + let c = {name : "lala", age : "13"}; + queue.add(false); + ``` + +### pop + +pop(): T + +删除头元素并返回该删除元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let queue = new Queue(); + queue.add(2); + queue.add(4); + queue.add(5); + queue.add(2); + queue.add(4); + queue.pop(); + ``` + +### getFirst + +getFirst(): T; + +获取队列的头元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回尾元素 | + +- 示例: + ``` + let queue = new Queue(); + queue.add(2); + queue.add(4); + queue.add(5); + queue.add(2); + queue.getFirst(); + ``` + +### forEach +forEach(callbackfn: (value: T, index?: number, queue?: Queue<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历Queue实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数。 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | queue | Queue<T> | 否 | 当前调用forEach方法的实例对象 | + + +- 示例: + ``` + let queue = new Queue(); + queue.add(2); + queue.add(4); + queue.add(5); + queue.add(4); + queue.forEach((value, index) => { + console.log(value, index); + }); + + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + + +- 示例: + ``` + let queue = new Queue(); + queue.add(2); + queue.add(4); + queue.add(5); + queue.add(4); + + // 使用方法一: + for (let item of queue) { + console.log(item); + } + + // 使用方法二: + let iter = queue[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-reminderAgent.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-reminderAgent.md new file mode 100644 index 0000000000000000000000000000000000000000..e5e12cf9b925ea0ef74bcff5da9a8b6a0d4bd1f4 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-reminderAgent.md @@ -0,0 +1,512 @@ +--- +title: js-apis-reminderAgent +permalink: /pages/extra/1a845b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 后台代理提醒 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import reminderAgent from'@ohos.reminderAgent'; +``` + + +## 系统能力 + +SystemCapability.Notification.ReminderAgent + + +## 权限 + +ohos.permission.PUBLISH_AGENT_REMINDER + + +## reminderAgent.publishReminder + +publishReminder(reminderReq: ReminderRequest, callback: AsyncCallback<number>): void + +发布一个后台代理提醒,使用callback方式实现异步调用。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | reminderReq | [ReminderRequest](#reminderrequest) | 是 | 需要发布的提醒实例。 | + | callback | AsyncCallback<number> | 是 | 异步回调,返回当前发布的提醒的reminderId。 | + +- 示例: + ``` + export default { data: {timer: { + reminderType: reminderAgent.ReminderType.REMINDER_TYPE_TIMER, + triggerTimeInSeconds: 3 + } + }, + startTimer() { + reminderAgent.publishReminder(timer, (err, reminderId) => { console.log("reminderId = " + reminderId); + }); + } + } + ``` + + +## reminderAgent.publishReminder + +publishReminder(reminderReq: ReminderRequest): Promise<number> + +发布一个后台代理提醒,使用Promise方式实现异步调用。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | reminderReq | [ReminderRequest](#reminderrequest) | 是 | 需要发布的提醒实例。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<number> | 返回提醒的reminderId。 | + +- 示例 + ``` + export default { data: {timer: { + reminderType: reminderAgent.ReminderType.REMINDER_TYPE_TIMER, + triggerTimeInSeconds: 3 + } + }, + startTimer() { + reminderAgent.publishReminder(this.timer).then((reminderId) => { + console.log("reminderId = " + reminderId); + }); + } + } + ``` + + +## reminderAgent.cancelReminder + +cancelReminder(reminderId: number, callback: AsyncCallback<void>): void + +取消指定id的提醒,使用callback方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| reminderId | number | 是 | 目标reminder的id号。 | +| callback | AsyncCallback<void> | 是 | 异步回调。 | + +- 示例 + +``` +export default { + cancel() { reminderAgent.cancelReminder(1, (err, data) => { + console.log("do next"); + }); + } +} +``` + + +## reminderAgent.cancelReminder + +cancelReminder(reminderId: number): Promise<void> + +取消指定id的提醒,使用Promise方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| reminderId | number | 是 | 目标reminder的id号。 | + +- 返回值 + +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | Promise类型异步回调。 | + +- 示例 + +``` +export default { + cancel() { + reminderAgent.cancelReminder(1).then(() => { + console.log("do next"); + }); + } +} +``` + + +## reminderAgent.getValidReminders + +getValidReminders(callback: AsyncCallback<Array<ReminderRequest>>): void + +获取当前应用已设置的所有有效(未过期)的提醒,使用callback方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<Array<[ReminderRequest](#reminderrequest)>> | 是 | 异步回调,返回当前应用已设置的所有有效(未过期)的提醒。 | + +- 示例 + +``` +reminderAgent.getValidReminders((err, reminders) => { + for (let i = 0; i < reminders.length; i++) { + console.log("getValidReminders = " + reminders[i]); + console.log("getValidReminders, reminderType = " + reminders[i].reminderType); + for (let j = 0; j < reminders[i].actionButton.length; j++) { + console.log("getValidReminders, actionButton.title = " + reminders[i].actionButton[j].title); + console.log("getValidReminders, actionButton.type = " + reminders[i].actionButton[j].type); + } + console.log("getValidReminders, wantAgent.pkgName = " + reminders[i].wantAgent.pkgName); + console.log("getValidReminders, wantAgent.abilityName = " + reminders[i].wantAgent.abilityName); + console.log("getValidReminders, maxScreenWantAgent.pkgName = " + reminders[i].maxScreenWantAgent.pkgName); + console.log("getValidReminders, maxScreenWantAgent.abilityName = " + reminders[i].maxScreenWantAgent.abilityName); + console.log("getValidReminders, ringDuration = " + reminders[i].ringDuration); + console.log("getValidReminders, snoozeTimes = " + reminders[i].snoozeTimes); + console.log("getValidReminders, timeInterval = " + reminders[i].timeInterval); + console.log("getValidReminders, title = " + reminders[i].title); + console.log("getValidReminders, content = " + reminders[i].content); + console.log("getValidReminders, expiredContent = " + reminders[i].expiredContent); + console.log("getValidReminders, snoozeContent = " + reminders[i].snoozeContent); + console.log("getValidReminders, notificationId = " + reminders[i].notificationId); + console.log("getValidReminders, slotType = " + reminders[i].slotType); + } +}) +``` + + +## reminderAgent.getValidReminders + +getValidReminders(): Promise<Array<ReminderRequest>> + +获取当前应用已设置的所有有效(未过期)的提醒,使用Promise方式实现异步调用。 + +- 返回值 + +| 类型 | 说明 | +| -------- | -------- | +| Promise<Array<[ReminderRequest](#reminderrequest)>> | 返回当前应用已设置的所有有效(未过期)的提醒。 | + +- 示例 + +``` +reminderAgent.getValidReminders().then((reminders) => { + for (let i = 0; i < reminders.length; i++) { + console.log("getValidReminders = " + reminders[i]); + console.log("getValidReminders, reminderType = " + reminders[i].reminderType); + for (let j = 0; j < reminders[i].actionButton.length; j++) { + console.log("getValidReminders, actionButton.title = " + reminders[i].actionButton[j].title); + console.log("getValidReminders, actionButton.type = " + reminders[i].actionButton[j].type); + } + console.log("getValidReminders, wantAgent.pkgName = " + reminders[i].wantAgent.pkgName); + console.log("getValidReminders, wantAgent.abilityName = " + reminders[i].wantAgent.abilityName); + console.log("getValidReminders, maxScreenWantAgent.pkgName = " + reminders[i].maxScreenWantAgent.pkgName); + console.log("getValidReminders, maxScreenWantAgent.abilityName = " + reminders[i].maxScreenWantAgent.abilityName); + console.log("getValidReminders, ringDuration = " + reminders[i].ringDuration); + console.log("getValidReminders, snoozeTimes = " + reminders[i].snoozeTimes); + console.log("getValidReminders, timeInterval = " + reminders[i].timeInterval); + console.log("getValidReminders, title = " + reminders[i].title); + console.log("getValidReminders, content = " + reminders[i].content); + console.log("getValidReminders, expiredContent = " + reminders[i].expiredContent); + console.log("getValidReminders, snoozeContent = " + reminders[i].snoozeContent); + console.log("getValidReminders, notificationId = " + reminders[i].notificationId); + console.log("getValidReminders, slotType = " + reminders[i].slotType); + } +}) +``` + + +## reminderAgent.cancelAllReminders + +cancelAllReminders(callback: AsyncCallback<void>): void + +取消当前应用所有的提醒,使用callback方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| callback | AsyncCallback<void> | 是 | 异步回调。 | + +- 示例 + +``` +reminderAgent.cancelAllReminders((err, data) =>{ + console.log("do next")}) +``` + + +## reminderAgent.cancelAllReminders + +cancelAllReminders(): Promise<void> + +取消当前应用所有的提醒,使用Promise方式实现异步调用。 + +- 返回值 + +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | Promise类型异步回调。 | + +- 示例 + +``` +reminderAgent.cancelAllReminders().then(() => { + console.log("do next")}) +``` + + +## reminderAgent.addNotificationSlot + +addNotificationSlot(slot: NotificationSlot, callback: AsyncCallback<void>): void + +添加一个NotificationSlot,使用callback方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| slot | [ERROR:Invalid link:zh-cn_topic_0000001158696346.xml#xref1954171018915,link:zh-cn_topic_0000001180018813.xml#section1382174172015](zh-cn_topic_0000001180018813.xml#section1382174172015) | 是 | notification slot实例。 | +| callback | AsyncCallback<void> | 是 | 异步回调。 | + +- 示例 + +``` +export default { data: { mySlot: { + type: 3, + sound: "/sdcard/music2.mp3" + } }, + addSlot() { + reminderAgent.addNotificationSlot(this.mySlot, (err, data) => { + console.log("do next"); + }); + } +} +``` + + +## reminderAgent.addNotificationSlot + +addNotificationSlot(slot: NotificationSlot): Promise<void> + +添加一个NotificationSlot,使用Promise方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| slot | [ERROR:Invalid link:zh-cn_topic_0000001158696346.xml#xref2049924012917,link:zh-cn_topic_0000001180018813.xml#section1382174172015](zh-cn_topic_0000001180018813.xml#section1382174172015) | 是 | notification slot实例。 | + +- 返回值 + +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | Promise类型异步回调。 | + +- 示例 + +``` +export default { data: { mySlot: { + type: 3, + sound: "/sdcard/music2.mp3" + } }, + addSlot() { + reminderAgent.addNotificationSlot(this.mySlot).then(() => { + console.log("do next"); + }); + } +} +``` + + +## reminderAgent.removeNotificationSlot + +removeNotificationSlot(slotType: notification.SlotType, callback: AsyncCallback<void>): void + +删除目标NotificationSlot,使用callback方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| slotType | [ERROR:Invalid link:zh-cn_topic_0000001158696346.xml#xref11228182975217,link:zh-cn_topic_0000001180018813.xml#section072355105110](zh-cn_topic_0000001180018813.xml#section072355105110) | 是 | 目标notification slot的类型。 | +| callback | AsyncCallback<void> | 是 | 异步回调。 | + +- 示例 + +``` +export default { + removeSlot() {reminderAgent.removeNotificationSlot(notification.SlotType.CONTENT_INFORMATION, (err, data) => { + console.log("do next"); +}); + } +} +``` + + +## reminderAgent.removeNotificationSlot + +removeNotificationSlot(slotType: notification.SlotType): Promise<void> + +删除目标NotificationSlot,使用Promise方式实现异步调用。 + +- 参数 + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| slotType | [ERROR:Invalid link:zh-cn_topic_0000001158696346.xml#xref1120863519109,link:zh-cn_topic_0000001180018813.xml#section072355105110](zh-cn_topic_0000001180018813.xml#section072355105110) | 是 | 目标notification slot的类型。 | + +- 返回值 + +| 类型 | 说明 | +| -------- | -------- | +| Promise<void> | Promise类型异步回调。 | + +- 示例 + +``` +export default { + removeSlot() { reminderAgent.removeNotificationSlot(notification.SlotType.CONTENT_INFORMATION).then(() => { + console.log("do next"); + }); + } +} +``` + + +## ActionButtonType + +按钮的类型。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| ACTION_BUTTON_TYPE_CLOSE | 0 | 表示关闭提醒的按钮。 | +| ACTION_BUTTON_TYPE_SNOOZE | 1 | 表示延迟提醒的按钮。 | + + +## ReminderType + +提醒的类型。 + +| 名称 | 默认值 | 说明 | +| -------- | -------- | -------- | +| REMINDER_TYPE_TIMER | 0 | 表示提醒类型:倒计时。 | +| REMINDER_TYPE_CALENDAR | 1 | 表示提醒类型:日历。 | +| REMINDER_TYPE_ALARM | 2 | 表示提醒类型:闹钟。 | + + +## ActionButton + +用于设置弹出的提醒通知信息上显示的按钮类型和标题。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| title | string | 是 | 按钮显示的标题。 | +| type | [ActionButtonType](#actionbuttontype) | 是 | 按钮的类型。 | + + +## WantAgent + +点击提醒通知后跳转的目标ability信息。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| pkgName | string | 是 | 指明点击提醒通知栏后跳转的目标hap包名。 | +| abilityName | string | 是 | 指明点击提醒通知栏后跳转的目标ability名称。 | + + +## MaxScreenWantAgent + +提醒到达时自动拉起的目标ability信息。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| pkgName | string | 是 | 指明提醒到达时自动拉起的目标hap包名(如果设备在使用中,则只弹出通知横幅框)。 | +| abilityName | string | 是 | 指明提醒到达时自动拉起的目标ability名(如果设备在使用中,则只弹出通知横幅框)。 | + + +## ReminderRequest + +提醒实例对象,用于设置提醒类型、响铃时长等具体信息。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| reminderType | ReminderType | 是 | 指明提醒类型。 | +| actionButton | [ActionButton?, ActionButton?] | 否 | 弹出的提醒通知栏中显示的按钮(参数可选,支持0/1/2个按钮)。 | +| wantAgent | WantAgent | 否 | 点击通知后需要跳转的目标ability信息。 | +| maxScreenWantAgent | MaxScreenWantAgent | 否 | 提醒到达时跳转的目标包。如果设备正在使用中,则弹出一个通知框。 | +| ringDuration | number | 否 | 指明响铃时长。 | +| snoozeTimes | number | 否 | 指明延迟提醒次数。 | +| timeInterval | number | 否 | 执行延迟提醒间隔。 | +| title | string | 否 | 指明提醒标题。 | +| content | string | 否 | 指明提醒内容。 | +| expiredContent | string | 否 | 指明提醒过期后需要显示的内容。 | +| snoozeContent | string | 否 | 指明延迟提醒时需要显示的内容。 | +| notificationId | number | 否 | 指明提醒使用的通知的id号,相同id号的提醒会覆盖。 | +| slotType | [ERROR:Invalid link:zh-cn_topic_0000001158696346.xml#xref39047351518,link:zh-cn_topic_0000001180018813.xml#section072355105110](zh-cn_topic_0000001180018813.xml#section072355105110) | 否 | 指明提醒的slot类型。 | + + +## ReminderRequestCalendar + +ReminderRequestCalendar extends ReminderRequest + +日历实例对象,用于设置提醒的时间。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| dateTime | [LocalDateTime](#localdatetime) | 是 | 指明提醒的目标时间。 | +| repeatMonths | Array<number> | 否 | 指明重复提醒的月份。 | +| repeatDays | Array<number> | 否 | 指明重复提醒的日期。 | + + +## ReminderRequestAlarm + +ReminderRequestAlarm extends ReminderRequest + +闹钟实例对象,用于设置提醒的时间。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| hour | number | 是 | 指明提醒的目标时刻。 | +| minute | number | 是 | 指明提醒的目标分钟。 | +| daysOfWeek | Array<number> | 否 | 指明每周哪几天需要重复提醒。 | + + +## ReminderRequestTimer + +ReminderRequestTimer extends ReminderRequest + +倒计时实例对象,用于设置提醒的时间。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| triggerTimeInSeconds | number | 是 | 指明倒计时的秒数。 | + + +## LocalDateTime + +用于日历类提醒设置时指定时间信息。 + +| 名称 | 参数类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| year | number | 是 | 年 | +| month | number | 是 | 月 | +| day | number | 是 | 日 | +| hour | number | 是 | 时 | +| minute | number | 是 | 分 | +| second | number | 否 | 秒 | diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-security-accessToken.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-security-accessToken.md new file mode 100644 index 0000000000000000000000000000000000000000..03ba396105e361b94d51e254fe6f8e40c96dab6a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-security-accessToken.md @@ -0,0 +1,229 @@ +--- +title: js-apis-security-accessToken +permalink: /pages/extra/5dcba5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 访问控制管理 + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +## 导入模块 + +``` +import abilityAccessCtrl from '@ohos.abilityAccessCtrl' +``` + +## 系统能力 +SystemCapability.Security.AccessToken + +## abilityAccessCtrl.createAtManager + +createAtManager(): AtManager + +访问控制管理:获取访问控制模块对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | [AtManager](#atManager) | 获取访问控制模块的实例。 | + +- 示例: + ``` + var AtManager = abilityAccessCtrl.createAtManager(); + ``` + +## AtManager + +管理访问控制模块的实例。 + +### verifyAccessToken + +verifyAccessToken(tokenID: number, permissionName: string): Promise<GrantStatus> + +校验应用是否授予权限,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ------------------- | ---- | ------------------------------------------ | + | tokenID | number | 是 | 要校验的目标应用的身份标识。 | + | permissionName | string | 是 | 需要校验的权限名称。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<GrantStatus> | Promise实例,用于获取异步返回的授权状态结果。 | + +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + let promise = AtManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); + promise.then(data => { + console.log(`promise: data->${JSON.stringify(data)}`); + }); + ``` + +### grantUserGrantedPermission + +grantUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number): Promise<number> + +授予应用user grant权限,使用Promise方式异步返回结果。 + +需要权限:ohos.permission.GRANT_SENSITIVE_PERMISSIONS。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | tokenID | number | 是 | 目标应用的身份标识。 | + | permissionName | string | 是 | 被授予的权限名称。 | + | permissionFlag | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<number> | Promise实例,用于获取异步返回的授权操作结果。 | +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + let promise = AtManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); + promise.then(data => { + console.log(`promise: data->${JSON.stringify(data)}`); + }); + ``` + + + +### grantUserGrantedPermission + +grantUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number, callback: AsyncCallback<number>): void + +授予应用user grant权限,使用callback回调异步返回结果。 + +需要权限:ohos.permission.GRANT_SENSITIVE_PERMISSIONS。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | tokenID | number | 是 | 目标应用的身份标识。 | + | permissionName | string | 是 | 被授予的权限名称。 | + | permissionFlag | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | + | callback | AsyncCallback<number> | 是 | 检查授予应用user grant权限的操作结果同步的回调。 | + +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + let permissionFlag = 1; + AtManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",permissionFlag, data => { + console.log(`callback: data->${JSON.stringify(data)}`); + }); + ``` + +### revokeUserGrantedPermission + +revokeUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number): Promise<number> + +撤销应用user grant权限,使用Promise方式异步返回结果。 + +需要权限:ohos.permission.REVOKE_SENSITIVE_PERMISSIONS。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | tokenID | number | 是 | 目标应用的身份标识。 | + | permissionName | string | 是 | 被撤销的权限名称。 | + | permissionFlag | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<number> | Promise实例,用于获取异步返回的授权操作结果。 | + +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + let permissionFlag = 1; + let promise = AtManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag); + promise.then(data => { + console.log(`promise: data->${JSON.stringify(data)}`); + }); + ``` + +### revokeUserGrantedPermission + +revokeUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number, callback: AsyncCallback<number>): void + +撤销应用user grant权限,使用callback回调异步返回结果。 + +需要权限:ohos.permission.REVOKE_SENSITIVE_PERMISSIONS。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | tokenID | number | 是 | 目标应用的身份标识。 | + | permissionName | string | 是 | 被撤销的权限名称。 | + | permissionFlag | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | + | callback | AsyncCallback<number> | 是 | 检查撤销应用user grant权限的操作结果同步的回调。 | + +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + AtManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",permissionFlag, data => { + console.log(`callback: data->${JSON.stringify(data)}`); + }); + ``` + +### getPermissionFlags + +getPermissionFlags(tokenID: number, permissionName: string): Promise<number> + +获取指定应用的指定权限的flag,使用Promise方式异步返回结果。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | ------------------- | ---- | ------------------------------------------------------------ | + | tokenID | number | 是 | 目标应用的身份标识。 | + | permissionName | string | 是 | 查询的权限名称。 | + +- 返回值: + + | 类型 | 说明 | + | :------------ | :---------------------------------- | + | Promise<number> | Promise实例,用于获取异步返回的查询结果。 | + +- 示例: + + ``` + const AtManager = abilityAccessCtrl.createAtManager(); + let tokenID = 0; + let promise = AtManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); + promise.then(data => { + console.log(`promise: data->${JSON.stringify(data)}`); + }); + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md new file mode 100644 index 0000000000000000000000000000000000000000..7e5679e053e87d295800ced2cce4603913e1cc4d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md @@ -0,0 +1,206 @@ +--- +title: js-apis-service-extension-context +permalink: /pages/extra/217681/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# ServiceExtensionContext + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +ServiceExtension的上下文环境,提供ServiceExtension具有的能力和接口,继承自ExtensionContext。 + + +## startAbility + + +startAbility(want: Want, callback: AsyncCallback<void>): void; + + +启动Ability。 + + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | Want类型参数,传入需要启动的ability的信息,如ability名称,包名等。 | + | callback | AsyncCallback<void> | 否 | 回调函数,返回接口调用是否成功的结果。 | + +- 示例: + ``` + let want = { + "bundleName": "com.example.myapp", + "abilityName": "com.example.myapp.MyAbility" + }; + this.context.startAbility(want, (err) => { + console.log('startAbility result:' + JSON.stringfy(err); + } + ``` + + +## startAbility + +startAbility(want: Want): Promise<void>; + +启动Ability。通过Promise返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | Want类型参数,传入需要启动的ability的信息,如ability名称,包名等。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 返回一个Promise,包含接口的结果。 | + +- 示例: + ``` + let want = { + "bundleName": "com.example.myapp", + "abilityName": "com.example.myapp.MyAbility" + }; + this.context.startAbility(want).then((data) => { + console.log('success:' + JSON.stringfy(data)); + )).catch((error) => { + console.log('failed:' + JSON.stringfy(error)); + }); + ``` + + +## terminateSelf + +terminateSelf(callback: AsyncCallback<void>): void; + +停止Ability自身。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callback | AsyncCallback<void> | 否 | 回调函数,返回接口调用是否成功的结果。 | + +- 示例: + ``` + this.context.terminateSelf((err) => { + console.log('terminateSelf result:' + JSON.stringfy(err); + } + ``` + + +## terminateSelf + +terminateSelf(): Promise<void>; + +停止自身。通过Promise返回结果。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 返回一个Promise,包含接口的结果。 | + +- 示例: + ``` + this.context.terminateSelf(want).then((data) => { + console.log('success:' + JSON.stringfy(data)); + )).catch((error) => { + console.log('failed:' + JSON.stringfy(error)); + }); + ``` + + +## connectAbility + +connectAbility(want: Want, options: ConnectOptions): number; + +将一个Ability与服务类型的Ability绑定。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | Want类型参数,传入需要启动的ability的信息,如ability名称,包名等。 | + | options | [ConnectOptions](#connectoptions) | 是 | ConnectOptions类型的回调函数,返回服务连接成功、断开或连接失败后的信息。 | + +- 返回值 + | 类型 | 说明 | + | -------- | -------- | + | number | 返回一个number,后续根据这个number去断开连接。 | + +- 示例: + ``` + let want = { + "bundleName": "com.example.myapp", + "abilityName": "com.example.myapp.MyAbility" + }; + let options = { + onConnect: function(elementName, proxy) {} + onDisConnect: function(elementName) {} + onFailed: function(code) {} + } + let connection = this.context.connectAbility(want,options); + ``` + + +## disconnectAbility + +disconnectAbility(connection: number, callback:AsyncCallback<void>): void; + +将一个Ability与绑定的服务类型的Ability解绑。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | connection | number | 是 | 在connectAbility中返回的number。 | + | callback | AsyncCallback<void> | 否 | 回调函数,返回接口调用是否成功的结果。 | + +- 示例: + ``` + this.context.disconnectAbility(connection, (err) => { // connection为connectAbility中的返回值 + console.log('terminateSelf result:' + JSON.stringfy(err); + } + ``` + + +## disconnectAbility + +disconnectAbility(connection: number): Promise<void>; + +将一个Ability与绑定的服务类型的Ability解绑。通过Promise返回结果。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | connection | number | 是 | 在connectAbility中返回的number。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Promise<void> | 返回一个Promise,包含接口的结果。 | + +- 示例: + ``` + this.context.disconnectAbility(connection).then((data) => { // connection为connectAbility中的返回值 + console.log('success:' + JSON.stringfy(data)); + )).catch((error) => { + console.log('failed:' + JSON.stringfy(error)); + }); + ``` + + +## ConnectOptions + +ConnectOptions数据结构。 + +| 名称 | 说明 | +| -------- | -------- | +| onConnect(elementName:ElementName, remote:IRemoteObject) | Ability成功连接一个服务类型Ability的回调接口。 | +| onDisconnect(elementName:ElementName) | 对端服务发生异常或者被杀死回调该接口。 | +| onFailed(code: number) | 连接失败时回调该接口。 | diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension.md new file mode 100644 index 0000000000000000000000000000000000000000..6260ae38168fa02e0353757bcfaa94b6d7acb934 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-service-extension.md @@ -0,0 +1,146 @@ +--- +title: js-apis-service-extension +permalink: /pages/extra/7e33f5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# ServiceExtension + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +提供ServiceExtension服务扩展相关接口。 + + +## 导入模块 + +``` +import ServiceExtension from '@ohos.application.ServiceExtension'; +``` + + +## 权限 + +无 + + +## 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| context | [ServiceExtensionContext](/pages/extra/217681/) | 是 | 否 | ServiceExtension的上下文环境,继承自ExtensionContext。 | + + +## onCreate + +onCreate(want: Want): void; + +Extension生命周期回调,在创建时回调,执行初始化业务逻辑操作。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | + +- 示例: + ``` + onCreate(want) { + console.log('onCreate, want:' + want.abilityName); + } + ``` + + +## onDestroy + +onDestroy(): void; + +Extension生命周期回调,在销毁时回调,执行资源清理等操作。 + +- 示例: + ``` + onDestroy() { + console.log('onDestroy'); + destory(); + } + ``` + + +## onRequest + +onRequest(want: Want, startId: number): void; + +Extension生命周期回调,如果是startAbility拉起的服务,会在onCreate之后回调。每次拉起服务都会回调,startId会递增。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明) | 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | + | startId | number | 是 | 返回拉起次数。首次拉起初始值返回1,多次之后自动递增。 | + +- 示例: + ``` + onRequest(want: Want, startId: number) { + console.log('onRequest, want:' + want.abilityName); + } + ``` + + +## onConnect + +onConnect(want: Want): rpc.RemoteObject; + +Extension生命周期回调,如果是connectAbility拉起的服务,会在onCreate之后回调。返回一个RemoteObject对象,用于和客户端进行通信。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](/pages/010c010101#Want类型说明)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | rpc.RemoteObject | 一个RemoteObject对象,用于和客户端进行通信。 | + +- 示例: + ``` + import rpc from '@ohos.rpc' + class StubTest extends rpc.RemoteObject{ + constructor(des) { + super(des); + } + onRemoteRequest(code, data, reply, option) { + } + } + ... + onConnect(want) { + console.log('onConnect , want:' + want.abilityName); + return new StubTest("test"); + } + ``` + + +## onDisconnect + +onDisconnect(want: Want): void; + +Extension的生命周期,断开服务连接时回调。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want |[Want](/pages/010c010101#Want类型说明)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | + +- 示例: + ``` + onDisconnect(want) { + console.log('onDisconnect, want:' + want.abilityName); + } + ``` diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-stack.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-stack.md new file mode 100644 index 0000000000000000000000000000000000000000..9b70796566d82dc5136345c7719ff1bf1a1f7ce1 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-stack.md @@ -0,0 +1,235 @@ +--- +title: js-apis-stack +permalink: /pages/extra/1ce286/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器Stack + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {Stack} from '@ohos.util.Stack' +``` + + +## 权限 + +无 + + +## Stack + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | Stack的元素个数 | + + +### constructor + +constructor(); + +Stack的构造函数。 + + +- 示例: + ``` + let stack = new Stack(); + ``` + + +### push + +push(item: T): T; + +在栈顶插入元素,并返回该元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | item | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回被添加进去的元素 | + +- 示例: + ``` + let stack = new Stack(); + stack.push("a"); + stack.push(1); + let b = [1, 2, 3]; + stack.push(b); + let c = {name : "lala", age : "13"}; + stack.push(false); + ``` + +### pop + +pop(): T; + +删除栈顶元素并返回该删除元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(2); + stack.push(4); + stack.pop(); + ``` + +### peek + +peek(): T; + +获取并返回栈顶元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回栈顶元素 | + +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(2); + stack.peek(); + ``` +### locate + +locate(element: T): number; + +返回指定元素第一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 找到就返回下标值,查找失败返回-1 | +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(2); + stack.locate(2); + ``` + +### forEach +forEach(callbackfn: (value: T, index?: number, stack?: Stack<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历Stack实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素。 | + | index | number | 否 | 当前遍历到的下标值。 | + | stack | Stack<T> | 否 | 当前调用forEach方法的实例对象。 | + + +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(4); + stack.forEach((value, index) => { + console.log(value, index); + }); + ``` +### isEmpty +isEmpty(): boolean; + +判断该栈是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(4); + stack.isEmpty(); + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + + +- 示例: + ``` + let stack = new Stack(); + stack.push(2); + stack.push(4); + stack.push(5); + stack.push(4); + + // 使用方法一: + for (let item of stack) { + console.log(item); + } + + // 使用方法二: + let iter = stack[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treemap.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treemap.md new file mode 100644 index 0000000000000000000000000000000000000000..982a741c2a8649059f30609354aa6a0a14b7b64a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treemap.md @@ -0,0 +1,489 @@ +--- +title: js-apis-treemap +permalink: /pages/extra/15f518/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器TreeMap + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {TreeMap} from '@ohos.util.TreeMap' +``` + + +## 权限 + +无 + +## TreeMap + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | TreeMap的元素个数 | + + +### constructor + +constructor(comparator?:(firstValue: K, secondValue: K) => boolean); + +TreeMap的构造函数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | comparator | function | 否 | 用户自定义的比较函数 | + +- 示例: + ``` + let treeMap = new TreeMap(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该容器是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const treeMap = new TreeMap(); + treeMap.isEmpty(); + ``` + + +### hasKey + +hasKey(key: K): boolean; + +判断此容器中是否含有该指定key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### hasValue + +hasValue(value: V): boolean; + +判断此容器中是否含有该指定value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.hasValue(123); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.hasValue(123); + ``` + + +### get + +get(key: K): V; + +获取指定key所对应的value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 查找的指定key | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回key映射的value值 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + treeMap.get("sdfs"); + ``` + + +### getFirstKey + +getFirstKey(): K; + +获取容器中排序第一的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K | 返回排序第一的数据 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let result = treeMap.getFirstKey(); + ``` + + +### getLastKey + +getLastKey(): K; + +获取容器中排序最后的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K | 返回排序最后的数据 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let result = treeMap.getLastKey(); + ``` + + +### setAll + +setAll(map: TreeMap): void; + +将一个treemap中的所有元素组添加到另一个treemap中。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | map | TreeMap | 是 | 被添加元素的treemap | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let map = new TreeMap(); + treeMap.setAll(map); + ``` + + +### set +set(key: K, value: V): Object; + +向treemap中添加一组数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 添加成员数据的键名 | + | value | V | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Object | 返回添加后的hashmap | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + ``` + + +### remove + +remove(key: K): V; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 依据key指定删除的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | V | 返回删除元素的值 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + treeMap.remove("sdfs"); + ``` + + +### getLowerByKey + +getLowerByKey(key: K): K; + +获取容器中比传入key排序靠前一位的key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 对比的key值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K | 返回排序中key前一位的数据 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + treeMap.set("zdfgsd", 356); + let result = treeMap.getLowerByKey("sdfs"); + ``` + + +### getHigherByKey + +getHigherByKey(key: K): K; + +获取容器中比传入key排序靠后一位的key。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 对比的key值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | K | 返回排序中key后一位的数据 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + treeMap.set("zdfgsd", 356); + let result = treeMap.getHigherByKey("sdfs"); + ``` + + +### replace +replace(key: K, value: V): boolean; + +对TreeMap中一组数据进行更新(替换)。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | K | 是 | 依据key指定替换的元素 | + | value | V | 是 | 添加成员数据的值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否成功对已有数据进行替换 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("sdfs", 123); + treeMap.replace("sdfs", 357); + ``` + + +### clear + +clear(): void; + +清除TreeMap中的所有元素,并把length置为0。 + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + treeMap.clear(); + ``` + + +### keys + +keys(): IterableIterator<K>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<K> | 返回一个迭代器 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let iter = treeMap.keys(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### values + +values(): IterableIterator<V>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<V> | 返回一个迭代器 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let iter = treeMap.values(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### forEach + +forEach(callbackfn: (value: V, key?: K, treeMap?: TreeMap) => void, thisArg?: Object): void; + +通过回调函数来遍历实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | V | 是 | 当前遍历到的元素键值对的值 | + | key | K | 是 | 当前遍历到的元素键值对的键 | + | treeMap | TreeMap | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("sdfs", 123); + treeMap.set("dfsghsf", 357); + treeMap.forEach((value, key) => { + console.log(value, key); + }); + ``` + + +### entries + +entries(): IterableIterator<[K, V]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + let iter = treeMap.entries(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<[K, V]>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[K, V]> | 返回一个迭代器 | + +- 示例: + ``` + let treeMap = new TreeMap(); + treeMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123); + treeMap.set("sdfs", 356); + + // 使用方法一: + for (let item of treeMap) { + console.log("key: " + item[0]); + console.log("value: " + item[1]); + } + + // 使用方法二: + let iter = treeMap[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treeset.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treeset.md new file mode 100644 index 0000000000000000000000000000000000000000..506dfca86bcef8fdeb78a9ea466e8d5900b1a3b7 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-treeset.md @@ -0,0 +1,406 @@ +--- +title: js-apis-treeset +permalink: /pages/extra/e12e5b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 非线性容器TreeSet + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {TreeSet} from '@ohos.util.TreeSet' +``` + + +## 权限 + +无 + +## TreeSet + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | TreeSet的元素个数 | + + +### constructor + +constructor(comparator?:(firstValue: T, secondValue: T) => boolean); + +TreeSet的构造函数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | comparator | function | 否 | 用户自定义的比较函数 | + +- 示例: + ``` + let treeSet = new TreeSet(); + ``` + + +### isEmpty + +isEmpty(): boolean; + +判断该容器是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + const treeSet = new TreeSet(); + treeSet.isEmpty(); + ``` + + +### has + +has(value: T): boolean; + +判断此容器中是否含有该指定value。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.has(123); + treeSet.add(123); + treeSet.has(123); + ``` + + +### getFirstValue + +getFirstValue(): T; + +获取容器中排序第一的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回排序第一的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let result = treeSet.getFirstValue(); + ``` + + +### getLastValue + +getLastValue(): T; + +获取容器中排序最后的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回排序最后的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let result = treeSet.getLastValue(); + ``` + + +### add +add(value: T): boolean; + +向TreeSet中添加一组数据。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 添加的成员数据 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否成功添加新数据至容器 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + + +### remove + +remove(key: T): boolean; + +删除指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | T | 是 | 指定的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 判断是否成功删除元素 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + treeSet.remove("sdfs"); + ``` + + +### getLowerValue + +getLowerValue(key: T): T; + +获取容器中比传入元素排序靠前一位的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | T | 是 | 对比的元素值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回排序中对比元素前一位的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + treeSet.add("zdfgsd"); + let result = treeSet.getLowerValue("sdfs"); + ``` + + +### getHigherValue + +getHigherValue(key: T): T; + +获取容器中比传入元素排序靠后一位的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | key | T | 是 | 对比的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回排序中传入元素后一位的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + treeSet.add("zdfgsd"); + let result = treeSet.getHigherValue("sdfs"); + ``` + + +### popFirst + +popFirst(): T; + +删除容器中排序最前的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let result = treeSet.popFirst(); + ``` + + +### popLast + +popLast(): T; + +删除容器中排序最后的数据。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的数据 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let result = treeSet.popLast(); + ``` + + +### clear + +clear(): void; + +清除容器中的所有元素,并把length置为0。 + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + treeSet.clear(); + ``` + + +### values + +values(): IterableIterator<T>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let iter = treeSet.values(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` + + +### forEach + +forEach(callbackfn: (value: T, key?: T, treeSet?: TreeSet<T>) => void, thisArg?: Object): void; + +通过回调函数来遍历实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | key | T | 否 | 当前遍历到的元素(和value相同). | + | treeSet | TreeSet<T> | 否 | 当前调用forEach方法的实例对象 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("sdfs"); + treeSet.add("dfsghsf"); + treeSet.forEach((value, key) => { + console.log(value, key) + }); + ``` + + +### entries + +entries(): IterableIterator<[T, T]>; + +返回包含此映射中包含的键的新迭代器对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<[T, T]> | 返回一个迭代器 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + let iter = treeSet.entries(); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp[0]); + console.log(temp[1]); + temp = iter.next().value; + } + ``` + + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器 | + +- 示例: + ``` + let treeSet = new TreeSet(); + treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + treeSet.add("sdfs"); + + // 使用方法一: + for (let item of treeSet) { + console.log("value: " + item); + } + + // 使用方法二: + let iter = treeSet[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-vector.md b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-vector.md new file mode 100644 index 0000000000000000000000000000000000000000..ac6235862832c9b689867d8d61f885575d495e71 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/apis/js-apis-vector.md @@ -0,0 +1,697 @@ +--- +title: js-apis-vector +permalink: /pages/extra/0f10a5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 线性容器Vector + +> ![icon-note.gif](/images/application-dev/reference/apis/public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + + +## 导入模块 + +``` +import {Vector} from '@ohos.util.Vector' +``` + + +## 权限 + +无 + + +## Vector + + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| -------- | -------- | -------- | -------- | -------- | +| length | number | 是 | 否 | Vector的元素个数 | + + +### constructor + +constructor(); + +Vector的构造函数。 + +- 示例: + ``` + let vector = new Vector(); + ``` + + +### add + +add(element: T): boolean; + +在Vector中尾部插入元素 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 添加进去的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 插入成功返回true,失败返回false | + +- 示例: + ``` + let vector = new Vector(); + vector.add("a"); + vector.add(1); + let b = [1, 2, 3]; + vector.add(b); + let c = {name : "lala", age : "13"}; + vector.add(false); + ``` + +### insert + +insert(element: T, index: number): void; + +在长度范围内任意插入指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 被插入的元素 | + | index | number | 是 | 被插入的位置索引 | + +- 示例: + ``` + let vector = new Vector(); + vector.insert("A", 0); + vector.insert(0, 1); + vector.insert(true, 2); + ``` + +### has + +has(element: T): boolean; + +判断此Vector中是否含有该指定元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 是否包含指定元素 | + +- 示例: + ``` + let vector = new Vector(); + vector.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + vector.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + vector.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); + ``` + +### getIndexOf + +getIndexOf(element: T): number; + +返回指定元素第一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定的元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素第一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(2); + vector.add(1); + vector.add(2); + vector.add(4); + vector.getIndexOf(2); + ``` +### getLastIndexOf + +getLastIndexOf(element: T): number; + +返回指定元素最后一次出现时的下标值,查找失败返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回指定元素最后一次出现时的下标值,查找失败返回-1 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(2); + vector.add(1); + vector.add(2); + vector.add(4); + vector.getLastIndexOf(2); + ``` +### removeByIndex + +removeByIndex(index: number): T; + +根据元素的下标值查找元素,返回元素后将其删除。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | index | number | 是 | 指定元素的下标值 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回删除的元素 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(2); + vector.add(4); + vector.removeByIndex(2); + ``` + +### remove + +remove(element: T): boolean; + +删除查找到的第一个指定的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 指定元素 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 删除成功返回true,失败返回false | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.remove(2); + ``` +### removeByRange +removeByRange(fromIndex: number, toIndex: number): void; + +从一段范围内删除元素,包括起始值但不包括终止值。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromIndex | number | 是 | 起始下标 | + | toIndex | number | 是 | 终止下标 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.removeByRange(2,4); + vector.removeByRange(4,3); + vector.removeByRange(2,6); + ``` + +### replaceAllElements +replaceAllElements(callbackfn: (value: T, index?: number, vector?: Vector<T>) => T, +thisArg?: Object): void; + +用户操作Vector中的元素,用操作后的元素替换原元素并返回操作后的元素。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素 | + | index | number | 否 | 当前遍历到的下标值 | + | vector | Vector<T> | 否 | 当前调用replaceAllElements方法的实例对象 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.replaceAllElements((value, index) => { + return value = 2 * value; + }); + vector.replaceAllElements((value, index) => { + return value = value - 2; + }); + ``` +### forEach +forEach(callbackfn: (value: T, index?: number, vector?: Vector<T>) => void, +thisArg?: Object): void; + +通过回调函数来遍历Vector实例对象上的元素以及元素对应的下标。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | callbackfn | function | 是 | 回调函数。 | + | thisArg | Object | 否 | callbackfn被调用时用作this值 | + +- callbackfn的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | value | T | 是 | 当前遍历到的元素。 | + | index | number | 否 | 当前遍历到的下标值。 | + | vector | Vector<T> | 否 | 当前调用forEach方法的实例对象。 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.forEach((value, index) => { + console.log(value, index) + }); + + ``` +### sort +sort(comparator?: (firstValue: T, secondValue: T) => number): void; + +对Vector中的元素进行一个排序操作。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | comparator | function | 否 | 回调函数。 | + +- comparator的参数说明 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | firstValue | T | 是 | 前一项元素 | + | secondValue | T | 是 | 后一项元素 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.sort(a, (b => a - b)); + vector.sort(a, (b => b - a)); + vector.sort(); + ``` +### subVector +subVector(fromIndex: number, toIndex: number): Vector<T>; + +根据下标截取Vector中的一段元素,并返回这一段vector实例,包括起始值但不包括终止值。 +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | fromIndex | number | 是 | 起始下标 | + | toIndex | number | 是 | 终止下标 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Vector<T> | 返回Vector对象实例 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.subVector(2,4); + vector.subVector(4,3); + vector.subVector(2,6); + + ``` + +### clear +clear(): void; + +清除Vector中的所有元素,并把length置为0。 + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.clear(); + ``` +### clone +clone(): Vector<T>; + +克隆一个与Vector一模一样的实例,并返回克隆后的实例,修改克隆后的实例并不会影响原实例。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Vector<T> | 返回Vector对象实例 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.clone(); + ``` +### getCapacity +getCapacity(): number; + +获取当前实例的容量大小。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回Vector的容量大小 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.getCapacity(); + ``` +### convertToArray +convertToArray(): Array<T>; + +把当前Vector实例转换成数组,并返回转换后的数组。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | Array<T> | 返回数组类型 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.convertToArray(); + ``` +### isEmpty +isEmpty(): boolean; + +判断该Vector是否为空。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | boolean | 为空返回true, 不为空返回false | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.isEmpty(); + ``` +### increaseCapacityTo +increaseCapacityTo(newCapacity: number): void; + +如果传入的新容量大于或等于Vector中的元素个数,将容量变更为新容量。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | newCapacity | number | 是 | 新容量 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.increaseCapacityTo(2); + vector.increaseCapacityTo(8); + ``` +### trimToCurrentLength +trimToCurrentLength(): void; + +把容量限制为当前的length大小。 + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.trimToCurrentLength(2); + ``` +### toString + +toString(): string; +用","将Vector实例中的元素按顺序拼接成字符串。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | string | 返回字符串类型 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.toSting(); + ``` + +### copyToArray + +copyToArray(array: Array<T>): void; +将Vector实例中的元素按照下标复制进array。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | array | Array<T> | 是 | 数组 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + let array = ["a", "b", "c", "d", "e", "f"]; + vector.copyToArray(array); + ``` +### getFirstElement + +getFirstElement(): T; +获取实例中的第一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.getFirstElement(); + ``` +### getLastElement + +getLastElement(): T; +获取Vector实例中的最后一个元素。 + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | T | 返回T型 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.getLastElement(); + ``` +### getLastIndexFrom + +getLastIndexFrom(element: T, index: number): number; + +从指定索引向后搜索, 返回该元素的下标索引,如果查找失败,则返回-1。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 要查找的元素 | + | index | number | 是 | 从指定索引开始搜索 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回该元素的下标 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.add("a"); + vector.getLastIndexFrom(4,3); + ``` +### getIndexFrom + +getIndexFrom(element: T, index: number): number; + +从指定索引向前搜索, 返回该元素的下标索引,如果查找失败,则返回 -1 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | element | T | 是 | 要查找的元素 | + | index | number | 是 | 从指定索引开始搜索 | + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | number | 返回该元素的下标 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.add("a"); + vector.getIndexFrom(4, 3); + ``` +### setLength +setLength(newSize: number): void; +设置Vector实例的元素个数。 + +- 参数: + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | newSize | number | 是 | 设置的新长度 | + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + vector.setLength(8); + vector.setLength(2); + ``` + +### [Symbol.iterator] + +[Symbol.iterator]\(): IterableIterator<T>; + + +返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 + + +- 返回值: + | 类型 | 说明 | + | -------- | -------- | + | IterableIterator<T> | 返回一个迭代器。 | + + +- 示例: + ``` + let vector = new Vector(); + vector.add(2); + vector.add(4); + vector.add(5); + vector.add(4); + + // 使用方法一: + for (let item of vector) { + console.log(item); + } + + // 使用方法二: + let iter = vector[Symbol.iterator](); + let temp = iter.next().value; + while(temp != undefined) { + console.log(temp); + temp = iter.next().value; + } + ``` \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..17afd84f44afcb147ac223a060a0023481c08344 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/Readme-CN.md @@ -0,0 +1,124 @@ +--- +title: Readme-CN +permalink: /pages/extra/3d8851/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 基于JS扩展的类Web开发范式 + +- [组件](/pages/extra/d7811f/) + - [通用](/pages/extra/d114ff/) + - [通用属性](/pages/010c0201010101) + - [通用样式](/pages/010c0201010102) + - [通用事件](/pages/010c0201010103) + - [通用方法](/pages/010c0201010104) + - [动画样式](/pages/010c0201010105) + - [渐变样式](/pages/010c0201010106) + - [转场样式](/pages/010c0201010107) + - [媒体查询](/pages/010c0201010108) + - [自定义字体样式](/pages/010c0201010109) + - [原子布局](/pages/010c020101010a) + + - [容器组件](/pages/extra/ce8bc9/) + - [badge](/pages/010c0201010201) + - [dialog](/pages/010c0201010202) + - [div](/pages/010c0201010203) + - [form](/pages/010c0201010204) + - [list](/pages/010c0201010205) + - [list-item](/pages/010c0201010206) + - [list-item-group](/pages/010c0201010207) + - [panel](/pages/010c0201010208) + - [popup](/pages/010c0201010209) + - [refresh](/pages/010c020101020a) + - [stack](/pages/010c020101020b) + - [stepper](/pages/010c020101020c) + - [stepper-item](/pages/010c020101020d) + - [swiper](/pages/010c020101020e) + - [tabs](/pages/010c020101020f) + - [tab-bar](/pages/010c0201010210) + - [tab-content](/pages/010c0201010211) + + - [基础组件](/pages/extra/d2a1d5/) + - [button](/pages/010c0201010301) + - [chart](/pages/010c0201010302) + - [divider](/pages/010c0201010303) + - [image](/pages/010c0201010304) + - [image-animator](/pages/010c0201010305) + - [input](/pages/010c0201010306) + - [label](/pages/010c0201010307) + - [marquee](/pages/010c0201010308) + - [menu](/pages/010c0201010309) + - [option](/pages/010c020101030a) + - [picker](/pages/010c020101030b) + - [picker-view](/pages/010c020101030c) + - [piece](/pages/010c020101030d) + - [progress](/pages/010c020101030e) + - [qrcode](/pages/010c020101030f) + - [rating](/pages/010c0201010310) + - [richtext](/pages/010c0201010311) + - [search](/pages/010c0201010312) + - [select](/pages/010c0201010313) + - [slider](/pages/010c0201010314) + - [span](/pages/010c0201010315) + - [switch](/pages/010c0201010316) + - [text](/pages/010c0201010317) + - [textarea](/pages/010c0201010318) + - [toolbar](/pages/010c0201010319) + - [toolbar-item](/pages/010c020101031a) + - [toggle](/pages/010c020101031b) + + - [媒体组件](/pages/extra/461689/) + - [video](/pages/010c0201010401) + + - [画布组件](/pages/extra/a17828/) + - [canvas组件](/pages/010c0201010501) + - [CanvasRenderingContext2D对象](/pages/010c0201010502) + - [Image对象](/pages/010c0201010503) + - [CanvasGradient对象](/pages/010c0201010504) + - [ImageData对象](/pages/010c0201010505) + - [Path2D对象](/pages/010c0201010506) + - [ImageBitmap对象](/pages/010c0201010507) + - [OffscreenCanvas对象](/pages/010c0201010508) + - [OffscreenCanvasRenderingContext2D对象](/pages/010c0201010509) + + - [栅格组件](/pages/extra/c01b7a/) + - [基本概念](/pages/010c0201010601) + - [grid-container](/pages/010c0201010602) + - [grid-row](/pages/010c0201010603) + - [grid-col](/pages/010c0201010604) + + - [svg组件](/pages/extra/a3e685/) + - [通用属性](/pages/010c0201010701) + - [svg](/pages/010c0201010702) + - [rect](/pages/010c0201010703) + - [circle](/pages/010c0201010704) + - [ellipse](/pages/010c0201010705) + - [path](/pages/010c0201010706) + - [line](/pages/010c0201010707) + - [polyline](/pages/010c0201010708) + - [polygon](/pages/010c0201010709) + - [text](/pages/010c020101070a) + - [tspan](/pages/010c020101070b) + - [textPath](/pages/010c020101070c) + - [animate](/pages/010c020101070d) + - [animateMotion](/pages/010c020101070e) + - [animateTransform](/pages/010c020101070f) + +- [自定义组件](/pages/extra/8d9612/) + - [基本用法](/pages/010c02010201) + - [自定义事件](/pages/010c02010202) + - [Props](/pages/010c02010203) + - [事件参数](/pages/010c02010204) + - [slot插槽](/pages/010c02010205) + - [生命周期定义](/pages/010c02010206) + +- [附录](/pages/extra/c3d5f1/) + - [类型说明](/pages/010c02010301) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-appendix.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..cf16708eed33bd9edae6868b3277781f4c27d3a7 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-appendix.md @@ -0,0 +1,17 @@ +--- +title: js-appendix +permalink: /pages/extra/c3d5f1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 附录 + +- **[类型说明](/pages/010c02010301)** + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-basic.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-basic.md new file mode 100644 index 0000000000000000000000000000000000000000..5af10fda032392cdbef8a5973d28e8d711c6a653 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-basic.md @@ -0,0 +1,70 @@ +--- +title: js-components-basic +permalink: /pages/extra/d2a1d5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 基础组件 + +- **[button](/pages/010c0201010301)** + +- **[chart](/pages/010c0201010302)** + +- **[divider](/pages/010c0201010303)** + +- **[image](/pages/010c0201010304)** + +- **[image-animator](/pages/010c0201010305)** + +- **[input](/pages/010c0201010306)** + +- **[label](/pages/010c0201010307)** + +- **[marquee](/pages/010c0201010308)** + +- **[menu](/pages/010c0201010309)** + +- **[option](/pages/010c020101030a)** + +- **[picker](/pages/010c020101030b)** + +- **[picker-view](/pages/010c020101030c)** + +- **[piece](/pages/010c020101030d)** + +- **[progress](/pages/010c020101030e)** + +- **[qrcode](/pages/010c020101030f)** + +- **[rating](/pages/010c0201010310)** + +- **[richtext](/pages/010c0201010311)** + +- **[search](/pages/010c0201010312)** + +- **[select](/pages/010c0201010313)** + +- **[slider](/pages/010c0201010314)** + +- **[span](/pages/010c0201010315)** + +- **[switch](/pages/010c0201010316)** + +- **[text](/pages/010c0201010317)** + +- **[textarea](/pages/010c0201010318)** + +- **[toolbar](/pages/010c0201010319)** + +- **[toolbar-item](/pages/010c020101031a)** + +- **[toggle](/pages/010c020101031b)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-canvas.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-canvas.md new file mode 100644 index 0000000000000000000000000000000000000000..836bbec59949bedb8fa522f6727047276dc7ae1d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-canvas.md @@ -0,0 +1,34 @@ +--- +title: js-components-canvas +permalink: /pages/extra/a17828/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 画布组件 + +- **[canvas组件](/pages/010c0201010501)** + +- **[CanvasRenderingContext2D对象](/pages/010c0201010502)** + +- **[Image对象](/pages/010c0201010503)** + +- **[CanvasGradient对象](/pages/010c0201010504)** + +- **[ImageData对象](/pages/010c0201010505)** + +- **[Path2D对象](/pages/010c0201010506)** + +- **[ImageBitmap对象](/pages/010c0201010507)** + +- **[OffscreenCanvas对象](/pages/010c0201010508)** + +- **[OffscreenCanvasRenderingContext2D对象](/pages/010c0201010509)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-common.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-common.md new file mode 100644 index 0000000000000000000000000000000000000000..18492db9ab505b1470bdde06890ba5773d6de161 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-common.md @@ -0,0 +1,36 @@ +--- +title: js-components-common +permalink: /pages/extra/d114ff/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 通用 + +- **[通用属性](/pages/010c0201010101)** + +- **[通用样式](/pages/010c0201010102)** + +- **[通用事件](/pages/010c0201010103)** + +- **[通用方法](/pages/010c0201010104)** + +- **[动画样式](/pages/010c0201010105)** + +- **[渐变样式](/pages/010c0201010106)** + +- **[转场样式](/pages/010c0201010107)** + +- **[媒体查询](/pages/010c0201010108)** + +- **[自定义字体样式](/pages/010c0201010109)** + +- **[原子布局](/pages/010c020101010a)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-container.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-container.md new file mode 100644 index 0000000000000000000000000000000000000000..bd6bbd672108ee114791b321fb708c6e66c851ef --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-container.md @@ -0,0 +1,50 @@ +--- +title: js-components-container +permalink: /pages/extra/ce8bc9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 容器组件 + +- **[badge](/pages/010c0201010201)** + +- **[dialog](/pages/010c0201010202)** + +- **[div](/pages/010c0201010203)** + +- **[form](/pages/010c0201010204)** + +- **[list](/pages/010c0201010205)** + +- **[list-item](/pages/010c0201010206)** + +- **[list-item-group](/pages/010c0201010207)** + +- **[panel](/pages/010c0201010208)** + +- **[popup](/pages/010c0201010209)** + +- **[refresh](/pages/010c020101020a)** + +- **[stack](/pages/010c020101020b)** + +- **[stepper](/pages/010c020101020c)** + +- **[stepper-item](/pages/010c020101020d)** + +- **[swiper](/pages/010c020101020e)** + +- **[tabs](/pages/010c020101020f)** + +- **[tab-bar](/pages/010c0201010210)** + +- **[tab-content](/pages/010c0201010211)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-custom.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-custom.md new file mode 100644 index 0000000000000000000000000000000000000000..52e4b6d0182a3e68029bdcf2b864dbb8ad5d40d0 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-custom.md @@ -0,0 +1,28 @@ +--- +title: js-components-custom +permalink: /pages/extra/8d9612/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 自定义组件 + +- **[基本用法](/pages/010c02010201)** + +- **[自定义事件](/pages/010c02010202)** + +- **[Props](/pages/010c02010203)** + +- **[事件参数](/pages/010c02010204)** + +- **[slot插槽](/pages/010c02010205)** + +- **[生命周期定义](/pages/010c02010206)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-grid.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-grid.md new file mode 100644 index 0000000000000000000000000000000000000000..1ecd294cd327fd106916e0ef5923561f15e81074 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-grid.md @@ -0,0 +1,24 @@ +--- +title: js-components-grid +permalink: /pages/extra/c01b7a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 栅格组件 + +- **[基本概念](/pages/010c0201010601)** + +- **[grid-container](/pages/010c0201010602)** + +- **[grid-row](/pages/010c0201010603)** + +- **[grid-col](/pages/010c0201010604)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-media.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-media.md new file mode 100644 index 0000000000000000000000000000000000000000..8be5d8609e0c18f4b49e1c5de11f1f70db54103b --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components-media.md @@ -0,0 +1,18 @@ +--- +title: js-components-media +permalink: /pages/extra/461689/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 媒体组件 + +- **[video](/pages/010c0201010401)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components.md new file mode 100644 index 0000000000000000000000000000000000000000..97177303fbf7d0ac77aed4f4a3cd90353968a374 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-components.md @@ -0,0 +1,30 @@ +--- +title: js-components +permalink: /pages/extra/d7811f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 组件 + +- **[通用](/pages/extra/d114ff/)** + +- **[容器组件](/pages/extra/ce8bc9/)** + +- **[基础组件](/pages/extra/d2a1d5/)** + +- **[媒体组件](/pages/extra/461689/)** + +- **[画布组件](/pages/extra/a17828/)** + +- **[栅格组件](/pages/extra/c01b7a/)** + +- **[svg组件](/pages/extra/a3e685/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-svg.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-svg.md new file mode 100644 index 0000000000000000000000000000000000000000..72e899bcbd7d3c2501bcc8a45fc57d156f07917c --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-js/js-svg.md @@ -0,0 +1,46 @@ +--- +title: js-svg +permalink: /pages/extra/a3e685/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# svg组件 + +- **[通用属性](/pages/010c0201010701)** + +- **[svg](/pages/010c0201010702)** + +- **[rect](/pages/010c0201010703)** + +- **[circle](/pages/010c0201010704)** + +- **[ellipse](/pages/010c0201010705)** + +- **[path](/pages/010c0201010706)** + +- **[line](/pages/010c0201010707)** + +- **[polyline](/pages/010c0201010708)** + +- **[polygon](/pages/010c0201010709)** + +- **[text](/pages/010c020101070a)** + +- **[tspan](/pages/010c020101070b)** + +- **[textPath](/pages/010c020101070c)** + +- **[animate](/pages/010c020101070d)** + +- **[animateMotion](/pages/010c020101070e)** + +- **[animateTransform](/pages/010c020101070f)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..c1ab40c141a6ae5192a7edbe91b3bb2cf478530a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md @@ -0,0 +1,146 @@ +--- +title: Readme-CN +permalink: /pages/extra/e756d7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 基于TS扩展的声明式开发范式 + +- [组件](/pages/extra/cc3a5f/) + - [通用](/pages/extra/9793d8/) + - [通用事件](/pages/extra/68fee7/) + - [点击事件](/pages/010c020201010101) + - [触摸事件](/pages/010c020201010102) + - [挂载卸载事件](/pages/010c020201010103) + - [按键事件](/pages/010c020201010104) + - [组件区域变化事件](/pages/010c020201010105) + + - [通用属性](/pages/extra/35809a/) + - [尺寸设置](/pages/010c020201010201) + - [位置设置](/pages/010c020201010202) + - [布局约束](/pages/010c020201010203) + - [Flex布局](/pages/010c020201010204) + - [边框设置](/pages/010c020201010205) + - [背景设置](/pages/010c020201010206) + - [透明度设置](/pages/010c020201010207) + - [显隐控制](/pages/010c020201010208) + - [禁用控制](/pages/010c020201010209) + - [浮层](/pages/010c02020101020a) + - [Z序控制](/pages/010c02020101020b) + - [图形变换](/pages/010c02020101020c) + - [图像效果](/pages/010c02020101020d) + - [形状裁剪](/pages/010c02020101020e) + - [文本样式设置](/pages/010c02020101020f) + - [栅格设置](/pages/010c020201010210) + - [颜色渐变](/pages/010c020201010211) + - [Popup控制](/pages/010c020201010212) + - [Menu控制](/pages/010c020201010213) + - [点击控制](/pages/010c020201010214) + - [触摸热区设置](/pages/010c020201010215) + + - [手势处理](/pages/extra/e9eab2/) + - [绑定手势方法](/pages/010c020201010301) + - [基础手势](/pages/extra/3f660d/) + - [TapGesture](/pages/010c02020101030201) + - [LongPressGesture](/pages/010c02020101030202) + - [PanGesture](/pages/010c02020101030203) + - [PinchGesture](/pages/010c02020101030204) + - [RotationGesture](/pages/010c02020101030205) + - [SwipeGesture](/pages/010c02020101030206) + + - [组合手势](/pages/010c020201010303) + + - [基础组件](/pages/extra/28a88c/) + - [Blank](/pages/010c0202010201) + - [Button](/pages/010c0202010202) + - [DataPanel](/pages/010c0202010203) + - [Divider](/pages/010c0202010204) + - [Gauge](/pages/010c0202010205) + - [Image](/pages/010c0202010206) + - [ImageAnimator](/pages/010c0202010207) + - [Marquee](/pages/extra/ba51e4/) + - [Progress](/pages/010c0202010208) + - [QRCode](/pages/010c0202010209) + - [Rating](/pages/010c020201020a) + - [Span](/pages/010c020201020b) + - [Slider](/pages/010c020201020c) + - [Text](/pages/010c020201020d) + - [TextArea](/pages/010c020201020e) + - [TextInput](/pages/010c020201020f) + - [Toggle](/pages/010c0202010210) + + - [容器组件](/pages/extra/6193d3/) + - [AlphabetIndexer](/pages/010c0202010301) + - [Badge](/pages/010c0202010302) + - [Column](/pages/010c0202010303) + - [ColumnSplit](/pages/010c0202010304) + - [Counter](/pages/010c0202010305) + - [Flex](/pages/010c0202010306) + - [GridContainer](/pages/010c0202010307) + - [Grid](/pages/010c0202010308) + - [GridItem](/pages/010c0202010309) + - [List](/pages/010c020201030a) + - [ListItem](/pages/010c020201030b) + - [Navigator](/pages/010c020201030c) + - [Navigation](/pages/010c020201030d) + - [Panel](/pages/010c020201030e) + - [Row](/pages/010c020201030f) + - [RowSplit](/pages/010c0202010310) + - [Scroll](/pages/010c0202010311) + - [ScrollBar](/pages/010c0202010312) + - [Stack](/pages/010c0202010313) + - [Swiper](/pages/010c0202010314) + - [Tabs](/pages/010c0202010315) + - [TabContent](/pages/010c0202010316) + - [Stepper](/pages/010c0202010317) + - [StepperItem](/pages/010c0202010318) + + - [绘制组件](/pages/extra/2f8e39/) + - [Circle](/pages/010c0202010401) + - [Ellipse](/pages/010c0202010402) + - [Line](/pages/010c0202010403) + - [Polyline](/pages/010c0202010404) + - [Polygon](/pages/010c0202010405) + - [Path](/pages/010c0202010406) + - [Rect](/pages/010c0202010407) + - [Shape](/pages/010c0202010408) + + - [画布组件](/pages/extra/8e34a4/) + - [Canvas](/pages/010c0202010501) + - [CanvasRenderingContext2D对象](/pages/010c0202010502) + - [OffscreenCanvasRenderingConxt2D对象](/pages/010c0202010503) + - [Lottie](/pages/010c0202010504) + - [Path2D对象](/pages/010c0202010505) + - [CanvasGradient对象](/pages/010c0202010506) + - [ImageBitmap对象](/pages/010c0202010507) + - [ImageData对象](/pages/010c0202010508) + +- [动画](/pages/extra/53e52b/) + - [属性动画](/pages/010c02020201) + - [显式动画](/pages/010c02020202) + - [转场动画](/pages/extra/6a5536/) + - [页面间转场](/pages/010c0202020301) + - [组件内转场](/pages/010c0202020302) + - [共享元素转场](/pages/010c0202020303) + + - [路径动画](/pages/010c02020204) + - [矩阵变换](/pages/010c02020205) + - [插值计算](/pages/010c02020206) + +- [全局UI方法](/pages/extra/91aada/) + - [警告弹窗](/pages/010c02020301) + - [自定义弹窗](/pages/010c02020302) + - [图片缓存](/pages/010c02020303) + - [媒体查询](/pages/010c02020304) + - [列表选择弹窗](/pages/extra/9ad3e9/) + +- [附录](/pages/extra/a436bc/) + - [文档中涉及到的内置枚举值](/pages/010c02020401) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-animation.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-animation.md new file mode 100644 index 0000000000000000000000000000000000000000..07f8900de36c49e42b905038d59a829bbb7b2758 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-animation.md @@ -0,0 +1,28 @@ +--- +title: ts-animation +permalink: /pages/extra/53e52b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 动画 + +- **[属性动画](/pages/010c02020201)** + +- **[显式动画](/pages/010c02020202)** + +- **[转场动画](/pages/extra/6a5536/)** + +- **[路径动画](/pages/010c02020204)** + +- **[矩阵变换](/pages/010c02020205)** + +- **[插值计算](/pages/010c02020206)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-appendix.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..98fa0d621839d1b323193feb8d8d9ceb4a826340 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-appendix.md @@ -0,0 +1,18 @@ +--- +title: ts-appendix +permalink: /pages/extra/a436bc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 附录 + +- **[文档中涉及到的内置枚举值](/pages/010c02020401)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md new file mode 100644 index 0000000000000000000000000000000000000000..ce1bcb011c7700aa6cb76ae3a0ef05c823c0e853 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md @@ -0,0 +1,183 @@ +--- +title: ts-basic-components-marquee +permalink: /pages/extra/ba51e4/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Marquee + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +跑马灯组件,用于滚动展示一段单行文本。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +Marquee\(value: \{ start: boolean, step?: number, loop?: number, fromStart?: boolean, src: string \}\) + +- 参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

start

+

boolean

+

+

-

+

控制是否进入播放状态。

+

step

+

number

+

+

6

+

滚动动画文本滚动步长。

+

loop

+

number

+

+

-1

+

设置重复滚动的次数,小于等于零时无限循环。

+

fromStart

+

boolean

+

+

true

+

设置文本从头开始滚动或反向滚动。

+

src

+

string

+

+

-

+

需要滚动的文本。

+
+ + +## 事件 + + + + + + + + + + + + + + + +

名称

+

功能描述

+

onStart(callback: () => void)

+

开始滚动时触发回调。

+

onBounce(callback: () => void)

+

滚动到底时触发回调。

+

onFinish(callback: () => void)

+

滚动完成时触发回调。

+
+ +## 示例 + +``` +@Entry +@Component +struct MarqueeExample { + @State start: boolean = false + @State fromStart: boolean = true + @State step: number = 50 + @State loop: number = 3 + @State src: string = "Running Marquee starts rolling" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Marquee({ + start: this.start, + step: this.step, + loop: this.loop, + fromStart: this.fromStart, + src: this.src + }) + .fontColor(Color.White) + .fontSize(50) + .allowScale(false) + .fontWeight(FontWeight.Bold) + .backgroundColor(Color.Black) + .margin({bottom:40}) + .onStart(() => { + console.log('Marquee animation complete onStart') + }) + .onBounce(() => { + console.log('Marquee animation complete onBounce') + }) + .onFinish(() => { + console.log('Marquee animation complete onFinish') + }) + Button('start') + .onClick(() => { + this.start = true + }) + .width(200) + .height(60) + .margin({bottom:20}) + } + .width('100%') + .height('100%') + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/GIF-1.gif) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-select.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-select.md new file mode 100644 index 0000000000000000000000000000000000000000..0008cf3ab4e67c1aff9b3de0fd82a5837946a9e8 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-select.md @@ -0,0 +1,223 @@ +--- +title: ts-basic-components-select +permalink: /pages/extra/6da3c9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Select + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +提供下拉选择菜单,可以让用户在多个选项之间选择。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +Select(options: Array<SelectOption>) + +- `SelectOption`参数 + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

value

+

ResourceStr

+

+

-

+

下拉选项内容。

+

icon

+

ResourceStr

+

+

-

+

下拉选项图片。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

selected

+

number

+

-

+

设置下拉菜单初始选择项的索引,第一项的索引为0。

+

value

+

string

+

-

+

设置下拉按钮本身的文本显示。

+

font

+

Font

+

-

+

设置下拉按钮本身的文本样式:

+

fontColor

+

ResourceColor

+

-

+

设置下拉按钮本身的文本颜色。

+

selectedOptionBgColor

+

ResourceColor

+

-

+

设置下拉菜单选中项的背景色。

+

selectedOptionFont

+

Font

+

-

+

设置下拉菜单选中项的文本样式:

+

selectedOptionFontColor

+

ResourceColor

+

-

+

设置下拉菜单选中项的文本颜色。

+

optionBgColor

+

ResourceColor

+

-

+

设置下拉菜单项的背景色。

+

optionFont

+

Font

+

-

+

设置下拉菜单项的文本样式:

+

optionFontColor

+

ResourceColor

+

-

+

设置下拉菜单项的文本颜色。

+
+ + +## 事件 + + + + + + + + + +

名称

+

功能描述

+

onSelected(callback: (index: number, value?:string) => void)

+

下拉菜单选中某一项的回调。

+

index:选中项的索引。

+

value:选中项的值。

+
+ +## 示例 + +``` + +@Entry +@Component +struct SliderExample { + build() { + Column() { + Select([{value:'aaa',icon: "/common/1.png"}, + {value:'bbb',icon: "/common/2.png"}, + {value:'ccc',icon: "/common/3.png"}, + {value:'ddd',icon: "/common/4.png"}]) + .selected(2) + .value('TTT') + .font({size: 30, weight:400, family: 'serif', style: FontStyle.Normal }) + .selectedOptionFont({size: 40, weight: 500, family: 'serif', style: FontStyle.Normal }) + .optionFont({size: 30, weight: 400, family: 'serif', style: FontStyle.Normal }) + .onSelected((index:number)=>{ + console.info("Select:" + index) + }) + } + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/select.png) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-textclock.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-textclock.md new file mode 100644 index 0000000000000000000000000000000000000000..d2b30989eceac3d0ee705a9f227ba9a7a369921e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-textclock.md @@ -0,0 +1,149 @@ +--- +title: ts-basic-components-textclock +permalink: /pages/extra/632717/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# TextClock + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +TextClock主要用于显示系统时间,支持不同时区的时间显示,时间显示最高精度到秒级。 + +## 权限列表 + +无 + +## 子组件 + +无 + +## 接口 + +TextClock(options?: {hourswest?: number}) + +- 参数 + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

hourwest

+

number

+

+

系统时间所在的时区

+

设置时区信息,时区范围为[-14, 12],其中负值表示东时区,比如东八区为-8,浮点数也会进行相应的换算(30分钟/0.5时区);理论上时区范围是[-12,+12],但是一些国家横跨国际日界线,因此用-13(UTC+13)和-14(UTC+14)来保证整个国家或者区域处在相同的时间。

+
+ + +## 属性 + + + + + + + + + + + + + + + + + + +

名称

+

参数类型

+

默认值

+

描述

+

format

+

string

+

'hhmmss'

+

设置显示时间格式,如“yyyy/mm/dd”、“yyyy-mm-dd”等。支持的时间格式化字符串:yyyy(年份),mm(英文月份简写),mmm(英文月份简写),mmmm(英文月份全称),dd(英文星期简写),ddd(英文星期简写),dddd(英文星期全称),HH(24小时制),hh(12小时制),MM/mm(分钟),SS/ss(秒)。

+

status

+

boolean

+

-

+

设置文本时钟的启动和停止。

    +
  • true表示文本时钟是启动状态。
  • false表示文本时钟是停止状态。
  • +

+
+ + + +## 事件 + +支持以下通用事件:onClick,onTouch,onKeyEvent,onDeleteEvent,onAppear,onDisAppear + + + + + + + + + +

名称

+

功能描述

+

onDateChange(event: (value: number) => void)

+

提供时间变化回调,回调参数为Unix Time Stamp,即自1970年1月1日(UTC)起经过的毫秒数,该事件最小回调间隔为秒。

+
+ + +## 示例 + +``` +@Entry +@Component +struct TextClockExmaple { + format: string = 'hhmmss' + @State accumulateTime: number = 0 + hourswest: number = -8 + @State isStart: boolean = true + + build() { + Column() { + Text('current milliseconds is' + this.accumulateTime) + TextClock({hourswest:this.hourswest}) + .format(this.format) + .onDateChange((value: number) => { + this.accumulateTime = value + }) + .status(this.isStart) + .fontSize(50) + Button("start/stop clock") + .onClick(()=>{ + this.isStart = !this.isStart + }) + } + .align(Alignment.Center) + } +} +``` + +![](/images/application-dev/reference/arkui-ts/figures/textclock.png) + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md new file mode 100644 index 0000000000000000000000000000000000000000..6d400106eeedb1142415f8b1b45f2b858d307fa0 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md @@ -0,0 +1,142 @@ +--- +title: ts-basic-components-web +permalink: /pages/extra/252492/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Web + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>该组件从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +提供具有网页显示能力的 Web 组件。 + +## 权限列表 + +ohos.permission.INTERNET + +ohos.permission.READ_USER_STORAGE + +## 子组件 + +无 + +## 接口 + +- Web\(options: {src: string, controller?: WebController}\) + + 表1 options 参数说明 + + | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | + | ---------- | ---------------------------------------- | ---- | ---- | ------- | + | src | string | 是 | - | 网页资源地址。 | + | controller | WebController | 否 | - | 控制器。 | + + +> ![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +> +> - 一个页面只支持一个 Web 组件,全屏显示,页面中的其他组件会被 Web 组件遮挡; +> - 不支持转场动画; +> - 只支持加载 rawfile 目录下的 html 文件,不支持远程资源。 + +## 属性 + +| 名称 | 参数类型 | 默认值 | 描述 | +| ---------------- | ------- | ----- | ---------------------------------------- | +| javaScriptAccess | boolean | false | 是否允许执行 JavaScript 脚本,当设置为 false 时,不允许执行。 | +| fileAccess | boolean | false | 启用或禁用 Web 中可通过 file 方式访问应用中的本地文件,当设置为 false 时,禁用。 | + +> ![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +> +> 不支持通用属性。 + +## 事件 + +不支持通用事件。 + +| 名称 | 功能描述 | +| ---------------------------------------- | ---------------------------------------- | +| onPageEnd(callback: (event?: { url: string }) => void) |

网页加载结束时触发该回调。
url:Web 引擎返回的 URL。

| + +## WebController + +Web 组件的控制器。 + +### 创建对象 + +``` +webController: WebController = new WebController() +``` + +### runJavaScript + +runJavaScript(script: string): void + +执行 JavaScript 脚本。 + +- 参数 + + | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | + | ------ | ------ | ---- | ---- | -------------- | + | script | string | 是 | - | JavaScript 脚本。 | + +### loadUrl + +loadUrl(url: string): void + +加载 URL。 + +- 参数 + + | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | + | ---- | ------ | ---- | ---- | ---------- | + | url | string | 是 | - | 需要加载的 URL。 | + + +## 示例 + +``` +// webComponent.ets +@Entry +@Component +struct WebComponent { + @State javaScriptAccess: boolean = true; + @State fileAccess: boolean = true; + controller: WebController = new WebController(); + build() { + Column() { + Web(src: $rawfile('index.html'), controller: this.controller) + .javaScriptAccess(javaScriptAccess) + .fileAccess(fileAccess) + .onPageEnd(e => { + // test() 在 index.html 中已定义 + this.controller.runJavaScript('test()'); + console.log("url: ", e.url); + }) + } + } +} + +// index.html + + + + + Hello world! + + + +``` + +![](/images/application-dev/reference/arkui-ts/figures/Web.png) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components.md new file mode 100644 index 0000000000000000000000000000000000000000..8d7c8e02ae402a7ab7ed0ca5d0da59c29213c32e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-components.md @@ -0,0 +1,50 @@ +--- +title: ts-basic-components +permalink: /pages/extra/28a88c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 基础组件 + +- **[Blank](/pages/010c0202010201)** + +- **[Button](/pages/010c0202010202)** + +- **[DataPanel](/pages/010c0202010203)** + +- **[Divider](/pages/010c0202010204)** + +- **[Gauge](/pages/010c0202010205)** + +- **[Image](/pages/010c0202010206)** + +- **[ImageAnimator](/pages/010c0202010207)** + +- **[Marquee](/pages/extra/ba51e4/)** + +- **[Progress](/pages/010c0202010208)** + +- **[QRCode](/pages/010c0202010209)** + +- **[Rating](/pages/010c020201020a)** + +- **[Span](/pages/010c020201020b)** + +- **[Slider](/pages/010c020201020c)** + +- **[Text](/pages/010c020201020d)** + +- **[TextArea](/pages/010c020201020e)** + +- **[TextInput](/pages/010c020201020f)** + +- **[Toggle](/pages/010c0202010210)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-gestures.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-gestures.md new file mode 100644 index 0000000000000000000000000000000000000000..4c6a0096eab7b0613a0242b5cbd300267a80603e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-basic-gestures.md @@ -0,0 +1,28 @@ +--- +title: ts-basic-gestures +permalink: /pages/extra/3f660d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 基础手势 + +- **[TapGesture](/pages/010c02020101030201)** + +- **[LongPressGesture](/pages/010c02020101030202)** + +- **[PanGesture](/pages/010c02020101030203)** + +- **[PinchGesture](/pages/010c02020101030204)** + +- **[RotationGesture](/pages/010c02020101030205)** + +- **[SwipeGesture](/pages/010c02020101030206)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-canvas.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-canvas.md new file mode 100644 index 0000000000000000000000000000000000000000..908792c977737a5266fc8d37c529cf1ca7e2c560 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-canvas.md @@ -0,0 +1,32 @@ +--- +title: ts-components-canvas +permalink: /pages/extra/8e34a4/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 画布组件 + +- **[Canvas](/pages/010c0202010501)** + +- **[CanvasRenderingContext2D对象](/pages/010c0202010502)** + +- **[OffscreenCanvasRenderingConxt2D对象](/pages/010c0202010503)** + +- **[Lottie](/pages/010c0202010504)** + +- **[Path2D对象](/pages/010c0202010505)** + +- **[CanvasGradient对象](/pages/010c0202010506)** + +- **[ImageBitmap对象](/pages/010c0202010507)** + +- **[ImageData对象](/pages/010c0202010508)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-container.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-container.md new file mode 100644 index 0000000000000000000000000000000000000000..9eae0722e1375c0994096c21e09bfef8b5b1b070 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components-container.md @@ -0,0 +1,64 @@ +--- +title: ts-components-container +permalink: /pages/extra/6193d3/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 容器组件 + +- **[AlphabetIndexer](/pages/010c0202010301)** + +- **[Badge](/pages/010c0202010302)** + +- **[Column](/pages/010c0202010303)** + +- **[ColumnSplit](/pages/010c0202010304)** + +- **[Counter](/pages/010c0202010305)** + +- **[Flex](/pages/010c0202010306)** + +- **[GridContainer](/pages/010c0202010307)** + +- **[Grid](/pages/010c0202010308)** + +- **[GridItem](/pages/010c0202010309)** + +- **[List](/pages/010c020201030a)** + +- **[ListItem](/pages/010c020201030b)** + +- **[Navigator](/pages/010c020201030c)** + +- **[Navigation](/pages/010c020201030d)** + +- **[Panel](/pages/010c020201030e)** + +- **[Row](/pages/010c020201030f)** + +- **[RowSplit](/pages/010c0202010310)** + +- **[Scroll](/pages/010c0202010311)** + +- **[ScrollBar](/pages/010c0202010312)** + +- **[Stack](/pages/010c0202010313)** + +- **[Swiper](/pages/010c0202010314)** + +- **[Tabs](/pages/010c0202010315)** + +- **[TabContent](/pages/010c0202010316)** + +- **[Stepper](/pages/010c0202010317)** + +- **[StepperItem](/pages/010c0202010318)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components.md new file mode 100644 index 0000000000000000000000000000000000000000..00d3980b0b37c28d9be08f4450e0f5f8b497ad54 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-components.md @@ -0,0 +1,26 @@ +--- +title: ts-components +permalink: /pages/extra/cc3a5f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 组件 + +- **[通用](/pages/extra/9793d8/)** + +- **[基础组件](/pages/extra/28a88c/)** + +- **[容器组件](/pages/extra/6193d3/)** + +- **[绘制组件](/pages/extra/2f8e39/)** + +- **[画布组件](/pages/extra/8e34a4/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-drawing-components.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-drawing-components.md new file mode 100644 index 0000000000000000000000000000000000000000..2409f5efda9cb00fba88495a8164ec19b34cc4cb --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-drawing-components.md @@ -0,0 +1,32 @@ +--- +title: ts-drawing-components +permalink: /pages/extra/2f8e39/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 绘制组件 + +- **[Circle](/pages/010c0202010401)** + +- **[Ellipse](/pages/010c0202010402)** + +- **[Line](/pages/010c0202010403)** + +- **[Polyline](/pages/010c0202010404)** + +- **[Polygon](/pages/010c0202010405)** + +- **[Path](/pages/010c0202010406)** + +- **[Rect](/pages/010c0202010407)** + +- **[Shape](/pages/010c0202010408)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-gesture-processing.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-gesture-processing.md new file mode 100644 index 0000000000000000000000000000000000000000..60a7638df0bf831dd6191a73b416f6e0a3ed7c88 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-gesture-processing.md @@ -0,0 +1,22 @@ +--- +title: ts-gesture-processing +permalink: /pages/extra/e9eab2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 手势处理 + +- **[绑定手势方法](/pages/010c020201010301)** + +- **[基础手势](/pages/extra/3f660d/)** + +- **[组合手势](/pages/010c020201010303)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-global-ui-methods.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-global-ui-methods.md new file mode 100644 index 0000000000000000000000000000000000000000..dbb99f70f6e5c50915a77e5317439d321e3ae5d2 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-global-ui-methods.md @@ -0,0 +1,26 @@ +--- +title: ts-global-ui-methods +permalink: /pages/extra/91aada/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 全局UI方法 + +- **[警告弹窗](/pages/010c02020301)** + +- **[自定义弹窗](/pages/010c02020302)** + +- **[图片缓存](/pages/010c02020303)** + +- **[媒体查询](/pages/010c02020304)** + +- **[列表选择弹窗](/pages/extra/9ad3e9/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-actionsheet.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-actionsheet.md new file mode 100644 index 0000000000000000000000000000000000000000..3305b756530001d7a0a4529483c7611abd2bc2cb --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-actionsheet.md @@ -0,0 +1,247 @@ +--- +title: ts-methods-custom-actionsheet +permalink: /pages/extra/9ad3e9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 列表选择弹窗 + +>![](/images/application-dev/public_sys-resources/icon-note.gif) **说明:** +>从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +列表弹窗。 + +## 权限列表 + +无 + +## ActionSheet.show + +show\(options: \{ [paramObject1](#table816913216616)\}\) + +定义列表弹窗并弹出。 + +- paramObject1参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

title

+

string

+

+

无标题

+

弹窗标题。

+

message

+

string

+

+

-

+

弹窗内容。

+

autoCancel

+

boolean

+

+

true

+

点击遮障层时,是否关闭弹窗。

+

confirm

+

{

+

value: string,

+

action: () => void

+

}

+

+

-

+

确认按钮的文本内容和点击回调。

+

value:按钮文本内容。

+

action: 按钮选中时的回调。

+

cancel

+

() => void

+

+

-

+

点击遮障层关闭dialog时的回调。

+

alignment

+

DialogAlignment

+

+

DialogAlignment.Default

+

弹窗在竖直方向上的对齐方式。

+

offset

+

{

+

dx: Length,

+

dy: Length

+

}

+

+

{

+

dx: 0,

+

dy: 0

+

}

+

弹窗相对alignment所在位置的偏移量。

+

sheets

+

Array<SheetInfo>

+

+

-

+

设置选项内容,每个选择项支持设置图片、文本和选中的回调。

+
+ +- SheetInfo接口说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

参数类型

+

必填

+

默认值

+

参数描述

+

title

+

string

+

+

-

+

sheet文本。

+

icon

+

string

+

+

+

sheet图标。

+

action

+

()=>void

+

+

-

+

sheet选中的回调。

+
+ + +## 示例 + +``` +@Entry +@Component +struct ActionSheetExapmle { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Button('Click to Show ActionSheet') + .onClick(() => { + ActionSheet.show({ + title: 'ActionSheet title', + message: 'message', + confirm: { + value: 'Confirm button', + action: () => { + console.log('Get Alert Dialog handled') + } + }, + sheets: [ + { + title: 'apples', + action: () => { + console.error('apples') + } + }, + { + title: 'bananas', + action: () => { + console.error('bananas') + } + }, + { + title: 'pears', + action: () => { + console.error('pears') + } + } + ] + }) + }) + }.width('100%') + .height('100%') + } +} +``` + + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-transition-animation.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-transition-animation.md new file mode 100644 index 0000000000000000000000000000000000000000..bdab4698e4b201a9c7377288bc512fc3e1fc7fb6 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-transition-animation.md @@ -0,0 +1,22 @@ +--- +title: ts-transition-animation +permalink: /pages/extra/6a5536/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 转场动画 + +- **[页面间转场](/pages/010c0202020301)** + +- **[组件内转场](/pages/010c0202020302)** + +- **[共享元素转场](/pages/010c0202020303)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes.md new file mode 100644 index 0000000000000000000000000000000000000000..0aabf553162611982bce9283d81a08bbfddfd6b5 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes.md @@ -0,0 +1,58 @@ +--- +title: ts-universal-attributes +permalink: /pages/extra/35809a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 通用属性 + +- **[尺寸设置](/pages/010c020201010201)** + +- **[位置设置](/pages/010c020201010202)** + +- **[布局约束](/pages/010c020201010203)** + +- **[Flex布局](/pages/010c020201010204)** + +- **[边框设置](/pages/010c020201010205)** + +- **[背景设置](/pages/010c020201010206)** + +- **[透明度设置](/pages/010c020201010207)** + +- **[显隐控制](/pages/010c020201010208)** + +- **[禁用控制](/pages/010c020201010209)** + +- **[浮层](/pages/010c02020101020a)** + +- **[Z序控制](/pages/010c02020101020b)** + +- **[图形变换](/pages/010c02020101020c)** + +- **[图像效果](/pages/010c02020101020d)** + +- **[形状裁剪](/pages/010c02020101020e)** + +- **[文本样式设置](/pages/010c02020101020f)** + +- **[栅格设置](/pages/010c020201010210)** + +- **[颜色渐变](/pages/010c020201010211)** + +- **[Popup控制](/pages/010c020201010212)** + +- **[Menu控制](/pages/010c020201010213)** + +- **[点击控制](/pages/010c020201010214)** + +- **[触摸热区设置](/pages/010c020201010215)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-components.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-components.md new file mode 100644 index 0000000000000000000000000000000000000000..069a8e199a1b842e0473860aa704dc68925d1220 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-components.md @@ -0,0 +1,22 @@ +--- +title: ts-universal-components +permalink: /pages/extra/9793d8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 通用 + +- **[通用事件](/pages/extra/68fee7/)** + +- **[通用属性](/pages/extra/35809a/)** + +- **[手势处理](/pages/extra/e9eab2/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-events.md b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-events.md new file mode 100644 index 0000000000000000000000000000000000000000..cb19bf566a77930dd06ade9ca49d61d9bd3b9112 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/reference/arkui-ts/ts-universal-events.md @@ -0,0 +1,26 @@ +--- +title: ts-universal-events +permalink: /pages/extra/68fee7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 通用事件 + +- **[点击事件](/pages/010c020201010101)** + +- **[触摸事件](/pages/010c020201010102)** + +- **[挂载卸载事件](/pages/010c020201010103)** + +- **[按键事件](/pages/010c020201010104)** + +- **[组件区域变化事件](/pages/010c020201010105)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/security/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/security/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..bdaf54b832bb420a123be5a18ab23a0b07ad8fc5 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/security/Readme-CN.md @@ -0,0 +1,18 @@ +--- +title: Readme-CN +permalink: /pages/extra/a47051/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 安全 + +- 用户认证 + - [用户认证开发概述](/pages/01080401) + - [用户认证开发指导](/pages/01080402) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/ui/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..240ba97b18e5a1e0b4876265c566e8b9f2fc6e25 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/Readme-CN.md @@ -0,0 +1,125 @@ +--- +title: Readme-CN +permalink: /pages/extra/e9d6f1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# UI + +- 方舟开发框架(ArkUI) + - [方舟开发框架概述](/pages/01080201) + - 基于JS扩展的类Web开发范式 + - [概述](/pages/0108020201) + - 框架说明 + - [文件组织](/pages/010802020201) + - [js标签配置](/pages/010802020202) + - [app.js](/pages/010802020203) + - 语法 + - [HML语法参考](/pages/01080202020401) + - [CSS语法参考](/pages/01080202020402) + - [JS语法参考](/pages/01080202020403) + - [生命周期](/pages/010802020205) + - [资源限定与访问](/pages/010802020206) + - [多语言支持](/pages/010802020207) + - 构建用户界面 + - [组件介绍](/pages/010802020301) + - 构建布局 + - [布局说明](/pages/01080202030201) + - [添加标题行和文本区域](/pages/01080202030202) + - [添加图片区域](/pages/01080202030203) + - [添加留言区域](/pages/01080202030204) + - [添加容器](/pages/01080202030205) + - [添加交互](/pages/010802020303) + - [动画](/pages/010802020304) + - [事件](/pages/010802020305) + - [页面路由](/pages/010802020306) + - 常见组件开发指导 + - [Text](/pages/010802020401) + - [Input](/pages/010802020402) + - [Button](/pages/010802020403) + - [List](/pages/010802020404) + - [Picker](/pages/010802020405) + - [Dialog](/pages/010802020406) + - [Form](/pages/010802020407) + - [Stepper](/pages/010802020408) + - [Tabs](/pages/010802020409) + - [Image](/pages/01080202040a) + - 动效开发指导 + - CSS动画 + - [属性样式动画](/pages/01080202050101) + - [transform样式动画](/pages/01080202050102) + - [background-position样式动画](/pages/01080202050103) + - JS动画 + - [组件动画](/pages/01080202050201) + - 插值器动画 + - [动画动效](/pages/0108020205020201) + - [动画帧](/pages/0108020205020202) + - [自定义组件](/pages/0108020206) + - 基于TS扩展的声明式开发范式 + - [概述](/pages/0108020301) + - 框架说明 + - 文件组织 + - [目录结构](/pages/01080203020101) + - [应用代码文件访问规则](/pages/01080203020102) + - [js标签配置](/pages/010802030202) + - 资源访问 + - [媒体资源类型说明](/pages/01080203020301) + - [像素单位](/pages/010802030204) + - [类型定义](/pages/010802030205) + - 声明式语法 + - [描述规范使用说明](/pages/010802030301) + - 通用UI描述规范 + - [基本概念](/pages/01080203030201) + - 声明式UI描述规范 + - [无构造参数配置](/pages/0108020303020201) + - [必选参数构造配置](/pages/0108020303020202) + - [属性配置](/pages/0108020303020203) + - [事件配置](/pages/0108020303020204) + - [子组件配置](/pages/0108020303020205) + - 组件化 + - [@Component](/pages/0108020303020301) + - [@Entry](/pages/0108020303020302) + - [@Preview](/pages/0108020303020303) + - [@Builder](/pages/0108020303020304) + - [@Extend](/pages/0108020303020305) + - [@CustomDialog](/pages/0108020303020306) + - UI状态管理 + - [基本概念](/pages/01080203030301) + - 管理组件拥有的状态 + - [@State](/pages/0108020303030201) + - [@Prop](/pages/0108020303030202) + - [@Link](/pages/0108020303030203) + - 管理应用程序的状态 + - [应用程序的数据存储](/pages/010802030303030101) + - [持久化数据管理](/pages/010802030303030102) + - [环境变量](/pages/010802030303030103) + - 其他类目的状态管理 + - [Observed和ObjectLink数据管理](/pages/0108020303030401) + - [@Consume和@Provide数据管理](/pages/0108020303030402) + - [@Watch](/pages/0108020303030403) + - 渲染控制语法 + - [条件渲染](/pages/01080203030401) + - [循环渲染](/pages/01080203030402) + - [数据懒加载](/pages/01080203030403) + - 深入理解组件化 + - [build函数](/pages/01080203030501) + - [自定义组件初始化](/pages/01080203030502) + - [自定义组件生命周期回调函数](/pages/01080203030503) + - [组件创建和重新初始化示例](/pages/01080203030504) + - [语法糖](/pages/extra/d65089/) + - 体验声明式UI + - [创建声明式UI工程](/pages/010802030401) + - [初识Component](/pages/010802030402) + - [创建简单视图](/pages/010802030403) + - 页面布局与连接 + - [构建食物数据模型](/pages/010802030501) + - [构建食物列表List布局](/pages/010802030502) + - [构建食物分类Grid布局](/pages/010802030503) + - [页面跳转与数据传递](/pages/010802030504) diff --git a/website/docs/_posts/zh-cn/application-dev/ui/js-framework-syntax.md b/website/docs/_posts/zh-cn/application-dev/ui/js-framework-syntax.md new file mode 100644 index 0000000000000000000000000000000000000000..169bc1fed9d36e2d5203bcaeccb06bb1d03f3050 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/js-framework-syntax.md @@ -0,0 +1,22 @@ +--- +title: js-framework-syntax +permalink: /pages/extra/3fa9af/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 语法 + + + +- **[HML语法参考](/pages/01080202020401)** + +- **[CSS语法参考](/pages/01080202020402)** + +- **[JS语法参考](/pages/01080202020403)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/js-framework.md b/website/docs/_posts/zh-cn/application-dev/ui/js-framework.md new file mode 100644 index 0000000000000000000000000000000000000000..95e94dfbe2f49739a11cbde00ceeb45cbdfb5541 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/js-framework.md @@ -0,0 +1,30 @@ +--- +title: js-framework +permalink: /pages/extra/56107d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 框架说明 + + + +- **[文件组织](/pages/010802020201)** + +- **[js标签配置](/pages/010802020202)** + +- **[app.js](/pages/010802020203)** + +- **[语法](/pages/extra/3fa9af/)** + +- **[生命周期](/pages/010802020205)** + +- **[资源限定与访问](/pages/010802020206)** + +- **[多语言支持](/pages/010802020207)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-a-deep-dive-into-component.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-a-deep-dive-into-component.md new file mode 100644 index 0000000000000000000000000000000000000000..5635539e4f0c244815abbec4cac334812640cf1d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-a-deep-dive-into-component.md @@ -0,0 +1,24 @@ +--- +title: ts-a-deep-dive-into-component +permalink: /pages/extra/409af4/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 深入理解组件化 + +- **[build函数](/pages/01080203030501)** + +- **[自定义组件成员变量初始化](/pages/01080203030502)** + +- **[自定义组件生命周期回调函数](/pages/01080203030503)** + +- **[组件创建和重新初始化示例](/pages/01080203030504)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-component-based.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-component-based.md new file mode 100644 index 0000000000000000000000000000000000000000..5f85160bc3e92374b21f619f9d675aaf43890496 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-component-based.md @@ -0,0 +1,28 @@ +--- +title: ts-component-based +permalink: /pages/extra/d65dc3/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 组件化 + +- **[@Component](/pages/0108020303020301)** + +- **[@Entry](/pages/0108020303020302)** + +- **[@Preview](/pages/0108020303020303)** + +- **[@Builder](/pages/0108020303020304)** + +- **[@Extend](/pages/0108020303020305)** + +- **[@CustomDialog](/pages/0108020303020306)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-syntax.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-syntax.md new file mode 100644 index 0000000000000000000000000000000000000000..f5ae023626a844ad4968a8821abe599bf591ec9a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-syntax.md @@ -0,0 +1,28 @@ +--- +title: ts-declarative-syntax +permalink: /pages/extra/d34bd0/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 声明式语法 + + + +- **[描述规范使用说明](/pages/010802030301)** + +- **[通用UI描述规范](/pages/extra/5292d1/)** + +- **[UI状态管理](/pages/extra/b42ca2/)** + +- **[渲染控制语法](/pages/extra/47a3eb/)** + +- **[深入理解组件化](/pages/extra/409af4/)** + +- **[语法糖](/pages/extra/d65089/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-ui-description-specifications.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-ui-description-specifications.md new file mode 100644 index 0000000000000000000000000000000000000000..3776cb15c4c50e52fe3a5e2e455155e298932c85 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-declarative-ui-description-specifications.md @@ -0,0 +1,26 @@ +--- +title: ts-declarative-ui-description-specifications +permalink: /pages/extra/8eb1c8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 声明式UI描述规范 + +- **[无构造参数配置](/pages/0108020303020201)** + +- **[必选参数构造配置](/pages/0108020303020202)** + +- **[属性配置](/pages/0108020303020203)** + +- **[事件配置](/pages/0108020303020204)** + +- **[子组件配置](/pages/0108020303020205)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-framework-file.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-framework-file.md new file mode 100644 index 0000000000000000000000000000000000000000..e2d4fa8f5f7bba295c35f12ab1cc733c36fe277d --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-framework-file.md @@ -0,0 +1,20 @@ +--- +title: ts-framework-file +permalink: /pages/extra/e74aa9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 文件组织 + + + +- **[目录结构](/pages/01080203020101)** + +- **[应用代码文件访问规则](/pages/01080203020102)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-framework.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-framework.md new file mode 100644 index 0000000000000000000000000000000000000000..882ff4dfb6f38808e6425b7a44b3d2208e70c1ac --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-framework.md @@ -0,0 +1,26 @@ +--- +title: ts-framework +permalink: /pages/extra/6db36f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 框架说明 + + + +- **[文件组织](/pages/extra/e74aa9/)** + +- **[js标签配置](/pages/010802030202)** + +- **[资源访问](/pages/extra/b3e33f/)** + +- **[像素单位](/pages/010802030204)** + +- **[类型定义](/pages/010802030205)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-general-ui-description-specifications.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-general-ui-description-specifications.md new file mode 100644 index 0000000000000000000000000000000000000000..61be8d234e033aa9920459c222976cf14b22ea9f --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-general-ui-description-specifications.md @@ -0,0 +1,22 @@ +--- +title: ts-general-ui-description-specifications +permalink: /pages/extra/5292d1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 通用UI描述规范 + +- **[基本概念](/pages/01080203030201)** + +- **[声明式UI描述规范](/pages/extra/8eb1c8/)** + +- **[组件化](/pages/extra/d65dc3/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states-apis.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states-apis.md new file mode 100644 index 0000000000000000000000000000000000000000..a29cfdbbb9b6e5ddfa6e6c2962f58674c6cef404 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states-apis.md @@ -0,0 +1,22 @@ +--- +title: ts-managing-application-states-apis +permalink: /pages/extra/95dd5b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 接口 + + + +- **[应用程序的数据存储](/pages/010802030303030101)** + +- **[持久化数据管理](/pages/010802030303030102)** + +- **[环境变量](/pages/010802030303030103)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states.md new file mode 100644 index 0000000000000000000000000000000000000000..423b12f399feb1ee7eea7afe11e806862c868cc9 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-application-states.md @@ -0,0 +1,22 @@ +--- +title: ts-managing-application-states +permalink: /pages/extra/b7bcc3/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 管理应用程序的状态 + +- **[应用程序的数据存储](/pages/010802030303030101)** + +- **[持久化数据管理](/pages/010802030303030102)** + +- **[环境变量](/pages/010802030303030103)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-component-states.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-component-states.md new file mode 100644 index 0000000000000000000000000000000000000000..7ec4a69d95d8ccbc463045e2c56f69a8b243fec5 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-component-states.md @@ -0,0 +1,22 @@ +--- +title: ts-managing-component-states +permalink: /pages/extra/ee06a1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 管理组件拥有的状态 + +- **[@State](/pages/0108020303030201)** + +- **[@Prop](/pages/0108020303030202)** + +- **[@Link](/pages/0108020303030203)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-other-states.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-other-states.md new file mode 100644 index 0000000000000000000000000000000000000000..47cdc68af102bd615bc70747f7f96ac2aab5987a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-managing-other-states.md @@ -0,0 +1,22 @@ +--- +title: ts-managing-other-states +permalink: /pages/extra/4e0098/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 其他类目的状态管理 + +- **[Observed和ObjectLink数据管理](/pages/0108020303030401)** + +- **[@Consume和@Provide数据管理](/pages/0108020303030402)** + +- **[@Watch](/pages/0108020303030403)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-rending-control-syntax.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-rending-control-syntax.md new file mode 100644 index 0000000000000000000000000000000000000000..c80a22840de607ca5d4e9ff77e950e0469586dfe --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-rending-control-syntax.md @@ -0,0 +1,22 @@ +--- +title: ts-rending-control-syntax +permalink: /pages/extra/47a3eb/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 渲染控制语法 + +- **[条件渲染](/pages/01080203030401)** + +- **[循环渲染](/pages/01080203030402)** + +- **[数据懒加载](/pages/01080203030403)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-resource-access.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-resource-access.md new file mode 100644 index 0000000000000000000000000000000000000000..ff8134fc4f338abcd4e81ec6f6232d778ba5ca06 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-resource-access.md @@ -0,0 +1,18 @@ +--- +title: ts-resource-access +permalink: /pages/extra/b3e33f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 资源访问 + + + +- **[媒体资源类型说明](/pages/01080203020301)** \ No newline at end of file diff --git "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" b/website/docs/_posts/zh-cn/application-dev/ui/ts-syntactic-sugar.md similarity index 33% rename from "website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" rename to website/docs/_posts/zh-cn/application-dev/ui/ts-syntactic-sugar.md index f3880e69c79b13f06f1d635a62e00cea2011737e..dd72bc147d8fed3929ae28721e5f315cca22c9b1 100644 --- "a/website/docs/01.\346\226\207\346\241\243/12.\345\217\202\350\200\203/02.ArkUI\347\273\204\344\273\266\345\217\202\350\200\203/02.\345\237\272\344\272\216TS\346\211\251\345\261\225\347\232\204\345\243\260\346\230\216\345\274\217\345\274\200\345\217\221\350\214\203\345\274\217/02.\345\243\260\346\230\216\345\274\217\350\257\255\346\263\225/06.\350\257\255\346\263\225\347\263\226/01.\350\243\205\351\245\260\345\231\250.md" +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-syntactic-sugar.md @@ -1,23 +1,23 @@ --- -title: 装饰器 -permalink: /pages/000b0101010500 +title: ts-syntactic-sugar +permalink: /pages/extra/d65089/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:39 +date: 2022-02-12 09:01:56 --- -# 装饰器 +# 语法糖 -装饰器**@Decorator**,被装饰的元素可以是变量声明,类定义,结构体定义,方法定义等,赋予其特殊的含义。 +## 装饰器 -多个装饰器实现可以叠加到目标元素,书写在同一行上或者在多行上,推荐书写在多行上。 +装饰器**@Decorator**不仅可以装饰类或结构体,还可以装饰类的属性。多个装饰器可以叠加到目标元素,定义在同一行上或者在多行上,推荐定义在多行上。 -如下**@Component**和**@State**的使用,被**@Component**装饰的元素具备了组件化的含义,使用**@State**装饰的变量具备了状态数据的含义: +如下示例为**@Component**和**@State**的使用,被**@Component**装饰的元素具备了组件化的含义,使用**@State**装饰的变量具备了状态数据的含义。 ``` @Component @@ -26,14 +26,14 @@ struct MyComponent { } ``` -装饰器可以书写在同一行上: +装饰器定义在同一行上的描述如下: ``` @Entry @Component struct MyComponent { } ``` -但更推荐书写在多行上: +但更推荐定义在多行上: ``` @Entry @@ -42,7 +42,7 @@ struct MyComponent { } ``` -## 支持的装饰器列表 +### 支持的装饰器列表 + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + +

装饰器

@@ -67,6 +67,34 @@ struct MyComponent {

组件被装饰后作为页面的入口,页面加载时将被渲染显示。

@Preview

+

struct

+

用@Preview装饰的自定义组件可以在DevEco Studio的预览器上进行预览,加载页面时,将创建并呈现@Preview装饰的自定义组件。

+

@Builder

+

方法

+

@Builder装饰的方法用于定义组件的声明式UI描述,在一个自定义组件内快速生成多个布局内容。

+

@Extend

+

方法

+

@Extend装饰器将新的属性函数添加到内置组件上,通过@Extend装饰器可以快速定义并复用组件的自定义样式。

+

@CustomDialog

+

struct

+

@CustomDialog装饰器用于装饰自定义弹窗。

+

@State

基本数据类型,类,数组

@@ -85,9 +113,118 @@ struct MyComponent {

基本数据类型,类,数组

父子组件之间的双向数据绑定。父组件的内部状态数据作为数据源。任何一方所做的修改都会反映给另一方。

+

父子组件之间的双向数据绑定,父组件的内部状态数据作为数据源,任何一方所做的修改都会反映给另一方。

+

@Observed

+

+

@Observed应用于类,表示该类中的数据变更被UI页面管理。

+

@ObjectLink

+

被@Observed所装饰类的对象

+

@ObjectLink应用于被@Observed所装饰类的对象。

+

@Consume

+

基本数据类型,类,数组

+

Provide作为数据的提供方,可以更新其子孙节点的数据,并触发页面渲染。

+

@Provide

+

基本数据类型,类,数组

+

Consume在感知到Provide数据的更新后,会触发当前view的重新渲染。

+

@Watch

+

被@State, @Prop, @Link, @ObjectLink, @Provide, @Consume, @StorageProp, @StorageLink中任意一个装饰的变量

+

@Watch用于监听状态变量的变化,应用可以注册回调方法。

+## 链式调用 + +允许开发者以“.”链式调用的方式配置UI结构及其属性、事件等。 + +``` +Column() { + Image('1.jpg') + .alt('error.jpg') + .width(100) + .height(100) +}.padding(10) +``` + +## struct对象 + +组件可以基于**struct**实现,组件不能有继承关系,**struct**可以比**class**更加快速的创建和销毁。 + +``` +@Component +struct MyComponent { + @State data: string = '' + + build() { + } +} +``` + +## 在实例化过程中省略"new" + +对于**struct**的实例化,可以省略**new**。 + +``` +// 定义 +@Component +struct MyComponent { + build() { + } +} + +// 使用 +Column() { + MyComponent() +} + +// 等价于 +new Column() { + new MyComponent() +} +``` + +## 生成器函数内使用TS语言的限制 + +TS语言的使用在生成器函数中存在一定的限制: + +- 表达式仅允许在字符串\($\{expression\}\)、if条件、ForEach的参数和组件的参数中使用; +- 这些表达式中的任何一个都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; +- 生成器函数内部不能有局部变量。 + +上述限制都不适用于事件处理函数(例如**onClick**)的匿名函数实现,它们也不适用于UI组件描述外的其余部分。 + +非法示例: + +``` +build() { + let a: number = 1 // invalid: variable declaration not allowed + Column() { + Text('Hello ${this.myName.toUpperCase()}') // ok. + ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array varible in place + } + buildSpecial() // invalid: no function calls + Text(this.calcTextValue()) // this function call is ok. +} +``` + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ts-ui-state-management.md b/website/docs/_posts/zh-cn/application-dev/ui/ts-ui-state-management.md new file mode 100644 index 0000000000000000000000000000000000000000..bcc903a1d87e6ba67a5ac4b4e89b493e00993566 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ts-ui-state-management.md @@ -0,0 +1,24 @@ +--- +title: ts-ui-state-management +permalink: /pages/extra/b42ca2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# UI状态管理 + +- **[基本概念](/pages/01080203030301)** + +- **[管理组件拥有的状态](/pages/extra/ee06a1/)** + +- **[管理应用程序的状态](/pages/extra/b7bcc3/)** + +- **[其他类目的状态管理](/pages/extra/4e0098/)** + + diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-js.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-js.md new file mode 100644 index 0000000000000000000000000000000000000000..4118bf8535914330560d1e7f4c309797462946fa --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-js.md @@ -0,0 +1,28 @@ +--- +title: ui-arkui-js +permalink: /pages/extra/3adabc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 基于JS扩展的类Web开发范式 + + + +- **[概述](/pages/0108020201)** + +- **[框架说明](/pages/extra/56107d/)** + +- **[构建用户界面](/pages/extra/8048d5/)** + +- **[常见组件开发指导](/pages/extra/3e0834/)** + +- **[动效开发指导](/pages/extra/9e2839/)** + +- **[自定义组件](/pages/0108020206)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-ts.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-ts.md new file mode 100644 index 0000000000000000000000000000000000000000..8300c3f6ea4382482b135f750fbe075d56fd5505 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui-ts.md @@ -0,0 +1,26 @@ +--- +title: ui-arkui-ts +permalink: /pages/extra/c48b55/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 基于TS扩展的声明式开发范式 + + + +- **[概述](/pages/0108020301)** + +- **[框架说明](/pages/extra/6db36f/)** + +- **[声明式语法](/pages/extra/d34bd0/)** + +- **[体验声明式UI](/pages/extra/fd8875/)** + +- **[页面布局与连接](/pages/extra/8913e8/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui.md new file mode 100644 index 0000000000000000000000000000000000000000..74cf162e8f80698e53b691171554f1c22b4b5e17 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-arkui.md @@ -0,0 +1,22 @@ +--- +title: ui-arkui +permalink: /pages/extra/fd5b3c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 方舟开发框架(ArkUI) + + + +- **[方舟开发框架概述](/pages/01080201)** + +- **[基于JS扩展的类Web开发范式](/pages/extra/3adabc/)** + +- **[基于TS扩展的声明式开发范式](/pages/extra/c48b55/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-css.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-css.md new file mode 100644 index 0000000000000000000000000000000000000000..60e215948b421329905b215fb691d9a13e00633b --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-css.md @@ -0,0 +1,22 @@ +--- +title: ui-js-animate-css +permalink: /pages/extra/fc961f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# CSS动画 + + + +- **[属性样式动画](/pages/01080202050101)** + +- **[transform样式动画](/pages/01080202050102)** + +- **[background-position样式动画](/pages/01080202050103)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-interpolator.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-interpolator.md new file mode 100644 index 0000000000000000000000000000000000000000..26f119e2d9334a988bbc14929fd408a795308c79 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-interpolator.md @@ -0,0 +1,20 @@ +--- +title: ui-js-animate-interpolator +permalink: /pages/extra/2bf4ec/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 插值器动画 + + + +- **[动画动效](/pages/0108020205020201)** + +- **[动画帧](/pages/0108020205020202)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-javascript.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-javascript.md new file mode 100644 index 0000000000000000000000000000000000000000..4e3fd223f9bdd8addac013bde26ed5eede277406 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate-javascript.md @@ -0,0 +1,20 @@ +--- +title: ui-js-animate-javascript +permalink: /pages/extra/f84929/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# JS动画 + + + +- **[组件动画](/pages/01080202050201)** + +- **[插值器动画](/pages/extra/2bf4ec/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate.md new file mode 100644 index 0000000000000000000000000000000000000000..7c9b8f9e2d87673c18a35fcde6f51b055980b515 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-animate.md @@ -0,0 +1,20 @@ +--- +title: ui-js-animate +permalink: /pages/extra/9e2839/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 动效开发指导 + + + +- **[CSS动画](/pages/extra/fc961f/)** + +- **[JS动画](/pages/extra/f84929/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui-layout.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui-layout.md new file mode 100644 index 0000000000000000000000000000000000000000..fb1b7e3babe05158fe32a674db74f84a08fcff18 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui-layout.md @@ -0,0 +1,26 @@ +--- +title: ui-js-building-ui-layout +permalink: /pages/extra/5a7bc6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 构建布局 + + + +- **[布局说明](/pages/01080202030201)** + +- **[添加标题行和文本区域](/pages/01080202030202)** + +- **[添加图片区域](/pages/01080202030203)** + +- **[添加留言区域](/pages/01080202030204)** + +- **[添加容器](/pages/01080202030205)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui.md new file mode 100644 index 0000000000000000000000000000000000000000..e9a47709f715abb160db0ecaaadf8479f960e3b8 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-building-ui.md @@ -0,0 +1,28 @@ +--- +title: ui-js-building-ui +permalink: /pages/extra/8048d5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 构建用户界面 + + + +- **[组件介绍](/pages/010802020301)** + +- **[构建布局](/pages/extra/5a7bc6/)** + +- **[添加交互](/pages/010802020303)** + +- **[动画](/pages/010802020304)** + +- **[事件](/pages/010802020305)** + +- **[页面路由](/pages/010802020306)** diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-js-common-components.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-common-components.md new file mode 100644 index 0000000000000000000000000000000000000000..44e0780db4656f1929432032bd1f247920a894fa --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-js-common-components.md @@ -0,0 +1,35 @@ +--- +title: ui-js-common-components +permalink: /pages/extra/3e0834/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 常见组件开发指导 + + +- **[Text](/pages/010802020401)** + +- **[Input](/pages/010802020402)** + +- **[Button](/pages/010802020403)** + +- **[List](/pages/010802020404)** + +- **[Picker](/pages/010802020405)** + +- **[Dialog](/pages/010802020406)** + +- **[Form](/pages/010802020407)** + +- **[Stepper](/pages/010802020408)** + +- **[Tabs](/pages/010802020409)** + +- **[Image](/pages/01080202040a)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-experiencing-declarative-ui.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-experiencing-declarative-ui.md new file mode 100644 index 0000000000000000000000000000000000000000..49daaef7ae7be75df87abec06dd2585ba23d779a --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-experiencing-declarative-ui.md @@ -0,0 +1,22 @@ +--- +title: ui-ts-experiencing-declarative-ui +permalink: /pages/extra/fd8875/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 体验声明式UI + + + +- **[创建声明式UI工程](/pages/010802030401)** + +- **[初识Component](/pages/010802030402)** + +- **[创建简单视图](/pages/010802030403)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-page-layout-connections.md b/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-page-layout-connections.md new file mode 100644 index 0000000000000000000000000000000000000000..bbd476500f1e87173caf0a19c7860f367f68c75e --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/ui/ui-ts-page-layout-connections.md @@ -0,0 +1,24 @@ +--- +title: ui-ts-page-layout-connections +permalink: /pages/extra/8913e8/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# 页面布局与连接 + + + +- **[构建食物数据模型](/pages/010802030501)** + +- **[构建食物列表List布局](/pages/010802030502)** + +- **[构建食物分类Grid布局](/pages/010802030503)** + +- **[页面跳转与数据传递](/pages/010802030504)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/application-dev/usb/Readme-CN.md b/website/docs/_posts/zh-cn/application-dev/usb/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..f5d07a26d00a14b703dd74c55ab5d95c461b5dd1 --- /dev/null +++ b/website/docs/_posts/zh-cn/application-dev/usb/Readme-CN.md @@ -0,0 +1,17 @@ +--- +title: Readme-CN +permalink: /pages/extra/ea8df1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# USB服务 + +- [USB服务开发概述](/pages/01080701) +- [USB服务开发指导](/pages/01080702) diff --git a/website/docs/_posts/zh-cn/compatibility/readme.md b/website/docs/_posts/zh-cn/compatibility/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..f0241446d3606a71e3f0e9707b9bc9c878a06e4b --- /dev/null +++ b/website/docs/_posts/zh-cn/compatibility/readme.md @@ -0,0 +1,14 @@ +--- +title: readme +permalink: /pages/extra/42580f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +Todo diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-64bits-coding-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-64bits-coding-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..fe057817eed42cc0b12755df534694d5764dd7e6 --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-64bits-coding-guide.md @@ -0,0 +1,603 @@ +--- +title: OpenHarmony-64bits-coding-guide +permalink: /pages/extra/4c0e99/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# OpenHarmony 32/64位可移植编程规范 + +## 前言 + +### 目的 + +OpenHarmony的目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。具有“硬件互助,资源共享”、“一次开发,多端部署”、“统一OS,弹性部署”的技术特性。 +OpenHarmony支持三种系统类型: + +1. 轻量系统(mini system),面向从MCU类处理器(例如Arm Cortex-M、RISC-V 32位)的轻量设备,硬件资源极其有限,支持的设备最小内存为128KiB; +2. 小型系统(small system),面向应用处理器(例如Arm Cortex-A 64位)的设备,支持的设备最小内存为1MiB +3. 标准系统(standard system),面向应用处理器(例如Arm Cortex-A 64位)的设备,支持的设备最小内存为128MiB + +因此,OpenHarmony的代码运行在32位/64位的设备上。对系统代码的可移植性、32位/64位运行模式下的编码需要一定的规约。本文以此为初衷,结合OpenHarmony的特点,拟定了相关编程规约,用于指导代码移植和64位编码,提升代码的规范性及可移植能力,供研发人员参考。 + +### 适用范围 + +用户态和内核态的C、C++代码,不区分语言的标准。 + +### 32位/64位系统的类型差异 + +#### 数据类型差异 + +大部分的32位系统采用的是ILP32,即int、long和pointer是32位长度。大部分的64位系统采用的是LP64,即long、long long、pointer是64位长度。Windows系统采用的是LLP64,即long long和pointer是64位长度。各系统基本数据长度对比如下表所示: + +| **TYPE** | **ILP32** | **LP64** | **LLP64** | **LP32** | **ILP64** | +| --------- | --------- | -------- | --------- | -------- | --------- | +| char | 1 | 1 | 1 | 1 | 1 | +| short | 2 | 2 | 2 | 2 | 2 | +| int | 4 | 4 | 4 | 2 | 8 | +| long | **4** | **8** | **4** | 4 | 8 | +| long long | 8 | 8 | 8 | 8 | 8 | +| float | 4 | 4 | 4 | 4 | 4 | +| double | 8 | 8 | 8 | 8 | 8 | +| size_t | **4** | **8** | **8** | 4 | 8 | +| pointer | **4** | **8** | **8** | 4 | 8 | + +上表中只包含了部分基本类型,下表分别将ILP32和LP64的siziof和print`进行对比,展示了更全面的常量和类型对应的差异: + +| Type | ILP32 sizeof | ILP32 print | LP64 sizeof | LP64 print | 备注 | +| ------------------ | ------------ | ----------- | ----------- | ---------- | ------ | +| bool | 1 | %u | 1 | %u | C++ | +| char | 1 | %d或%c | 1 | %d或%c | | +| unsigned char | 1 | %u | 1 | %u | | +| short | 2 | %d | 2 | %d | | +| unsigned short | 2 | %u | 2 | %u | | +| int | 4 | %d | 4 | %d | | +| unsigned int | 4 | %u | 4 | %u | | +| long | 4 | %ld | **8** | %ld | 有差异 | +| unsigned long | 4 | %lu | **8** | %lu | 有差异 | +| long int | 4 | %ld | **8** | %ld | 有差异 | +| unsigned long int | 4 | %lu | **8** | %lu | 有差异 | +| long long | 8 | %lld | 8 | %lld | | +| unsigned long long | 8 | %llu | 8 | %llu | | +| type * | 4 | %p | **8** | %p | 有差异 | +| pid_t | 4 | %d | 4 | %d | | +| socklen_t | 4 | %u | 4 | %u | | +| off_t | 4 | %zd | **8** | %zd | 有差异 | +| time_t | 4 | %zd | 8 | %zd | 有差异 | +| pthread_t | 4 | %zu | **8** | %zu | 有差异 | +| size_t | 4 | %zu | 8 | %zu | 有差异 | +| ssize_t | 4 | %zd | **8** | %zd | 有差异 | + +#### 数据结构对齐的差异 + +##### 包含指针数据结构对齐的变化 + +```c +typedef struct tagFoo { + void *p; + uint32_t i; +} Foo; +``` + +在32位系统上,指针长度为4,Foo 4字节对齐,sizeof(Foo) 等于8,在64位系统上,指针长度为8,Foo 8字节对齐,sizeof(Foo) 等于16。 + +##### 包含64位整形的数据结构对齐的变化 + +```c +typedef struct tagFoo { + uint64_t p; + uint32_t i; +} Foo; +``` + +虽然uint64_t是定长的,但由于对齐的存在,Foo的大小也是不同的。在32位系统上,Foo 4字节对齐,sizeof(Foo) 等于12,在64位系统上,Foo 8字节对齐,sizeof(Foo) 等于16。uint64_t替换为double,上述结论依然成立。 + +### 约定 + +**规则**:编程时必须遵守的约定(must) + +**建议**:编程时应该遵守的约定(should) + +## 编程指导 + +### 总则 + +#### 【规则】开发者贡献的代码应当遵循此规范,编写出可同时应用于32位和64位的代码 + +【说明】由于OpenHarmony会长期同时存在32位的运行环境和64位的运行环境,而为了代码的一致性,开发者在编码时需要充分考虑代码的可移植能力。 + +### 数据类型定义和格式化 + +#### 【规则】应当使用统一定义的数据类型定义变量,无特殊意义或要求应当避免自行定义基本数据类型 + +【说明】基于可移植性要求,在32位和64位条件下,可变长度的数据类型可能导致兼容性错误,为简单清晰,要求采用归一清晰的数据类型进行定义。基于当前的要求,定义下列基础数据类型: + +| 类型定义 | ILP32 | LP64 | PRINT | 使用场景及代替类型 | +| ---------------- | ----- | ----- | ------- | ------------------------------------------------------------ | +| void | - | - | - | void,无类型,仅用于占位和通用指针定义 | +| char | 1 | 1 | %c | 对于字符串、数组直接使用原生char | +| int8_t | 1 | 1 | %d | 对于1字节整型使用int8_t,uint8_t | +| uint8_t | 1 | 1 | %u | 对于1字节整型使用int8_t,uint8_t | +| int16_t | 2 | 2 | %d | 代替short | +| uint16_t | 2 | 2 | %u | 代替unsigned short | +| int32_t | 4 | 4 | %d | 代替int | +| uint32_t | 4 | 4 | %u | 代替unsigned int | +| int64_t | 8 | 8 | %PRId64 | 代替long long,宏实现代码兼容 | +| uint64_t | 8 | 8 | %PRIu64 | 代替unsigned longlong,宏实现代码兼容 | +| float | 4 | 4 | %f | 单精度浮点数 | +| double | 8 | 8 | %lf | 双精度浮点数 | +| bool | 1 | 1 | %d | 布尔类型 | +| uintptr_t | **4** | **8** | %zu | 会根据32位和64位的不同定义为不同的长度,用于可能存储指针的场景 | +| type * | **4** | **8** | %p | type *,可变长度类型,与uintptr_t等价,存在类型转换时建议使用uintptr_t | +| nullptr_t | **4** | **8** | %p | 指针初始化 | +| pid_t | 4 | 4 | %d | Linux内置,固定长度 | +| socklen_t | 4 | 4 | %u | Linux内置,固定长度 | +| off_t/time_t | **4** | **8** | %zd | 可变长类型,有符号 | +| size_t/pthread_t | **4** | **8** | %zu | 可变长度类型,无符号,仅用于调用库函数的兼容性要求(比如底层API中使用了size_t) | + +上述类型定义在stddef.h(C)和cstdint(C++)标准库中,在采用#define重定义相关类型时,其源头应来自于上述类型。 + +非特殊情况,不要使用非标准类型。禁止定义通用基础类型,除非定义的类型有明确的特定含义。对于涉及到第三方接口及API调用中使用的基础数据类型,以相关专项规则为准。 + +【示例】非必要禁止自定义基础数据类型: + +```c +// 禁止使用下面代码来重定义 +typedef unsigned int UINT32;// 此定义禁止使用 + +// 已经有内置的uint32_t完全可代替上述定义,因此上述定义没有存在的必要。但如果定义的类型有明确的专用意义,则可以保留定义: +typedef uint32_t DB_TABLE_ID; // 此定义可以保留 +``` + +【示例】下面2个类型的长度与通常理解不一致,禁止使用: + +| 类型定义 | ILP32 | LP64 | PRINT | 使用场景及代替类型 | +| -------- | ------ | ----- | ----- | ---------------------- | +| float_t | **12** | **4** | - | 长度不合常理,禁止使用 | +| double_t | **12** | **8** | - | 长度不合常理,禁止使用 | + +#### 【建议】应当避免使用非统一定义的可变长类型定义变量,为适配平台、第三方代码接口等使用,需要特殊说明 + +【说明】原生的long、int、short、size_t等类型,在64位和32位下其长度不确定,在编码时容易疏忽而导致代码隐患。如果将此类型用于外部存储或通信,则很容易导致系统间的不兼容,因此无特殊需求原则上应当避免使用这些类型。 + +【例外】如果因为平台、第三方、库函数等原因,可以有限使用。使用这些类型定义时需要增加说明方便理解。 + +【示例】 + +```c +long var; +// 该定义在64位下为8bytes,在32位下为4bytes,存在歧义,建议修改为uint32_t或uint64_t。 +``` + +#### 【规则】避免使用uchar类型定义变量 + +【说明】uchar或unsigned char用来定义字符串是一种不规范用法。对当前代码中已经存在的使用,需要修改为char类型(确认是字符串)或uint8_t(确认是无符号整数)。 + +对于涉及到8bit编码的非ANSI字符序列,建议仍然使用char类型来定义。C++情况下,可使用wchar等宽字符类型定义。 + +#### 【规则】当需要采用整型变量来存储指针时,变量应该定义成uintptr_t以适应不同的位宽 + +【说明】uintptr_t类型用于用于存储指针长度级别的数据,其长度在32位和64位可自动适应。 + +【示例】 + +```c +uintptr_t sessionPtr; + +// 将指针存储为变量时,强转和左值都应定义为uintptr_t,以适配不同场景字长的变化 +sessionPtr = (uintptr_t) GetMemAddress(); +``` + +#### 【建议】函数入参或返回值定义的类型与变量类型发生不匹配时候,需要谨慎处理,以保证按照赋值和类型转换的规则进行转换后的结果正确 + +【说明】如果不可避免出现了类型不一致的情况,需要谨慎进行类型转换,确保转换后的结果满足实际应用需求。 + +【示例】 + +```c +long function (long l); +int main () { + int i = -2; + unsigned int k = 1U; + long n = function(i + k); +} +``` + +【注释】上面这段代码在 64 位系统上会失败,因为表达式 (i + k) 是一个无符号的 32 位表达式,在将其转换成 long 类型时,符号并没有得到扩展。入参的结果是不正确的。解决方案是将其中一个操作数强制转换成 64 位的类型。 + +#### 【规则】打印64位的整数请使用%PRId64,%PRIu64,%PRIx64等64位兼容宏进行格式化输出,不允许使用%d,%ld,%zd,%x,%lx等不兼容输出 + +【说明】如果待格式化的数据明确为64位类型(定义为uint64_t),其输出格式化应当采用下述方法: + +```c +#include +#include +#include + +int main() +{ + uint64_t a = 0x1234567fffffff; + printf("a = %"PRIx64"\n", a); + return 0; +} +``` + +上述输出代码,在32位和64位环境下均能够正常输出64位长度数字。如果采用其它格式处理,都存在兼容性问题,需要注意避免,如下表: + +| 格式化方法 | ILP32构建 | ILP32结果 | LP64构建 | LP64结果 | 结论 | +| ---------- | -------------- | --------- | -------------- | -------- | ---------- | +| %lx | 类型不匹配告警 | 错误 | 无告警 | 正确 | **不兼容** | +| %zx | 类型不匹配告警 | 错误 | 无告警 | 正确 | **不兼容** | +| %llx | 无告警 | 正确 | 类型不匹配告警 | 正确 | **不兼容** | +| %p | 类型不匹配告警 | 错误 | 类型不匹配告警 | 正确 | **不兼容** | +| %PRIx64 | 无告警 | 正确 | 无告警 | 正确 | 兼容 | + +【示例】类型不匹配告警信息示例: + +```bash +# 32位编译 +format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘uint64_t {aka long long unsigned int}’ +format ‘%zx’ expects argument of type ‘size_t’, but argument 2 has type ‘uint64_t {aka long long unsigned int}’ +format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘uint64_t {aka long long unsigned int}’ + +# 64位编译 +format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘uint64_t {aka long unsigned int}’ +format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘uint64_t {aka long unsigned int}’ +``` + +#### 【规则】打印输出可变类型数据,对齐时要考虑数据长度并预留足够空间 + +【说明】32位下指针及size_t长度最大只有8位(16进制)或10位(10进制),但在64位系统下,其最大宽度可达到20位,因此在打印输出时需要充分考虑其范围,避免打印因不对齐而影响用户体验。 + +#### 【规则】使用常量时,禁止采用L/UL作后缀,允许增加U后缀指定为unsigned int类型,允许增加LL/ULL后缀指定其长度为64位 + +【说明】无后缀的常量缺省为int类型;采用L/UL为后缀时,在32位和64位系统下,长度可能发生变化;确定需要64位时,采用LL/ULL为后缀定义以确保在32位和64位系统下均为64位长度。 + +| 常量定义 | ILP32 | LP64 | 使用场景 | +| -------------- | --------- | ----- | ------------------------------------------------------------ | +| 1 | 4 | 4 | 默认为int32_t类型,长度固定 | +| 1U | 4 | 4 | 默认为uint32_t类型,长度固定 | +| 1L | **4** | **8** | 后缀为L或UL,长度不同,应当避免使用 | +| 1UL | **4** | **8** | 后缀为L或UL,长度不同,应当避免使用 | +| 1LL | 8 | 8 | 默认为int64_t类型,长整形数据,直接使用LL,确定为64位,长度固定 | +| 1ULL | 8 | 8 | uint64_t类型,无符号长整形数据 | +| 0x7FFFFFFF | 4 | 4 | 不携带附加符号的数字,不超过int32_t的范围,默认为int32_t类型 | +| 0x7FFFFFFFL | **4** | **8** | 长度不同,避免使用 | +| 0x7FFFFFFFLL | 8 | 8 | 长度固定 | +| 0x80000000 | 4 | 4 | 小于uint32_t范围,类型为uint32_t类型 | +| 0x80000000L | **4** | **8** | 后缀为L,小于uint32_t范围,增加该参数没有意义,应当避免使用 | +| 0x80000000LL | 8 | 8 | 增加LL后缀,小于uint32_t范围,长度固定 | +| 0x8000000000 | **NA或8** | **8** | 无后缀,超过uint32_t的范围,编译器默认为LL或无效,64位下固定为uint64_t类型 | +| 0x8000000000L | **NA或8** | **8** | 后缀为L,对超过uint32_t的范围常数,增加该参数没有意义,应当避免使用 | +| 0x8000000000LL | 8 | 8 | 默认为LL,uint64_t类型 | + +从上表中可看出,使用L或UL后缀的常量,其长度在32位和64位下发生变化,不利于代码的可移植性,因此禁止使用这个后缀。 + +【示例】 + +```c +// 下面定义中的UL是没有意义的,在32位系统会出错,在64位系统不需要 +#define YYY_START_ADDRESS(XXX_START_ADDR + 0x80000000UL) +``` + +#### 【规则】应当使用标准头文件中定义的宏常量,避免自行定义 + +【说明】C(stdint.h)和C++(cstdint.h)的标准头文件中均有定义最大值/最小值的宏常量,源文件中引用即可,避免自行定义。 + +【示例】 + +```c +#include +#include + +int main() +{ + std::printf("%zu\n", sizeof(std::int64_t)); + std::printf("%s\n", PRId64); + std::printf("%+" PRId64 "\n", INT64_MIN); + std::printf("%+" PRId64 "\n", INT64_MAX); + + std::int64_t n = 7; + std::printf("%+" PRId64 "\n", n); +} +``` + +#### 【规则】应当使用统一的定义表示常量的无效值,避免直接使用全F等表示方法以适应不同的长度 + +【说明】同一个数字常量值在64位系统和32位系统上,按照32位系统有无符号类型,理解的结果可能不一样;特别是32位系统上最高bit位为1的,在32位系统上按照有符号类型理解成一个负数,在64位系统上是一个正数。要求统一使用typedef.h中的统一定义,表示数据的无效值。 + +```c +// 使用typedef.h中的定义 +#define INVALID_INT8((int8_t)(-1)) +#define INVALID_UINT8((uint8_t)(-1)) +#define INVALID_INT16((int16_t)(-1)) +#define INVALID_UINT16((uint16_t)(-1)) +#define INVALID_INT32((int32_t)(-1)) +#define INVALID_UINT32((uint32_t)(-1)) +#define INVALID_INT64((int64_t)(-1)) +#define INVALID_UINT64((uint64_t)(-1)) +``` + +【示例】 + +```c +// 在32位系统上,n是一个负数 +long n = 0xFFFFFFFF; +// 在64位系统上,n是一个正数,实际值为0x00000000FFFFFFFF。 +long n = 0xFFFFFFFF; +``` + +#### 【建议】对不会超过32位空间大小的临时变量,建议采用uint32_t定义 + +【说明】定义的变量不需要特别关注其类型,可采用默认的uint32_t类型,以减少因类型不一致导致的大量强制类型转换。 + +### 结构体对齐与填充 + +#### 【规则】代码中禁止采用常量硬编码来指定变量长度、结构体长度,应当使用sizeof等内建类型来获取 + +【说明】sizeof可自动计算相关变量和结构的长度,避免硬编码错误;同时在编译时即完成了所属变量长度的计算,不会影响运行性能。 + +在64位系统下默认对齐方式是8字节对齐,使用sizeof()获取结构体长度来取代硬编码,以避免因结构对齐导致的长度计算错误。 + +联合在使用时,需要特别关注到其长度在64位和32位下的不同,避免在计算长度时出现错误。特别是按照最大长度进行计算和空间申请。 + +【示例】未采用sizeof计算结构长度,可能导致内存空间不足。 + +```c +int32_t *p; +p = (int32_t *)malloc(4 * ELEMENTS_NUMBER); +// 这行代码假定指针的长度为4字节,而这在LP64中是不正确的,此时是8字节。 + +//正确的方法应使用sizeof() +int32_t *p; +p = (int32_t *)malloc(sizeof(p) * ELEMENTS_NUMBER); +``` + +#### 【建议】特殊情况下,64位系统可以强制编译器指定对齐方式 + +【说明】在需要时,为保持代码兼容性,可采用指定对齐方式。使用伪指令#pragma pack (n),编译器将按照n 个字节对齐;使用伪指令#pragma pack (),取消自定义字节对齐方式。 + +【样例】 + +```c +#pragma pack(push) # 保存当前的对齐方式 +#pragma pack(1) # 设置对齐方式为1字节对齐 +struct test +{ + ...... +}; +#pragma pack(pop) # 恢复之前的对齐方式 +``` + +#### 【规则】涉及多机通信的消息结构体,需要对齐统一。基于兼容性考虑,可优先采用1字节对齐;禁止使用8字节对齐和64位数据类型以避免与32位系统通信错误 + +【说明】板间通信消息涉及到跨板操作,除非所有软件同步升级,否则将会导致通信失败。为兼容性考虑,对已经存在的协议和结构,保持1字节对齐,并转换为网络序。对新增的通信协议,为通信效率和处理性能考虑,可以有条件采用4字节对齐。 + +#### 【规则】对外提供的接口数据结构应当避免出现填充,至少要求采用4字节对齐 + +【说明】对功能特性对外提供的API头文件,如果其中涉及到结构体定义,应当避免结构体填充,建议能够在自然对齐情况下数据不出现空洞,至少需要保证4字节对齐。 + +#### 【建议】应当使用成员名称访问结构体成员,禁止使用偏移方式访问 + +【说明】数据结构成员的偏移在32位和64位对齐情况下,其偏移值不同,不能直接计算每个成员的大小之后作为偏移;在32位系统上没有自动填充的数据结构,到了64位上有可能出现自动填充。 + +【示例】 + +```c +Struct A +{ + uint32_t a; + uint32_t *p; + uint32_t b; +}; +``` + +成员b的偏移等于sizeof(a) + sizeof(p)在32位系统上成立,在64位系统上不成立。正确的做法应当是直接通过变量名称进行索引定位: + +```c +xxx.b = 123; +``` + +如果结构定义比较特殊,比如结构体只是消息的头部,后续还有其它字段,则可能需要重新定义此结构,使结构体内部不出现填充字段。 + +【示例】 + +```c +typedef struct { + uint32_t self; /* 其它对齐结构 */ + uint32_t brother; /* 其它对齐结构 */ + uint8_t processedFlag; /* 当前节点是否被处理过的标志 */ + uint8_t reserve[3]; /* 为了4字节对齐的保留字段 */ +} TreeNodeInfo; + +typedef struct { + TreeNodeInfo nodeInfo; /* 每一个node的树信息的数据结构 */ + void *userInfo; /* 每一个node的用户信息数据结构 */ +} TreeNode; +``` + +TreeNode结构体中有两个成员结构体,下面的代码中根据第二个成员来获取第一个成员的地址,采用第二个成员首地址减去sizeof(第一个成员)计算(inUserInfo指向结构体中的userInfo字段): + +```c +inTreeNodeInfo = (TreeNodeInfo *)((void *)(((char *)inUserInfo) - sizeof(TreeNodeInfo))); +``` + +结构体采用自然对齐,需要注意到子结构体TreeNodeInfo,在32位下其长度为12bytes,在64位下,**其长度也是12位**。结构体TreeNode在32位下成员结构体之间无填充,其长度为16bytes,但在64位下的结构体长度:sizeof(TreeNodeInfo)=12,sizeof(TreeNode)=24,即子结构体TreeNodeInfo后有4个字节的填充字段,因此在64位下通过上述方法获取前一个字段地址,就会漏算填充的4个字节,导致成员访问出错。 + +#### 【建议】结构体定义时,为节省存储空间,在保证可读性的前提下,尽可能实现8字节自然对齐,避免出现填充 + +【说明】如果结构体能够实现自然对齐,则不需要进行填充,可有效节省结构体的无效空间。在不影响可读性的前提下,建议将size_t和pointer等64位长度类型放在结构体两端定义。 + +【示例】 + +```c +// 下面的结构体,在自然对齐情况下,其长度为24bytes +struct Foo +{ + int32_t a; + uint64_t l; + int32_t x; +} + +// 经过适当调整,可优化到16bytes +struct Foo +{ + uint64_t l; + int32_t a; + int32_t x; +} +``` + +### 数据类型转换及运算 + +#### 【规则】应当避免不同类型的数据之间的隐式类型转换,如果必要,应当采用显式类型转换,避免在32位和64位系统结果不一致 + +【说明】谨慎处理不同长度和精度的操作数之间进行运算,避免因默认转换出现精度和符号的丢失。64位与32位混合编程情况下,需要关注隐式类型转换的几个重要点: + +1. 64位长度的变量给32长度变量赋值,低32位直接赋值,高32位被截断丢失;低32位再根据左值变量类型理解成有符号或者无符号 + +2. 反之,32位长度的变量给64长度变量赋值,根据源32位为有符号或者无符号进行符号扩展,目的64位数再根据变量类型理解成有符号或者无符号。 + +3. 有符号数与无符号数进行运算,如果不指定结果类型,系统默认按照无符号方式理解。 + +上述转换过程可能带来不符合原意的结果,因此需要谨慎对待,尽可能避免隐式的转换。 + +【示例】转换后结果看上去正确的示例 + +```c +int32_t t1 = -2; +int64_t t2 = 1; +int32_t t3 = t1 + t2; +printf("t3 = %d\n", t3); + +// 打印结果: t3 = -1 +``` + +t1是个32位数,t2是个64位数,在做运算之前,先把t1也扩展成64位的。加法完成之后结果是一个64位的int64_t类型,在内存中16进制存储值为:0xffffffffffffffff,在给32位int32_t类型赋值发生截断, 值为0xffffffff,再理解成有符号32位,值为-1。此结果虽然看上去正确,但发生了数据截断,可能并不符合作者的本意。 + +【示例】有符号向无符号转换 + +```c +int64_t t1 = -1; +uint32_t t2 = t1; +printf("t2=%u", t2); + +// 打印结果:t2=4294967295 +``` + +t1是个64位int64_t类型,用二进制表示为0xffffffffffffffff,如果赋值给一个32位int类型,高32位丢失,直接显示位低32位的值,二进制为0xffffffff,按照无符号方式理解,值为4294967295。 + +【示例】32位向64位无符号转换 + +```c +int32_t t1 = -1; +uint64_t t2 = t1; +printf("t2 = %lu\n", t2); + +// 打印结果:t2 = 18446744073709551615 +``` + +源32位是个有符号的负数,扩展时,应该带符号扩展,负数高位全部为f,扩展后值为0xffffffffffffffff。目的64位类型是个无符号的数,所以其值是一个很大的正数。 + +#### 【规则】当需要将指针作为基址,再按照字节计算偏移时,指针需要强制转换为uintptr_t或uint8_t *等单字节指针类型 + +【说明】如果转换为整型,采用uint32_t强转,会出现指针被截断的情况,因此需要转换为uintptr_t。也可转换为单字节宽度的指针类型,如uint8_t *、char *等,转为上述方式后,偏移均被理解为字节。void *类型实际也会按照1字节进行偏移,但为了类型明确化,建议使用前面更明确的类型代替。 + +【示例】 + +```c +// 错误 +void *pPkt = (void *)((uint32_t)MSG_GET_DATA_ADDR(msgAddr) + OFFSET); + +// 正确 +void *pPkt = (void *)((uintptr_t)MSG_GET_DATA_ADDR(msgAddr) + OFFSET);// C +void *pPkt = reinterpret_cast(reinterpret_cast(MSG_GET_DATA_ADDR(msgAddr)) + OFFSET); // C++ +``` + +#### 【规则】禁止指针与uint32_t之间相互赋值,包括函数参数传递 + +【说明】如果要定义的变量可能是不确定长度的指针,使用void *;如果要定义的变量既可以是指针,也可以是整形,使用uintptr_t。 + +【示例】指针与整型的转换 + +```c +int32_t i, *p, *q; +p = &i; +q = (int32_t *) (int32_t)&i; + +// 在A32架构下,p = q;但是在A64-LP64架构下,p != q +``` + +为了避免这种类型冲突问题,可以用uintptr_t来表示指针类型。 + +#### 【规则】禁止size_t与int32_t/uint32_t之间相互赋值,包括函数参数传递 + +【说明】可变长度类型禁止与32长度类型强转。 + +【示例】 + +```c +int32_t length = (int32_t)strlen(str); // 错误 +``` + +strlen返回size_t(它在LP64中是unsigned long),当赋值给一个int32_t时,截断是必然发生的。而通常,截断只会在str的长度大于2GB时才会发生,这种情况在程序中一般不会出现,容易出现问题。 + +#### 【规则】在64位环境下使用大数组或大for循环索引时,索引类型应当与下标边界保持一致 + +【说明】如果系统中使用了超大数组或超大循环,在64位环境有可能超过32位的索引范围,则需要使用可变长度类型或64位类型来定义数组下标或循环变量,避免因变量范围不足而导致不能全量遍历。 + +【示例】 + +```c +int64_t count = BIG_NUMBER; +for (unsigned int index = 0; index != count; index++) + ... +``` + +在64位系统上,由于int64_t是64位类型,count是一个很大的数。unsigned int是32位类型 导致上面的循环永远不会终止。因此,index应该改成int64_t类型。 + +### 位域和字节序 + +#### 【规则】基于位域的变量定义需要充分考虑位域的基础类型及对齐问题,避免在不同的位宽下计算出错 + +【说明】位域的宽度需要结合对齐进行理解,结构体会变长;对位域的取值需要采用名称,避免采用直接计算。 + +#### 【规则】在64位系统上,考虑移位操作带来的长度差异,以及移位以后生成的值隐形扩展到64位的问题 + +【说明】位移运算时,需要检查是否可能导致溢出而回绕的情况,需要修改为32位类型避免结果不一致。 + +【示例】 + +```c +int64_t t = 1 << a; // 需考虑a的大小 +``` + +在32位系统上,a的最大值是32,在64位系统上,是64。如果a是一个32位变量,其结果还要考虑到64位扩展问题。 + +### 第三方库和差异化功能 + +#### 【规则】64位系统使用到的第三方类库,都必须是支持64位的 + +【说明】部分库函数、第三方开源代码本身对64位的支持不定完善,需要针对所有涉及的代码进行评估,确保其可运行在64位环境下。部分库函数在64位和32位采用不同的接口实现,因此需要确保使用正确的接口。 + +【示例】内存映射处理,在32位系统下可使用mmap,如果映射超过2GBytes,则需要使用mmap64;但64位系统下可统一使用mmap。 + +#### 【规则】涉及到底层汇编的功能,需要在64位和32位系统分别独立调测,避免功能不可用 + +【说明】切换到64位后,寄存器个数和位宽都有变化,涉及到汇编的相关调测功能都需要进行重新的调测,并需要同时关注32位和64位下的代码有效性。 + +【示例】调用栈的推栈功能,在32位和64位内嵌的汇编代码需要独立编写调测。 + +#### 【规则】补丁功能需要同时支持32位指令和64位指令差异 + +【说明】由于指令长度变更,补丁机制及功能需要适配修改。 + +#### 【规则】64位系统使用到的工具,都必须是支持64位的 + +【说明】如果不可避免出现了类型不一致的情况,需要谨慎进行类型转换,确保转换后的结果满足实际应用需求。 diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-Java-secure-coding-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-Java-secure-coding-guide.md index e7ab9ddbe2b94d50a0f216f123ddd74d3754e965..81c6d54c1bc2936d3f9c2bc397af1ee6cfa3f80c 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-Java-secure-coding-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-Java-secure-coding-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-Java-secure-coding-guide.md -permalink: /pages/extra/d38f7b/ +title: OpenHarmony-Java-secure-coding-guide +permalink: /pages/extra/ce48a8/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # OpenHarmony Java 安全编程指南 diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-coding-style-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-coding-style-guide.md index 8e6b2bcb1cf5a59e7ab6376eec5edc16bc1d5617..a8f1c3fc96fe98526a8bc927b8cb2f506b7e284b 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-coding-style-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-coding-style-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-JavaScript-coding-style-guide.md -permalink: /pages/extra/38b13b/ +title: OpenHarmony-JavaScript-coding-style-guide +permalink: /pages/extra/00dfbe/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # JavaScript语言通用编程规范 @@ -367,9 +367,8 @@ console.log(url); //url可以被访问到,输出内容:http://127.0.0.1:8080 **正例:** ```javascript -// ES5.1使用var声明变量 function open() { - var url = 'http://127.0.0.1:8080'; + let url = 'http://127.0.0.1:8080'; // todo something } open(); @@ -377,7 +376,6 @@ console.log(url); //报错:Uncaught ReferenceError: url is not defined ``` ```javascript -// ES6中,优先推荐使用let和const关键字来声明变量 function open() { const url = 'http://127.0.0.1:8080'; //todo something diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-docs-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-docs-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..01ab163c32f6e37ce734113949eba38ba1c0c18d --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-JavaScript-docs-guide.md @@ -0,0 +1,227 @@ +--- +title: OpenHarmony-JavaScript-docs-guide +permalink: /pages/extra/6db83f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 开源社区文档写作规范 + +## 文档交付清单(应用开发) + +- **JS API参考**:应用程序接口。 + + 按照**d.ts**文件进行分类,**一个d.ts文件对应一个md文档,该文档包含当前版本需要交付的所有接口**,每一个接口都需要包括接口的功能描述、参数描述、返回值描述、示例代码等。 + +- **开发指南**:**用于指导用户进行应用程序的设计和开发**,从应用程序开发角度介绍基于平台功能特性开发应用程序的过程。 + + 按照**场景进行分类**,通过描述场景功能、使用限制、调用接口等,以步骤的形式循序渐进地指导开发人员完成基于平台/产品提供的开放API或 SDK进行二次开发,最终实现某个特性或功能。 + +- **术语**:向开发者传递**完整、准确、唯一的**概念。 + + 当出现一个新概念时,需要提供统一的术语依据,规范化概念和名词表达。例如,eTS。 + +- **apidiff/changelog**:向开发者说明**版本变更**情况。 + + apidiff说明该版本所有接口的修改,包括新增、变更、废弃三种情况,若无修改则不用说明。 + + 若该版本存在变更后无法适配的接口,需要在changlog中说明每一个接口需要做的适配操作。 + +- **FAQ**( Frequently Asked Questions ):开发者常见异常及处理建议。 + +- **Readme**:向开发者介绍OpenHarmony子系统/部件的需求背景。 + +## 文档写作基本要求(适用于所有文档) + +- **完整性** + + 文档无场景缺失、无操作断点,交付内容需和版本实际交付范围一致,不遗漏、不超前。 + +- **正确性** + + 文档描述和实现**功能一致**,版本信息、参数、返回值描述无误,**用户可以通过文档进行实际操作**。 + +- **规范性** + + 文档描述**符合资料规范**,无低错、前后矛盾、上下文不一致、有歧义、敏感词等问题。注意:文档描述遵循术语规范,非必要场景不体现厂家信息。 + +- **易理解** + + 文档描述简洁、清晰,面向开发者,对开发者可感知和使用的能力进行描述。示例代码易理解,上下文完整(或提示)、参数明确、复杂逻辑有注释。 + +- **合规性** + + **无抄袭或合规风险**。包括但不限于:描述不可与友商高度一致,禁止使用友商特有的概念。 + +## 明确文档结构(应用开发) + +应用开发文档链接: [https://](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev)[gitee.com/openharmony/docs/tree/master/zh-cn/application-dev](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev) + +开发指南按不同功能分文件夹,平铺在application-dev中,比如media存放媒体开发指南,usb存放usb服务的开发指南。API参考统一放到application/reference/apis文件夹中。 + +![](/images/contribute/figures/figure1.png) + +## 每一个文档包含的内容(JS API和开发指南) + +1. 图片文件夹:放置文档中引用的图片,包含svg、png、gif等。 +2. 系统资源文件夹:放置文档中引用的系统图标,无需关注。 +3. Readme:目录 每一个新增的md文档,都需要写在Readme中。 +4. 文档:重点关注文档命名,详见后续描述。 + +![](/images/contribute/figures/figure2.png) + +## JS API内容写作 + +### 新建文档 or 在原有的文档里继续添加? + +该模块(以一个d.ts为单位)之前是否有文档?——是,在原有的文档里继续添加新增接口。否,新建一个markdown(md)文件。 + +![](/images/contribute/figures/figure3.png) + +1. **文件命名**:一个d.ts文件对应一个js api接口文档,文件名称:**js-apis-模块名.md**。示例: + + 媒体@ohos.multimedia.audio,文件命名为:js-apis-audio.md。 + + 电话@ohos.telephony.sms,文件命名为:js-apis-sms.md。 + +2. **文档标题:**使用**中文短语**概括本模块功能。但如果部分概念使用英文更便于开发者理解,不必强求,比方说,Ability、SIM卡等概念可以直接使用。 + + 如果在原有文档添加接口,需要检查新增了接口后,标题还能不能概括所有内容。比如说,media在API 6叫音频播放,但API 7新增了“音频录制”、“视频解码”的能力后,名字就要修改了。 + +3. **内容写作**较多,在后续指导中详细描述。 + +4. **上传路径**:docs/zh-cn/application-dev/reference/apis,图片放到对应的figures文件夹中。 + +5. **修改对应的Readme**,即docs/zh-cn/application-dev/reference/apis/Readme-CN.md。如果文档标题没有修改,无需修改Readme。 + +**Tips:docs仓的PR合入后,将自动触发翻译issue。** + +### 内容写作 + +JS API 文档模板路径:[https://](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md)[gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md) + +**每一个文档必须包含的内容:** + +- **文档标题** + + - **起始版本说明(必选)**:本模块首批接口的起始版本,以说明的形式进行插入。 + + ![](/images/contribute/figures/figure4.png) + + - **模块说明(必选)**:对该模块提供的功能、使用场景和使用建议进行简要描述。 + + 例如,轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。 + + - **导入模块/使用说明(必选)**:根据实际情况填写导入模块,如果没有导入模块,将“导入模块”修改为“使用说明”。 + + 导入模块,采用**代码段**的样式,给出import语句。 + + 使用说明,说明使用接口的先决条件,例如:在使用AbilityContext的功能前,需要通过getContext()先获取Context对象。 + + - **权限(必选)**:对该模块接口的使用权限做以说明。 + + 例如,需要权限:ohos.permission.XXX(如不涉及可删除,如果是系统权限要说明) + + - **功能描述(必选)**:对该模块涉及到的属性、接口等做以说明,在功能描述中进行详细解释。 + +- **功能描述(与d.ts文件保持一致)**: + + - **属性字段(namespace下的,可选)**:定义了对象的特征。 以表格形式呈现,包括属性名称、属性类型、可读、可写、属性说明。 + + - **方法(namespace下的,必选)**:关联到对象的函数。以section形式呈现,包括方法名称、调用形式、功能说明、参数、返回值、示例代码。 + + - **枚举(可选)**:一组值组成的类型。 以表格形式呈现,包括枚举名称、枚举值、说明。 + + - **类/interface(可选)**:一般包含自有属性和方法。以section形式呈现,包括类名/intrface名、描述、自有属性等。 + + - **自定义类型( 可选)**:以k-v键值对表示的interface,描述和方法的参数一致。以表格形式呈现,包括参数名、类型、是否必填、说明。 + + - **属性字段( class/interface里的,可选)** + + - **方法( class/interface里的)** + +**标题层级**: + +![](/images/contribute/figures/figure5.png) + +**版本标记**: + +1. 如果新版本增加了一个类,则该类、类的方法、类的属性均需打上版本标记。以全球化intl的文档为例说明。 + + intl的起始版本是API 7,在API 8新增了类**Collator、constructor方法等**,**于是给类Collator及其所有的方法打上8+的上标**,标记方式为直接在新增内容后面标记8+。 + + ![](/images/contribute/figures/figure7.png) + +2. 对于新版本废弃的内容,不能直接在文档上删去,需在废弃内容后面加上标标注deprecated,并使用“>”引用语法建议使用的替代方式,加上对应的链接。示例如下: + + abandonmentMethod(deprecated) + + \> 从API Version 7 开始废弃,建议使用newMethod替代。 + +**写作示例**: + +1. 参数返回值说明、示例代码写作示例: + +![](/images/contribute/figures/figure8.png) 2. 类、interface写作示例: + +![](/images/contribute/figures/figure9.png) + +## JS 开发指南写作 + +### 文档创建方式 + +![](/images/contribute/figures/figure10.png) + +**注意**: + +1. 文件夹命名:一个文件夹对应相关模块的开发指导。 +2. 上传路径:docs/zh-cn/application-dev/xxx文件夹,图片放到对应的figures文件夹中。 +3. 新增指南/添加文档,均需填写对应的Readme,即docs/zh-cn/application-dev/xxx文件夹/Readme-CN.md。 + +### 内容写作 + +概述模板链接:[https](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/concept-overview-template.md)[://gitee.com/openharmony/docs/blob/master/](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/concept-overview-template.md)[zh-cn](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/concept-overview-template.md)[/contribute/template/concept-overview-template.md](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/concept-overview-template.md) + +开发指导模板链接:[https://](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/guide-template.md)[gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/guide-template.md](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/guide-template.md) + +**每一个文档必须包含的内容**: + +- **概述/xxx开发概述(必选)** + + - **功能简介(必选)** :描述本指南提供了什么能力,指导开发者完成什么任务。 + + - **基本概念(必选)** :描述开发任务相关的基本概念。 + + - **运作机制(可选)** :描述开发任务实现功能的基本运作原理。 + + - **约束与限制(必选)** :描述本开发任务过程中的约束条件,以及此操作约束带来相应的负面影响。 + +- **Xxx开发指导(必选)** + + - **场景介绍(必选)** :描述在什么情景下解决什么问题,最终达到什么样的效果。 + + - **接口说明(必选)** :描述本开发指导相关的接口有哪些。 + + - **开发步骤(必选)** :描述开发的整体过程,便于开发者快速完成开发 + + - **调测验证(可选)** :开发完成后,如有独立的调测验证操作,需提供指导,以确认操作是否成功。 + + - **开发实例/sample(必选)** :开发完成后,基于一个任务整体做代码段的描述。 + +可选≠不写,可选=子系统可能没有这个情况。 + +**写作示例:** + +1. 概述写作示例: + + ![](/images/contribute/figures/figure11.png) + +2. 开发指导步骤写作示例: + + ![](/images/contribute/figures/figure12.png) diff --git a/website/docs/_posts/contribute/OpenHarmony-Log-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-Log-guide.md similarity index 95% rename from website/docs/_posts/contribute/OpenHarmony-Log-guide.md rename to website/docs/_posts/zh-cn/contribute/OpenHarmony-Log-guide.md index d8172c704cd8ee6245e8cc90d7f2b917ca853af7..faaf299044635775dc89992948125cb2437237e7 100644 --- a/website/docs/_posts/contribute/OpenHarmony-Log-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-Log-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-Log-guide.md -permalink: /pages/extra/f12b16/ +title: OpenHarmony-Log-guide +permalink: /pages/extra/779fcf/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:45 +date: 2022-02-12 09:01:58 --- # OpenHarmony日志打印规范 @@ -206,7 +206,7 @@ DEBUG: 比INFO级别更详细的流程记录,通过该级别的日志可以更 - **【建议】每个业务内部基于Domain ID分配机制在领域内按照层次、模块的粒度划分使用** -**说明:** Domain ID为32位整数,以16机制形式表达,分配范围0xD0xxxyy。其中D0为domain域标识,xxx高12位为DFT分配值,yy低8位业务领域内部使用。要求Domain ID 内部分配能够定界到组织或模块,反应领域内具体组织或模块日志质量,同时DFX会基于 Domain ID对日志打印进行管控,防止因为单个模块日志打印多影响领域内其它模块的日志输出,如BT业务内按照层次模块进一步划分: +**说明:** Domain ID为32位整数,以16机制形式表达,分配范围0xD0xxxyy。其中D0为domain域标识,xxx高12位为DFX分配值,yy低8位业务领域内部使用。要求Domain ID 内部分配能够定界到组织或模块,反应领域内具体组织或模块日志质量,同时DFX会基于 Domain ID对日志打印进行管控,防止因为单个模块日志打印多影响领域内其它模块的日志输出,如BT业务内按照层次模块进一步划分: APP | BT-App1 BT-App2 @@ -235,8 +235,7 @@ BT内的Domain ID可以进一步划分: - **【规则】正确填写日志格式化隐私参数标识{public},{private}** -**说明:** 隐私参数标识{public},{private}用来标识每个参数日志内容是否含隐私敏感信息。Hilog -API会自动对标识{public}参数内容以明文输出,对标识{private}参数内容以<private>过滤回显,禁止不分析日志打印内容随意设置隐私参数标识。如: +**说明:** 隐私参数标识{public},{private}用来标识每个参数日志内容是否含隐私敏感信息。Hilog API会自动对标识{public}参数内容以明文输出,对标识{private}参数内容以<private>过滤回显,禁止不分析日志打印内容随意设置隐私参数标识。如: 源码: diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-coding-style-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-coding-style-guide.md index 1f9f3ff69d333a55bb7c014bdcf395a1a8dfa662..7d4ac03c8e123044e4f09e30b45217ff2ef45b6c 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-coding-style-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-coding-style-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-c-coding-style-guide.md -permalink: /pages/extra/6f48b1/ +title: OpenHarmony-c-coding-style-guide +permalink: /pages/extra/3e68b2/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # C语言编程规范 @@ -55,6 +55,9 @@ date: 2021-12-30 12:57:47 大小写字母混用,单词连在一起,不同单词间通过单词首字母大写来分开。 按连接后的首字母是否大写,又分: **大驼峰(UpperCamelCase)**和**小驼峰(lowerCamelCase)** +**内核风格(unix_like)** +内核风格又称蛇形风格。单词小写,用下划线分割。 +如:'test_result' ### 规则1.1 标识符命名使用驼峰风格 @@ -66,7 +69,10 @@ date: 2021-12-30 12:57:47 注意: 上表中`常量`是指,全局作用域下,const 修饰的基本数据类型、枚举、字符串类型的变量,不包括数组、结构体和联合体。 -上表中`变量`是指除常量定义以外的其他变量,均使用小驼峰风格。 +上表中`变量`是指除常量定义以外的其他变量,均使用小驼峰风格。 +对于更亲和Linux/Unix的代码,可以使用内核风格。 +已使用内核命名风格的代码,可以选择继续使用内核风格。 +不管什么样的命名风格,都应该保证同一函数或结构体、联合体内的命名风格是一致的。 ### 建议1.1 作用域越大,命名应越精确 @@ -244,8 +250,12 @@ typedef struct tagNode { // Good: 使用 tag 前缀。这里也可以使用 ' 常量推荐采用全大写,下划线连接风格。作为全局变量,也可以保持与普通全局变量命名风格相同。 这里常量如前文定义,是指基本数据类型、枚举、字符串类型的全局 const 变量。 -函数式宏,如果功能上可以替代函数,也可以与函数的命名方式相同,使用大驼峰命名风格。 -这种做法会让宏与函数看起来一样,容易混淆,需要特别注意。 +函数式宏,命名风格,采用全大写,下划线连接风格。 +例外情况: +1、用宏实现泛型功能的函数。如:实现list,map等功能的宏。可以与函数的命名方式相同,使用大驼峰命名风格。 +2、函数接口发生变更为兼容老版本时,使用函数同宏进行替代。可以与函数的命名方式相同,使用大驼峰命名风格。 +3、日志打印宏。可以与函数的命名方式相同,使用大驼峰命名风格。 +注:使用大驼峰命名的函数式宏,需要在接口说明中标注为宏。 宏举例: ```c @@ -300,16 +310,16 @@ enum BaseColor { ### 建议1.5 避免函数式宏中的临时变量命名污染外部作用域 -首先,**尽量少的使用函数式宏。** +首先,**定义函数式宏前,应考虑能否定义为函数。如果可以则不要定义为函数式宏。** 当函数式宏需要定义局部变量时,为了防止跟外部函数中的局部变量有命名冲突。 -后置下划线,是一种解决方案。 例: +后置下双划线,是一种解决方案。 例: ```c #define SWAP_INT(a, b) do { \ - int tmp_ = a; \ + int tmp__ = a; \ a = b; \ - b = tmp_; \ + b = tmp__; \ } while (0) ``` @@ -317,11 +327,11 @@ enum BaseColor { ## 行宽 -### 建议2.1 行宽不超过 120 个字符 +### 规则2.1 行宽不超过 120 个字符 代码行宽不宜过长,否则不利于阅读。 控制行宽长度可以间接的引导开发去缩短函数、变量的命名,减少嵌套的层数,提升代码可读性。 -强烈建议和要求每行字符数不要超过 **120** 个;除非超过 **120** 能显著增加可读性,并且不会隐藏信息。 +要求每行字符数不要超过 **120** 个;除非超过 **120** 能显著增加可读性,并且不会隐藏信息。 虽然现代显示器分辨率已经很高,但是行宽过长,反而提高了阅读理解的难度;跟本规范提倡的“清晰”、“简洁”原则相背。 如下场景不宜换行,可以例外: @@ -336,14 +346,14 @@ enum BaseColor { ``` ## 缩进 -### 规则2.1 使用空格进行缩进,每次缩进4个空格 +### 规则2.2 使用空格进行缩进,每次缩进4个空格 只允许使用空格(space)进行缩进,每次缩进为 **4** 个空格。不允许使用Tab键进行缩进。 当前几乎所有的集成开发环境(IDE)和代码编辑器都支持配置将Tab键自动扩展为**4**空格输入,请配置你的代码编辑器支持使用空格进行缩进。 ## 大括号 -### 规则2.2 使用 K&R 缩进风格 +### 规则2.3 使用 K&R 缩进风格 **K&R风格** 换行时,函数左大括号另起一行放行首,并独占一行;其他左大括号跟随语句放行末。 @@ -367,7 +377,7 @@ int Foo(int a) ## 函数声明和定义 -### 规则2.3 函数声明、定义的返回类型和函数名在同一行;函数参数列表换行时应合理对齐 +### 规则2.4 函数声明、定义的返回类型和函数名在同一行;函数参数列表换行时应合理对齐 在声明和定义函数的时候,函数的返回值类型应该和函数名在同一行。 @@ -403,7 +413,7 @@ ReturnType ReallyReallyReallyReallyLongFunctionName( // 行宽不满 ## 函数调用 -### 规则2.4 函数调用参数列表换行时保持参数进行合理对齐 +### 规则2.5 函数调用参数列表换行时保持参数进行合理对齐 函数调用时,函数参数列表如果换行,应该进行合理的参数对齐。 左圆括号总是跟函数名,右圆括号总是跟最后一个参数。 @@ -432,7 +442,7 @@ int result = DealWithStructureLikeParams(left.x, left.y, // 表示一组相 ## 条件语句 -### 规则2.5 条件语句必须要使用大括号 +### 规则2.6 条件语句必须要使用大括号 我们要求条件语句都需要使用大括号,即便只有一条语句。 理由: @@ -446,7 +456,7 @@ if (objectIsNotExist) { // Good:单行条件语句也加大括号 } ``` -### 规则2.6 禁止 if/else/else if 写在同一行 +### 规则2.7 禁止 if/else/else if 写在同一行 条件语句中,若有多个分支,应该写在不同行。 @@ -466,7 +476,7 @@ if (someConditions) { ... } else { ... } // Bad: else 与 if 在同一行 ## 循环 -### 规则2.7 循环语句必须使用大括号 +### 规则2.8 循环语句必须使用大括号 和条件表达式类似,我们要求for/while循环语句必须加上大括号,即便循环体是空的,或循环语句只有一条。 ```c @@ -494,7 +504,7 @@ while (condition); // Bad:使用分号容易让人误解是while语句中 ## switch语句 -### 规则2.8 switch 语句的 case/default 要缩进一层 +### 规则2.9 switch 语句的 case/default 要缩进一层 switch 语句的缩进风格如下: ```c @@ -523,7 +533,7 @@ default: // Bad: default 未缩进 ## 表达式 -### 建议2.2 表达式换行要保持换行的一致性,操作符放行末 +### 建议2.1 表达式换行要保持换行的一致性,操作符放行末 较长的表达式,不满足行宽要求的时候,需要在适当的地方换行。一般在较低优先级操作符或连接符后面截断,操作符或连接符放在行末。 操作符、连接符放在行末,表示“未结束,后续还有”。 @@ -552,7 +562,7 @@ int sum = longVaribleName1 + longVaribleName2 + longVaribleName3 + ## 变量赋值 -### 规则2.9 多个变量定义和赋值语句不允许写在一行 +### 规则2.10 多个变量定义和赋值语句不允许写在一行 每行最好只有一个变量初始化的语句,更容易阅读和理解。 @@ -587,7 +597,7 @@ for (i = 0; i < row; i++) { 初始化包括结构体、联合体及数组的初始化 -### 规则2.10 初始化换行时要有缩进,或进行合理对齐 +### 规则2.11 初始化换行时要有缩进,或进行合理对齐 结构体或数组初始化时,如果换行应保持4空格缩进。 从可读性角度出发,选择换行点和对齐位置。 @@ -629,7 +639,7 @@ int c[][8] = { - 左大括号放行末时,对应的右大括号需另起一行 - 左大括号被内容跟随时,对应的右大括号也应跟随内容 -### 规则2.11 结构体和联合体在按成员初始化时,每个成员初始化单独一行 +### 规则2.12 结构体和联合体在按成员初始化时,每个成员初始化单独一行 C99标准支持结构体和联合体按照成员进行初始化,标准中叫"指定初始化"(designated initializer)。 如果按照这种方式进行初始化,每个成员的初始化单独一行。 ```c @@ -648,7 +658,7 @@ struct Date date = { // Good:使用指定初始化方式时,每行初始 ## 指针 -### 建议2.3 指针类型"\*"跟随变量名或者类型,不要两边都留有空格或都没有空格 +### 建议2.2 指针类型"\*"跟随变量名或者类型,不要两边都留有空格或都没有空格 声明或定义指针变量或者返回指针类型函数时,"\*" 靠左靠右都可以,但是不要两边都有或者都没有空格。 ```c @@ -676,13 +686,14 @@ int Foo(const char * restrict p); // OK. ## 编译预处理 -### 规则2.12 编译预处理的"#"默认放在行首,嵌套编译预处理语句时,"#"可以进行缩进 +### 规则2.13 编译预处理的"#"默认放在行首,嵌套编译预处理语句时,"#"可以进行缩进 -编译预处理的"#"统一放在行首;即便编译预处理的代码是嵌入在函数体中的,"#"也应该放在行首。 +编译预处理的"#"统一放在行首;即便编译预处理的代码是嵌入在函数体中的,"#"也应该放在行首。 +注意,开发过程尽量不要使用编译预处理宏。如果需使用,则应由专人进行统一管理。 ## 空格和空行 -### 规则2.13 水平空格应该突出关键字和重要信息,避免不必要的留白 +### 规则2.14 水平空格应该突出关键字和重要信息,避免不必要的留白 水平空格应该突出关键字和重要信息,每行代码尾部不要加空格。 总体规则如下: - if, switch, case, do, while, for 等关键字之后加空格; @@ -771,7 +782,7 @@ switch (var) { // Good: switch 关键字后面有1空格 注意:当前的集成开发环境(IDE)和代码编辑器都可以设置删除行尾的空格,请正确配置你的编辑器。 -### 建议2.4 合理安排空行,保持代码紧凑 +### 建议2.3 合理安排空行,保持代码紧凑 减少不必要的空行,可以显示更多的代码,方便代码阅读。下面有一些建议遵守的规则: - 根据上下内容的相关程度,合理安排空行; @@ -818,9 +829,15 @@ int Foo(void) **注释跟代码一样重要。** 写注释时要换位思考,用注释去表达此时读者真正需要的信息。在代码的功能、意图层次上进行注释,即注释解释代码难以表达的意图,不要重复代码信息。 -修改代码时,也要保证其相关注释的一致性。只改代码,不改注释是一种不文明行为,破坏了代码与注释的一致性,让阅读者迷惑、费解,甚至误解。 +修改代码时,也要保证其相关注释的一致性。只改代码,不改注释是一种不文明行为,破坏了代码与注释的一致性,让阅读者迷惑、费解,甚至误解。 -使用英文进行注释。 +使用**英文**进行注释。 + +必须要加注释说明场合如下(包含但不限于列举的场合): +1、模块对外提供的接口头文件必须对函数进行注释。 +2、定义全局变量必须加注释。 +3、核心算法必须加注释。 +4、超过50行的函数必须加注释。 ## 注释风格 @@ -1008,7 +1025,7 @@ switch (var) { ## 头文件职责 头文件是模块或文件的对外接口。 -头文件中适合放置接口的声明,不适合放置实现(内联函数除外)。 +头文件中适合放置接口的声明,不允许放置实现(内联函数除外)。 头文件应当职责单一。头文件过于复杂,依赖过于复杂还是导致编译时间过长的主要原因。 ### 建议4.1 每一个.c文件都应该有相应的.h文件,用于声明需要对外公开的接口 @@ -1084,17 +1101,17 @@ static void Bar(void) 为防止头文件被多重包含,所有头文件都应当使用 #define 作为包含保护;不要使用 #pragma once 定义包含保护符时,应该遵守如下规则: -- 保护符使用唯一名称;建议考虑项目源代码树顶层以下的文件路径 +- 保护符使用唯一名称;统一使用子系统名_部件名_文件名的定义规则。 - 不要在受保护部分的前后放置代码或者注释,文件头注释除外。 -假定 timer 模块的 timer.h,其目录为 `timer/include/timer.h`。其保护符若使用 'TIME_H' 很容易不唯一,所以使用项目源代码树的全路径,如: +假定 util 子系统 timer 部件的 timer.h,其目录为 `timer/include/timer.h`。其保护符若使用 'TIME_H' 很容易不唯一,按规则定义如: ```c -#ifndef TIMER_INCLUDE_TIMER_H -#define TIMER_INCLUDE_TIMER_H +#ifndef UTIL_TIMER_TIMER_H +#define UTIL_TIMER_TIMER_H ... -#endif +#endif // UTIL_TIMER_TIMER_H ``` ### 规则4.3 禁止通过声明的方式引用外部函数接口、变量 @@ -1291,9 +1308,20 @@ DealWithFileHead(fileHead, sizeof(fileHead)); // 处理文件头 使用返回值而不是输出参数,可以提高可读性,并且通常提供相同或更好的性能。 -函数名为 GetXxx、FindXxx 或直接名词作函数名的函数,直接返回对应对象,可读性更好。 +函数名为 GetXxx、FindXxx、IsXxx、OnXxx或直接名词作函数名的函数,直接返回对应对象,可读性更好。 +例外: +1、多值返回时,可以设计为输出参数返回。 +2、涉及内存分配时,可以设计为输出参数返回。调用者将申请的内存做为出参传入,而函数内由不再分配内存。 + +### 建议5.3 设计函数的参数时,统一按输入、输出、出入的顺序定义参数。 -### 建议5.3 使用强类型参数,避免使用void\* +函数参数的定义统一按输入参数、输出参数、出入参的顺序进行定义。 + +### 规则5.3 设计函数的资源时,涉及内存、锁、队列等资源分配的,需要同时提供释放函数。 + +本着资源从那儿申请,向那儿释放的原则。如果函数申请了内存、锁、队列等资源,则模块需要同时提供资源的函数。 + +### 建议5.4 使用强类型参数,避免使用void\* 尽管不同的语言对待强类型和弱类型有自己的观点,但是一般认为c/c++是强类型语言,既然我们使用的语言是强类型的,就应该保持这样的风格。 好处是尽量让编译器在编译阶段就检查出类型不匹配的问题。 @@ -1338,8 +1366,7 @@ void FooListAddNode(FooNode *foo) 例外:某些通用泛型接口,需要传入不同类型指针的,可以用 `void *` 入参。 - -### 建议5.4 模块内部函数参数的合法性检查,由调用者负责 +### 建议5.5 模块内部函数参数的合法性检查,由调用者负责 对于模块外部传入的参数,必须进行合法性检查,保护程序免遭非法输入数据的破坏。 模块内部函数调用,缺省由调用者负责保证参数的合法性,如果都由被调用者来检查参数合法性,可能会出现同一个参数,被检查多次,产生冗余代码,很不简洁。 diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-cpp-secure-coding-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-cpp-secure-coding-guide.md index 313a9bee3dd6d791dff37d7d6ca905cac9e9bf25..e39bf4bc4647835a79510882461b863b601c77fe 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-cpp-secure-coding-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-c-cpp-secure-coding-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-c-cpp-secure-coding-guide.md -permalink: /pages/extra/e35557/ +title: OpenHarmony-c-cpp-secure-coding-guide +permalink: /pages/extra/c441f3/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # OpenHarmony C&C++ 安全编程指南 diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-cpp-coding-style-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-cpp-coding-style-guide.md index 667ebd122fd072c4a1bc1595a500d0995469224e..062728a19f2645428c2f445d8c90ef59fadd02bb 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-cpp-coding-style-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-cpp-coding-style-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-cpp-coding-style-guide.md -permalink: /pages/extra/350529/ +title: OpenHarmony-cpp-coding-style-guide +permalink: /pages/extra/fe3631/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # C++语言编程规范 @@ -28,7 +28,7 @@ date: 2021-12-30 12:57:47 2. C++语言的模块化设计,如何设计头文件,类,接口和函数。 3. C++语言相关特性的优秀实践,比如常量,类型转换,资源管理,模板等。 4. 现代C++语言的优秀实践,包括C++11/14/17中可以提高代码可维护性,提高代码可靠性的相关约定。 - +5. 本规范优先适于用C++17版本。 ## 约定 **规则**:编程时必须遵守的约定(must) @@ -66,7 +66,7 @@ __驼峰风格(CamelCase)__ 上表中__变量__是指除常量定义以外的其他变量,均使用小驼峰风格。 ## 文件命名 -### 建议2.2.1 C++文件以.cpp结尾,头文件以.h结尾 +### 规则2.2.1 C++文件以.cpp结尾,头文件以.h结尾 我们推荐使用.h作为头文件的后缀,这样头文件可以直接兼容C和C++。 我们推荐使用.cpp作为实现文件的后缀,这样可以直接区分C++代码,而不是C代码。 @@ -79,7 +79,7 @@ __驼峰风格(CamelCase)__ 但是对于本文档,我们默认使用.h和.cpp作为后缀。 -### 建议2.2.2 C++文件名和类名保持一致 +### 规则2.2.2 C++文件名和类名保持一致 C++的头文件和cpp文件名和类名保持一致,使用下划线小写风格。 如果有一个类叫DatabaseConnection,那么对应的文件名: @@ -212,7 +212,7 @@ namespace Utils { ## 行宽 -### 建议3.1.1 行宽不超过 120 个字符 +### 规则3.1.1 行宽不超过 120 个字符 建议每行字符数不要超过 120 个。如果超过120个字符,请选择合理的方式进行换行。 例外: @@ -519,6 +519,41 @@ int&p = i; // Bad ### 规则3.13.1 编译预处理的"#"统一放在行首,嵌套编译预处理语句时,"#"可以进行缩进 编译预处理的"#"统一放在行首,即使编译预处理的代码是嵌入在函数体中的,"#"也应该放在行首。 +### 规则3.13.2 避免使用宏 +宏会忽略作用域,类型系统以及各种规则,容易引发问题。应尽量避免使用宏定义,如果必须使用宏,要保证证宏名的唯一性。 +在C++中,有许多方式来避免使用宏: +- 用const或enum定义易于理解的常量 +- 用namespace避免名字冲突 +- 用inline函数避免函数调用的开销 +- 用template函数来处理多种类型 +在文件头保护宏、条件编译、日志记录等必要场景中可以使用宏。 + +### 规则3.13.3 禁止使用宏来表示常量 +宏是简单的文本替换,在预处理阶段完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名; 宏没有类型检查,不宏全; 宏没有作用域。 + +### 规则3.13.4 禁止使用函数式宏 +宏义函数式宏前,应考虑能否用函数替代。对于可替代场景,建议用函数替代宏。 +函数式宏的缺点如下: +- 函数式宏缺乏类型检查,不如函数调用检查严格 +- 宏展开时宏参数不求值,可能会产生非预期结果 +- 宏没有独产的作用域 +- 宏的技巧性太强,例如#的用法和无处不在的括号,影响可读性 +- 在特定场景中必须用编译器对宏的扩展语法,如GCC的statement expression,影响可移植性 +- 宏在预编译阶段展开后,在期后编译、链接和调试时都不可见;而且包含多行的宏会展开为一行。函数式宏难以调试、难以打断点,不利于定位问题 +- 对于包含大量语句的宏,在每个调用点都要展开。如果调用点很多,会造成代码空间的膨胀 + +函数没有宏的上述缺点。但是,函数相比宏,最大的劣势是执行效率不高(增加函数调用的开销和编译器优化的难度)。 +为此,可以在必要时使用内联函数。内联函数跟宏类似,也是在调用点展开。不同之处在于内联函数是在编译时展开。 + +内联函数兼具函数和宏的优点: +- 内联函数执行严格的类型检查 +- 内联函数的参数求值只会进行一次 +- 内联函数就地展开,没有函数调用的开销 +- 内联函数比函数优化得更好 +对于性能要求高的产品代码,可以考虑用内联函数代替函数。 + +例外: +在日志记录场景中,需要通过函数式宏保持调用点的文件名(__FILE__)、行号(__LINE__)等信息。 ## 空格和空行 ### 规则3.14.1 水平空格应该突出关键字和重要信息,避免不必要的留白 @@ -565,10 +600,10 @@ x = r->y; // Good:通过->访问成员变量时不加空格 操作符: ```cpp -x = 0; // Good:赋值操作的=前后都要加空格 -x = -5; // Good:负数的符号和数值之前不要加空格 -++x; // Good:前置和后置的++/--和变量之间不要加空格 -x--; +x = 0; // Good:赋值操作的=前后都要加空格 +x = -5; // Good:负数的符号和数值之前不要加空格 +++x; // Good:前置和后置的++/--和变量之间不要加空格 +x--; if (x && !y) // Good:布尔操作符前后要加上空格,!操作和变量之间不要空格 v = w * x + y / z; // Good:二元操作符前后要加空格 @@ -793,7 +828,11 @@ MyClass::MyClass(int var) */ ## 函数头注释 -### 规则4.3.1 禁止空有格式的函数头注释 +### 规则4.3.1 公有(public)函数必须编写函数头注释 +公有函数属于类对外提供的接口,调用者需要了解函数的功能、参数的取值范围、返回的结果、注意事项等信息才能正常使用。 +特别是参数的取值范围、返回的结果、注意事项等都无法做到自注示,需要编写函数头注释辅助说明。 + +### 规则4.3.2 禁止空有格式的函数头注释 并不是所有的函数都需要函数头注释; 函数签名无法表达的信息,加函数头注释辅助说明; @@ -1388,7 +1427,30 @@ private: Foo& operator=(const Foo&); }; ``` -2. 使用C++11提供的delete, 请参见后面现代C++的相关章节。 +2. 使用C++11提供的delete, 请参见后面现代C++的相关章节。 + + +3. 推荐继承NoCopyable、NoMovable,禁止使用DISALLOW_COPY_AND_MOVE,DISALLOW_COPY,DISALLOW_MOVE等宏。 +```cpp +class Foo : public NoCopyable, public NoMovable { +}; +``` +NoCopyable和NoMovable的实现: +```cpp +class NoCopyable { +public: + NoCopyable() = default; + NoCopyable(const NoCopyable&) = delete; + NoCopyable& operator = (NoCopyable&) = delete; +}; + +class NoMovable { +public: + NoMovable() = default; + NoMovable(NoMovable&&) noexcept = delete; + NoMovable& operator = (NoMovable&&) noexcept = delete; +}; +``` ### 规则7.1.4 拷贝构造和拷贝赋值操作符应该是成对出现或者禁止 拷贝构造函数和拷贝赋值操作符都是具有拷贝语义的,应该同时出现或者禁止。 @@ -1475,10 +1537,40 @@ public: 会先执行Sub的构造函数,但首先调用Base的构造函数,由于Base的构造函数调用虚函数Log,此时Log还是基类的版本,只有基类构造完成后,才会完成派生类的构造,从而导致未实现多态的行为。 同样的道理也适用于析构函数。 +### 规则7.1.7 多态基类中的拷贝构造函数、拷贝赋值操作符、移动构造函数、移动赋值操作符必须为非public函数或者为delete函数 +如果报一个派生类对象直接赋值给基类对象,会发生切片,只拷贝或者移动了基类部分,损害了多态行为。 +【反例】 +如下代码中,基类没有定义拷贝构造函数或拷贝赋值操作符,编译器会自动生成这两个特殊成员函数, +如果派生类对象赋值给基类对象时就发生切片。可以将此例中的拷贝构造函数和拷贝赋值操作符声明为delete,编译器可检查出此类赋值行为。 +```cpp +class Base { +public: + Base() = default; + virtual ~Base() = default; + ... + virtual void Fun() { std::cout << "Base" << std::endl;} +}; + +class Derived : public Base { + ... + void Fun() override { std::cout << "Derived" << std::endl; } +}; + +void Foo(const Base &base) +{ + Base other = base; // 不符合:发生切片 + other.Fun(); // 调用的时Base类的Fun函数 +} +``` +```cpp +Derived d; +Foo(d); // 传入的是派生类对象 +``` +1. 将拷贝构造函数或者赋值操作符设置为private,并且不实现: ## 继承 -### 规则7.2.1 基类的析构函数应该声明为virtual +### 规则7.2.1 基类的析构函数应该声明为virtual,不准备被继承的类需要声明为final 说明:只有基类析构函数是virtual,通过多态调用的时候才能保证派生类的析构函数被调用。 示例:基类的析构函数没有声明为virtual导致了内存泄漏。 @@ -1537,7 +1629,8 @@ int main(int argc, char* args[]) } ``` 由于基类Base的析构函数没有声明为virtual,当对象被销毁时,只会调用基类的析构函数,不会调用派生类Sub的析构函数,导致内存泄漏。 - +例外: +NoCopyable、NoMovable这种没有任何行为,仅仅用来做标识符的类,可以不定义虚析构也不定义final。 ### 规则7.2.2 禁止虚函数使用缺省参数值 说明:在C++中,虚函数是动态绑定的,但函数的缺省参数却是在编译时就静态绑定的。这意味着你最终执行的函数是一个定义在派生类,但使用了基类中的缺省参数值的虚函数。为了避免虚函数重载时,因参数声明不一致给使用者带来的困惑和由此导致的问题,规定所有虚函数均不允许声明缺省参数值。 @@ -2290,19 +2383,24 @@ a2.push_back(Foo2()); // 触发容器扩张,搬移已有元素时调用move c **注意** 默认构造函数、析构函数、`swap`函数,`move操作符`都不应该抛出异常。 -## 模板 +## 模板与泛型编程 -模板能够实现非常灵活简洁的类型安全的接口,实现类型不同但是行为相同的代码复用。 +### 规则9.8.1 禁止在OpenHarmony项目中进行泛型编程 +泛型编程和面向对象编程的思想、理念以及技巧完全不同,OpenHarmony项目主流使用面向对象的思想。 -模板编程的缺点: +C++提供了强大的泛型编程的机制,能够实现非常灵活简洁的类型安全的接口,实现类型不同但是行为相同的代码复用。 -1. 模板编程所使用的技巧对于使用c++不是很熟练的人是比较晦涩难懂的。在复杂的地方使用模板的代码让人更不容易读懂,并且debug 和维护起来都很麻烦。 -2. 模板编程经常会导致编译出错的信息非常不友好: 在代码出错的时候, 即使这个接口非常的简单, 模板内部复杂的实现细节也会在出错信息显示. 导致这个编译出错信息看起来非常难以理解。 -3. 模板如果使用不当,会导致运行时代码过度膨胀。 -4. 模板代码难以修改和重构。模板的代码会在很多上下文里面扩展开来, 所以很难确认重构对所有的这些展开的代码有用。 +但是C++泛型编程存在以下缺点: -所以, 建议__模板编程最好只用在少量的基础组件,基础数据结构上面__。并且使用模板编程的时候尽可能把__复杂度最小化__,尽量__不要让模板对外暴露__。最好只在实现里面使用模板, 然后给用户暴露的接口里面并不使用模板, 这样能提高你的接口的可读性。 并且你应该在这些使用模板的代码上写尽可能详细的注释。 +1. 对泛型编程不很熟练的人,常常会将面向对象的逻辑写成模板、将不依赖模板参数的成员写在模板中等等导致逻辑混乱代码膨胀诸多问题。 +2. 模板编程所使用的技巧对于使用c++不是很熟练的人是比较晦涩难懂的。在复杂的地方使用模板的代码让人更不容易读懂,并且debug 和维护起来都很麻烦。 +3. 模板编程经常会导致编译出错的信息非常不友好: 在代码出错的时候, 即使这个接口非常的简单, 模板内部复杂的实现细节也会在出错信息显示. 导致这个编译出错信息看起来非常难以理解。 +4. 模板如果使用不当,会导致运行时代码过度膨胀。 +5. 模板代码难以修改和重构。模板的代码会在很多上下文里面扩展开来, 所以很难确认重构对所有的这些展开的代码有用。 +所以,OpenHarmony大部分部件禁止模板编程,仅有 __少数部件__ 可以使用泛型编程,并且开发的模板要有详细的注释。 +例外: +1. stl适配层可以使用模板 ## 宏 在C++语言中,我们强烈建议尽可能少使用复杂的宏 @@ -2566,34 +2664,55 @@ void func() ``` ## 智能指针 -### 规则10.2.1 优先使用智能指针而不是原始指针管理资源 +### 规则10.2.1 单例、类的成员等所有机不会被多方持有的优先使用原始指针源而不是智能指针 **理由** -避免资源泄露。 +智能指针会自动释放对象资源避免资源泄露,但会带额外的资源开销。如:智能指针自动生成的类、构造和析构的开销、内存占用多等。 + +单例、类的成员等对象的所有权不会被多方持有的情况,仅在类析构中释放资源即可。不应该使用智能指针而增额外的开销。 **示例** ```cpp -void Use(int i) -{ - auto p = new int {7}; // 不好: 通过 new 初始化局部指针 - auto q = std::make_unique(9); // 好: 保证释放内存 - if (i > 0) { - return; // 可能 return,导致内存泄露 +class Foo; +class Base { +public: + Base() {} + virtual ~Base() + { + delete foo_; } - delete p; // 太晚了 -} +private: + Foo* foo_ = nullptr; +}; ``` **例外** -在性能敏感、兼容性等场景可以使用原始指针。 +1. 返回创建的对象时,需要指针销毁函数的可以使用智能指针。 +```cpp +class User; +class Foo { +public: + std::unique_ptr CreateUniqueUser() // 可使用unique_ptr保证对象的创建和释放在同一runtime + { + sptr ipcUser = iface_cast(remoter); + return std::unique_ptr(::new User(ipcUser), [](User *user) { + user->Close(); + ::delete user; + }); + } -### 规则10.2.2 优先使用`unique_ptr`而不是`shared_ptr` -**理由** -1. `shared_ptr`引用计数的原子操作存在可测量的开销,大量使用`shared_ptr`影响性能。 -2. 共享所有权在某些情况(如循环依赖)可能导致对象永远得不到释放。 -3. 相比于谨慎设计所有权,共享所有权是一种诱人的替代方案,但它可能使系统变得混乱。 + std::shared_ptr CreateSharedUser() // 可使用shared_ptr保证对象的创建和释放在同一runtime中 + { + sptr ipcUser = iface_cast(remoter); + return std::shared_ptr(ipcUser.GetRefPtr(), [ipcUser](User *user) mutable { + ipcUser = nullptr; + }); + } +}; +``` +2. 返回创建的对象且对象需要被多方引用时,可以使用shared_ptr。 -### 规则10.2.3 使用`std::make_unique`而不是`new`创建`unique_ptr` +### 规则10.2.2 使用`std::make_unique`而不是`new`创建`unique_ptr` **理由** 1. `make_unique`提供了更简洁的创建方式 2. 保证了复杂表达式的异常安全 diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..92243ebd9f25ce9555e3fab411489f114764daab --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md @@ -0,0 +1,648 @@ +--- +title: OpenHarmony-hdf-coding-guide +permalink: /pages/extra/94914e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# OpenHarmony HDF驱动编程规范 + +## 前言 + +### 目的 + +OpenHarmony的目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。具有“硬件互助,资源共享”、“一次开发,多端部署”、“统一OS,弹性部署”的技术特性。 + +HDF(Hardware Driver Foundation)驱动框架,为开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的驱动架构平台,为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。 + +因此,对基于HDF实现的OpenHarmony驱动代码需要有一定的编程规约,以满足驱动代码的“一次开发,多端部署”技术特性。本文以此为初衷,结合OpenHarmony和HDF的特点,拟定了相关编程规约,用于指导驱动代码的开发编码,提升代码的规范性及可移植性,供开发者参考。 + +## 编程规范 + +### 总则 + +#### 【规则】OpenHarmony的驱动程序,应当使用HDF框架提供的能力实现 + +【说明】HDF驱动框架提供了驱动加载、驱动服务管理和驱动消息机制,同时还提供了操作系统抽象层(OSAL, Operating System Abstract Layer)和平台抽象层(PAL, Platform Abstract Layer)来保证驱动程序的跨系统跨平台部署的特性。除此之外,HDF提供了驱动模型的抽象、公共工具、外围器件框架等能力。开发者应该基于HDF提供的这些能力开发驱动,从而保证驱动程序可以在各种形态的OpenHarmony上进行部署。 + +#### 【规则】开发者应当遵循此规范要求,开发能够同时满足内核态和用户态的驱动 + +【说明】内核态驱动与用户态驱动天然存在着差异,两种形态适用的场景也不尽相同。开发者在业务设计和开发的时候应当遵循此规范,使用HDF提供的OSAL、PAL等特性来屏蔽形态的差异,来保证开发的驱动同时满足内核态和用户态。 + +#### 【建议】使用HDF框架时,编译脚本应当包含drivers/framework/include目录,而不是子模块目录 + +【说明】drivers/framework/include目录是HDF对外暴露的头文件根目录,此目录下面按照功能划分为核心框架、OSAL和PAL等多个子模块目录。在使用对应头文件时,建议编译脚本包含到drivers/framework/include目录,这样在代码中进行引用时,可以避免重复包含,也便于区分对应子模块,达到驱动范围内的统一。 + +【样例】 + +```gn +config("xxxx_private_config") { + include_dirs = [ + "//drivers/framework/include", + "//drivers/framework/include/core", # 不建议 + ] +} +``` + +```c +#include +#include // 不建议 +``` + +### HDF核心框架 + +#### 【规则】应当按照驱动入口对象HdfDriverEntry中的职责定义来实现Bind、Init和Release方法,避免职责不单一引入问题 + +【说明】HdfDriverEntry对象是HDF驱动的入口,其中的三个方法指针均有各自的职责,开发者需按照方法职责来实现对应函数。 + +```c +struct HdfDriverEntry g_sampleDriverEntry = { + .moduleVersion = 1, + .moduleName = "sample_driver", + .Bind = SampleDriverBind, // 职责:绑定驱动对外提供的服务接口到HDF + .Init = SampleDriverInit, // 职责:初始化驱动自身的业务 + .Release = SampleDriverRelease, // 职责:释放驱动资源,发生异常时也会调用 +}; + +HDF_INIT(g_sampleDriverEntry); +``` + +#### 【规则】驱动服务的结构定义,首个成员必须是IDeviceIoService类型 + +【说明】HDF框架内部实现约束,驱动定义的服务接口,首个成员必须是IDeviceIoService类型。 + +【样例】 + +```c +struct ISampleDriverService { + struct IDeviceIoService ioService; // 首个成员必须是IDeviceIoService类型 + int32_t (*FunctionA)(void); // 驱动的第一个服务接口 + int32_t (*FunctionB)(uint32_t inputCode); // 驱动的第二个服务接口,可以依次往下累加 +}; +``` + +【样例】 + +```c +struct ISampleDriverService { + struct IDeviceIoService ioService; // 首个成员必须是IDeviceIoService类型 + void *instance; // 也可以封装服务实例,在实例中提供服务接口 +}; +``` + +#### 【规则】在HdfDriverEntry的Bind方法中,必须完成全部驱动服务接口的绑定,禁止将服务接口未定义或定义为空 + +【说明】驱动定义的服务接口,均是对外暴露的,如果未定义或定义为空,可能会导致外部调用时产生异常,从而降低驱动的可靠性。 + +【样例】 + +```c +int32_t SampleDriverBind(struct HdfDeviceObject *deviceObject) +{ + static struct ISampleDriverService sampleDriver = { + .FunctionA = SampleDriverServiceA, + .FunctionB = NULL, // 禁止定义为空 + }; + // 将ioService与HDF创建的设备对象进行绑定 + deviceObject->service = &sampleDriver.ioService; + return HDF_SUCCESS; +} +``` + +#### 【建议】在HdfDriverEntry的Init方法中,应当调用HdfDeviceSetClass接口,对驱动的类型进行定义 + +【说明】驱动的类型可以用于归类当前设备的驱动程序,也可以用来查询当前设备的驱动能力。为了便于后续驱动的统一管理,建议通过HdfDeviceSetClass接口来设置当前驱动的类型。 + +【样例】 + +```c +int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject) +{ + // 设置驱动的类型为DISPLAY + if (!HdfDeviceSetClass(deviceObject, DEVICE_CLASS_DISPLAY)) { + HDF_LOGE("HdfDeviceSetClass failed"); + return HDF_FAILURE; + } + return HDF_SUCCESS; +} +``` + +### HCS配置规范 + +HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。 + +驱动配置包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息。 + +**设备描述信息** + +HDF框架加载驱动所需要的信息来源于HDF框架定义的驱动设备描述,因此基于HDF框架开发的驱动必须要在HDF框架定义的device_info.hcs配置文件中添加对应的设备描述。 + +#### 【规则】在进行驱动设备配置之前,应当明确驱动所属的硬件和部署形态,规划需要配置的目录和文件 + +【说明】在OpenHarmony源码的vendor目录下,按照芯片厂商、开发板、配置的目录进行规划,HDF驱动的配置位于hdf_config目录下。根据硬件规格,此hdf_config目录下存放内核态配置信息或者分别内核态和用户态的配置信息。开发者应当根据驱动所属的硬件和部署形态,确定在哪一个目录下进行配置。 + +【样例】 + +```bash +$openharmony_src_root/vendor/hisilicon/hispark_taurus/hdf_config # 内核态配置文件目录,无用户态 + +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/khdf # 内核态配置文件目录 +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/uhdf # 用户态配置文件目录 +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/khdf/device_info/device_info.hcs # 内核态驱动设备描述配置文件 +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/khdf/lcd/lcd_config.hcs # 内核态驱动私有配置文件 +``` + +#### 【规则】驱动设备在配置时,应当充分使用已有的配置信息,继承已有的配置模板 + +【说明】在HDF框架定义的device_info.hcs配置文件中,已经配置好了host、device和deviceNode的模板,开发者在配置驱动设备时,应该充分利用已有配置信息和HCS的继承特性,减少重复的配置工作量。 + +【样例】 + +``` +root { + device_info { + match_attr = "hdf_manager"; + template host { // host模板 + hostName = ""; + priority = 100; // host启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证host的加载顺序 + template device { // device模板 + template deviceNode { // deviceNode模板 + policy = 0; // policy字段是驱动服务发布的策略 + priority = 100; // 驱动启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证device的加载顺序 + preload = 0; // 驱动按需加载字段 + permission = 0664; // 驱动创建设备节点权限 + moduleName = ""; + serviceName = ""; + deviceMatchAttr = ""; + } + } + } + // 继承模板的节点如果使用模板中的默认值,则节点字段可以缺省 + sample_host :: host { // sample_host继承了host模板 + hostName = "host0"; // host名称,host节点是用来存放某一类驱动的容器 + device_sample :: device { // device_sample继承了device模板 + device0 :: deviceNode { // device0继承了deviceNode模板 + policy = 1; // 覆写了模板中的policy值 + moduleName = "sample_driver"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 + serviceName = "sample_service"; // 驱动对外发布服务的名称,必须唯一 + deviceMatchAttr = "sample_config"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等 + } + } + } + } +} +``` + +#### 【规则】驱动模型的设计和归类应当满足业务需要和既定类型,禁止重复配置Host和Device + +【说明】HDF框架将一类设备驱动放在同一个Host里面,开发者也可以将Host中的驱动功能分层独立开发和部署,支持一个驱动多个Node,HDF驱动模型如下图所示: + +![HDF驱动模型.png](/images/device-dev/driver/figures/HDF驱动模型.png) + +开发者应当将同一类的设备放在同一个Host里面,在新增设备时,检查是否已经存在同类型的Host。如果已存在Host,则将Device配置在此Host中,禁止重复配置Host。一个驱动设备应该只属于一类驱动类型,因此也禁止将同一个Device配置在不同Host当中。 + +#### 【规则】驱动服务必须按照业务规则设置对外发布的策略,禁止设置不必要的发布策略 + +【说明】驱动服务是HDF驱动设备对外提供能力的对象,由HDF框架统一管理。HDF框架定义了驱动对外发布服务的策略,是由配置文件中的policy字段来控制,policy字段的取值范围以及含义如下: + +```c +typedef enum { + /* 驱动不提供服务 */ + SERVICE_POLICY_NONE = 0, + /* 驱动对内核态发布服务 */ + SERVICE_POLICY_PUBLIC = 1, + /* 驱动对内核态和用户态都发布服务 */ + SERVICE_POLICY_CAPACITY = 2, + /* 驱动服务不对外发布服务,但可以被订阅 */ + SERVICE_POLICY_FRIENDLY = 3, + /* 驱动私有服务不对外发布服务,也不能被订阅 */ + SERVICE_POLICY_PRIVATE = 4, + /* 错误的服务策略 */ + SERVICE_POLICY_INVALID +} ServicePolicy; +``` + +因此,驱动服务应该按照业务规则来设置发布策略,禁止设置不必要的发布策略,如内核态驱动设置用户态的发布策略。 + +【样例】 + +``` +root { + device_info { + sample_host { + sample_device { + device0 { + policy = 1; // 驱动对内核态发布服务 + ... + } + } + } + } +} +``` + +#### 【规则】驱动创建设备节点权限必须与驱动的发布规则互相匹配 + +【说明】在HDF框架定义的device_info.hcs配置文件中,permission为驱动创建的设备节点权限字段。该字段的取值使用Unix文件权限的八进制数字模式来表示,长度为4位,例如0644。permission字段仅在驱动服务对用户态发布服务时(即policy = 2)才会生效。 + +开发者应当保证驱动服务的发布策略与设备节点的权限互相匹配,否则可能会导致驱动服务无法访问或设备节点的权限被放大。 + +【样例】 + +``` +root { + device_info { + sample_host { + sample_device { + device0 { + policy = 2; // 驱动对内核态和用户态都发布服务 + permission = 0640; // 建议值 + ... + } + } + } + } +} +``` + +【反例】 + +``` +root { + device_info { + sample_host { + sample_device { + device0 { + policy = 2; // 驱动对内核态和用户态都发布服务 + permission = 0777; // 权限过大 + ... + } + } + } + } +} +``` + +【反例】 + +``` +root { + device_info { + sample_host { + sample_device { + device0 { + policy = 1; // 驱动对内核态发布服务,不会创建设备节点 + permission = 0640; // 冗余配置 + ... + } + } + } + } +} +``` + +#### 【规则】应当根据业务要求配置是否按需加载 + +【说明】在HDF框架定义的device_info.hcs配置文件中,preload为驱动按需加载字段,取值的范围见如下枚举: + +```c +typedef enum { + /* 系统启动时默认加载 */ + DEVICE_PRELOAD_ENABLE = 0, + /* 当系统支持快启时,则在快启完成后再加载;如果系统不支持快启,与DEVICE_PRELOAD_ENABLE含义相同 */ + DEVICE_PRELOAD_ENABLE_STEP2, + /* 系统启动时默认不加载,当使用时HDF框架会尝试动态加载 */ + DEVICE_PRELOAD_DISABLE, + /* 无效值 */ + DEVICE_PRELOAD_INVALID +} DevicePreload; +``` + +开发者应当根据驱动的业务要求,将preload字段配置为相应的值,从而HDF框架可以按照preload规则进行驱动的加载。 + +【样例】 + +``` +root { + device_info { + sample_host { + sample_device { + device0 { + preload = 2; // 使用时按需加载 + ... + } + } + } + } +} +``` + +#### 【建议】当preload字段配置为默认加载时,应当根据业务要求配置按序加载的优先级 + +【说明】在HDF框架定义的device_info.hcs配置文件中,priority字段(取值范围为整数0到200)是用来表示Host和驱动的优先级。不同的Host内的驱动,Host的priority值越小,驱动加载优先级越高;同一个Host内驱动的priority值越小,加载优先级越高。priority字段的默认值为100,当未配置或字段值相同时,HDF框架将不保证驱动的加载顺序。开发者应当根据业务场景的要求,配置preority字段,保证各个驱动的启动顺序。 + +【样例】 + +``` +root { + device_info { + sample_host0 { + priority = 100; + sample_device { + device0 { + preload = 0; // 默认加载 + priority = 100; // HDF保证在device1之前加载 + ... + } + device1 { + preload = 0; // 默认加载 + priority = 200; // HDF保证在device0之后加载 + ... + } + } + } + sample_host1 { + priority = 100; // 由于与sample_host0的优先级相同,HDF将不保证加载顺序 + ... + } + } +} +``` + +**驱动私有配置信息** + +如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject中的property里面,通过Bind和Init传递给驱动。 + +#### 【规则】驱动私有配置文件应当按照器件类型或者模块进行目录划分,并放置在相应的目录下 + +【说明】开发者应当对驱动的私有配置文件进行合理的目录规划,禁止将私有配置文件放置在配置的根目录下。 + +【样例】 + +```bash +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/khdf/sample/sample_config.hcs # 正确,将私有配置文件放置在了sample目录下 + +$openharmony_src_root/vendor/hisilicon/Hi3516DV300/hdf_config/khdf/sample_config.hcs # 错误,将私有配置文件放置在了配置根目录下 +``` + +#### 【规则】应当将驱动私有配置文件包含到hdf_config配置目录下的hdf.hcs文件中 + +【说明】hdf.hcs文件是配置信息的汇总文件,在HDF编译和运行时,将会解析此文件中的内容,加载驱动的私有配置信息到驱动的设备节点中。开发者应当保证hdf.hcs文件中包含了驱动的私有配置文件,从而保证驱动能够正确初始化。 + +【样例】 + +```c +#include "device_info/device_info.hcs" +#include "sample/sample_config.hcs" // 包含驱动私有配置文件 + +root { + module = "hisilicon,hi35xx_chip"; +} +``` + +#### 【规则】驱动私有配置信息中的matchAttr字段值,必须与device_info.hcs中配置的deviceMatchAttr字段值一致 + +【说明】HDF框架会通过match_attr字段的值,来与驱动设备进行关联。如果配置错误,将导致私有配置信息无法获取。 + +【样例】 + +``` +root { + sample_config { + ... + match_attr = "sample_config"; // 该字段的值必须和device_info.hcs中的deviceMatchAttr值一致 + } +} +``` + +#### 【规则】驱动私有配置信息中的字段名,使用下划线命名法 + +【说明】由于C/C++语言编程指导的命名规则要求,驱动的私有配置信息中的字段名,应当使用下划线命名法。这样,在实现代码中对私有配置数据结构进行定义时,可以满足命名规则,也便于代码和配置文件的统一管理。 + +【样例】 + +``` +root { + sample_config { + sample_version = 1; // 使用下划线命名 + sample_bus = "I2C_0"; + match_attr = "sample_config"; + } +} +``` + +### HCS宏 + +驱动的私有配置信息会被加载到HdfDeviceObject中的property中,因此会占用一定的内存空间,这在轻量和小型系统中带来的缺点尤为明显。为了减少私有配置信息的内存占用,HDF框架提供了HCS宏,来解析驱动的私有配置信息。 + +#### 【规则】在内存敏感或跨系统类型的驱动场景下,应当使用HCS宏来解析驱动的私有配置信息 + +【说明】开发者应当明确驱动的使用场景,如果对内存敏感或者需要跨轻量、小型和标准系统使用,应当使用HCS宏来解析驱动的私有配置信息,从而保证驱动的性能和可移植性。 + +【样例】 + +```c +#include + +#define SAMPLE_CONFIG_NODE HCS_NODE(HCS_ROOT, sample_config) + +ASSERT_EQ(HCS_PROP(SAMPLE_CONFIG_NODE, sampleVersion), 1); +ASSERT_EQ(HCS_PROP(SAMPLE_CONFIG_NODE, sample_bus), "I2C_0"); +ASSERT_EQ(HCS_PROP(SAMPLE_CONFIG_NODE, match_attr), "sample_config"); +``` + +### HDF工具 + +#### 【规则】在使用HdfSbuf进行数据通信时,应当明确通信的场景,并根据相应场景确定创建的HdfSbuf类型 + +【说明】HdfSbuf是HDF进行数据传输时的数据结构,此结构根据通信的场景区分为不同的类型,定义在hdf_sbuf.h头文件的枚举中: + +```c +enum HdfSbufType { + SBUF_RAW = 0, /* SBUF used for communication between the user space and the kernel space */ + SBUF_IPC, /* SBUF used for inter-process communication (IPC) */ + SBUF_IPC_HW, /* Reserved for extension */ + SBUF_TYPE_MAX, /* Maximum value of the SBUF type */ +}; +``` + +开发者在进行数据通信时,应当明确是跨用户态和内核态通信场景,还是用户态的进程间通信,从而创建相应的HdfSbuf。 + +【样例】 + +```c +void SampleDispatchBetweenUserAndKernel() +{ + int32_t ret; + /* 跨用户态和内核态进行通信的场景 */ + struct HdfSBuf *data = HdfSBufTypedObtain(SBUF_RAW); + ... + ret = sample->dispatcher->Dispatch(&sample->object, CMD_SAMPLE_DISPATCH, data, NULL); + ... + HdfSBufRecycle(data); +} +``` + +【样例】 + +```c++ +void SampleDispatchIpc() +{ + /* 跨进程进行通信的场景 */ + struct HdfSBuf *data = HdfSBufTypedObtain(SBUF_IPC); + ... + int ret = sample->dispatcher->Dispatch(sample, CMD_SAMPLE_DISPATCH, data, nullptr); + ... + HdfSBufRecycle(data); +} +``` + +#### 【规则】在使用HDF的日志打印时,应当明确定义HDF_LOG_TAG日志打印的标签 + +【说明】HDF框架提供了一套日志打印工具hdf_log.h,开发者可以直接使用HDF的日志打印进行驱动运行日志的输出。HDF_LOG_TAG宏的作用是定义日志打印的标签,开发者必须在打印日志前进行定义。 + +【样例】 + +```c +#include + +#define HDF_LOG_TAG sample_driver // 定义日志的标签 + +int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject) +{ + HDF_LOGI("sample driver is initialized"); // 使用HDF日志工具打印日志 + return HDF_SUCCESS; +} +``` + +#### 【规则】应当对HDF框架方法的返回值进行有效判断,并使用HDF提供的错误码 + +【说明】HDF框架提供的方法有明确的错误码返回值,开发者在使用时应当进行判断,而不是选择忽略。对应的返回值为hdf_base.h头文件中的错误码,开发者在使用HDF或实现自定义方法时,应当统一使用HDF提供的错误码。 + +【样例】 + +```c +int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject) +{ + int32_t ret; + // 判断设备类型设置是否成功 + if (!HdfDeviceSetClass(deviceObject, DEVICE_CLASS_DISPLAY)) { + HDF_LOGE("HdfDeviceSetClass failed"); + return HDF_FAILURE; + } + ret = InitDiver(); + // 自定义方法使用HDF的错误码 + if (ret != HDF_SUCCESS) { + HDF_LOGE("init drvier is failed"); + return ret; + } + return HDF_SUCCESS; +} +``` + +### OSAL框架 + +HDF OSAL框架屏蔽了OpenHarmony各个系统类型之间的接口差异,对外提供统一的OS接口,包括内存管理、线程、互斥体、自旋锁、信号量、定时器、文件、中断、时间、原子、固件、I/O操作模块。 + +#### 【规则】跨轻量、小型和标准系统类型的驱动,必须通过OSAL框架来使用操作系统接口 + +【说明】OSAL屏蔽了OS接口之间的差异,开发者应当基于OSAL来操作OS的接口,保证驱动能够跨系统类型运行。 + +【样例】 + +```c +#include +#include + +struct DevHandle *SampleInit(void) +{ + struct DevHandle *handle = (struct DevHandle *)OsalMemCalloc(sizeof(struct DevHandle)); + if (handle == NULL) { + HDF_LOGE("OsalMemCalloc handle failed"); + return NULL; + } + return handle; +} +``` + +【样例】 + +```c +#include + +void SampleSleep(uint32_t timeMs) +{ + OsalMSleep(timeMs); +} +``` + +### PAL框架 + +HDF PAL框架对平台类驱动进行了抽象,并对外提供统一的操作接口,包括GPIO、I2C、SPI、UART、RTC、SDIO、EMMC、DSI、PWM、WATCHDOG等模块。 + +#### 【规则】跨轻量、小型和标准系统类型的驱动,必须通过PAL框架来使用平台驱动 + +【说明】PAL屏蔽了不同系统类型之间的平台驱动接口差异,开发者应当基于PAL来操作这些接口,保证驱动能够跨系统类型运行。 + +【样例】 + +```c +#include +#include +#include +#include + +static uint32_t g_irqCnt; + +/* GPIO中断服务样例函数 */ +static int32_t SampleGpioIrqHandler(uint16_t gpio, void *data) +{ + HDF_LOGE("%s: irq triggered, on gpio:%u, data=%p", __func__, gpio, data); + g_irqCnt++; // 如果中断服务函数触发执行,则将全局中断计数加1 + return GpioDisableIrq(gpio); +} + +/* GPIO样例函数 */ +static int32_t SampleGpioIrqEdge(void) +{ + int32_t ret; + uint16_t valRead; + uint16_t mode; + uint16_t gpio = 83; // 待测试的GPIO管脚号 + uint32_t timeout; + + /* 将管脚方向设置为输出 */ + ret = GpioSetDir(gpio, GPIO_DIR_OUT); + ... + /* 禁止该管脚中断 */ + ret = GpioDisableIrq(gpio); + ... + /* 为管脚设置中断服务函数,触发模式为上升沿和下降沿共同触发 */ + mode = OSAL_IRQF_TRIGGER_RISING | OSAL_IRQF_TRIGGER_FALLING; + ret = GpioSetIrq(gpio, mode, SampleGpioIrqHandler, NULL); + ... + /* 使能此管脚中断 */ + ret = GpioEnableIrq(gpio); + ... + g_irqCnt = 0; // 清除全局计数器 + timeout = 0; // 等待时间清零 + /* 等待此管脚中断服务函数触发,等待超时时间为1000毫秒 */ + while (g_irqCnt <= 0 && timeout < 1000) { + ret = GpioRead(gpio, &valRead); + ... + ret = GpioWrite(gpio, (valRead == GPIO_VAL_LOW) ? GPIO_VAL_HIGH : GPIO_VAL_LOW); + ... + OsalMDelay(200); // 等待中断触发 + timeout += 200; + } + ret = GpioUnSetIrq(gpio); + ... + return (g_irqCnt > 0) ? HDF_SUCCESS : HDF_FAILURE; +} +``` diff --git a/website/docs/_posts/zh-cn/contribute/OpenHarmony-security-design-guide.md b/website/docs/_posts/zh-cn/contribute/OpenHarmony-security-design-guide.md index 4b6934f0a3545fe6372ad829d394c265cac25e36..a9fb99fc779dcac2a38be81891bdcf64b52bf31f 100644 --- a/website/docs/_posts/zh-cn/contribute/OpenHarmony-security-design-guide.md +++ b/website/docs/_posts/zh-cn/contribute/OpenHarmony-security-design-guide.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-security-design-guide.md -permalink: /pages/extra/2cc67e/ +title: OpenHarmony-security-design-guide +permalink: /pages/extra/c86b06/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # OpenHarmony安全设计规范 diff --git a/website/docs/_posts/zh-cn/contribute/Readme-CN.md b/website/docs/_posts/zh-cn/contribute/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..2ed6208ae63f31077abf9313341fd4e77f321ffa --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/Readme-CN.md @@ -0,0 +1,25 @@ +--- +title: Readme-CN +permalink: /pages/extra/ee72c0/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 贡献指南 + +- [参与贡献](/pages/010d01) +- [行为准则](/pages/010d02) +- [贡献代码](/pages/010d03) +- [贡献流程](/pages/010d04) +- [自测试验证](/pages/01010218) +- [贡献文档](/pages/extra/20a162/) +- [写作规范](/pages/010d0501) +- [社区沟通与交流](/pages/010d06) +- [FAQ](/pages/010d07) + diff --git a/website/docs/_posts/contribute/docs-reviewers.md b/website/docs/_posts/zh-cn/contribute/docs-reviewers.md similarity index 94% rename from website/docs/_posts/contribute/docs-reviewers.md rename to website/docs/_posts/zh-cn/contribute/docs-reviewers.md index 96c2e07f5d73ad78bfc8375f959b7018e4fe08a9..775129e5a2efb1aa8e815546d21037c48f08eedd 100644 --- a/website/docs/_posts/contribute/docs-reviewers.md +++ b/website/docs/_posts/zh-cn/contribute/docs-reviewers.md @@ -1,15 +1,15 @@ --- -title: docs-reviewers.md -permalink: /pages/extra/fd9d91/ +title: docs-reviewers +permalink: /pages/extra/ca9a08/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:45 +date: 2022-02-12 09:01:58 --- # 开发者文档评审人 diff --git a/website/docs/_posts/zh-cn/contribute/template/README-template.md b/website/docs/_posts/zh-cn/contribute/template/README-template.md new file mode 100644 index 0000000000000000000000000000000000000000..a38bfd2b4da0fbf09feae64f3179c1a13f5b0b12 --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/template/README-template.md @@ -0,0 +1,165 @@ +--- +title: README-template +permalink: /pages/extra/290a46/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# xxx子系统/部件 + + +【标题说明】根据当前Readme的类型,使用 **子系统**或者 **部件**。 + + +![子系统readme](/images/contribute/template/figures/figure01.png) + + +## 简介 + + +【写作要求】 必选**,简介中包含2部分内容: **内容介绍、架构图介绍。 + +**内容介绍:**从以下几个方面介绍该子系统:出现背景(在整个OpenHarmony架构中的作用)、实现的功能、使用场景、支持的设备等。 + +**架构图:**使用架构图说明该子系统【部件】架构,对架构中的主要组成部分进行必要的解释说明 + +**如果本部件仓库只是子系统一部分,需要理解子系统相关概念,建议给出:** + +**更多XXX子系统相关概念,请参考:xxx。(给出到子系统readme的链接)** + + +写作注意事项如下: + + +| 要求项 | 内容要求 | +| -------- | -------- | +| **A.1** | **用语要求** | +| A.1.1 | 行文风格:用语正式,避免口语化。 | +| A.1.2 | 合规要求:不能使用第三方知识产权特有概念等存在合规和法务风险的词汇。 | +| A.1.3 | 内容简洁:内容采用信息必备、最小化原则,旨在指导开发者在尽量短的时间完成操作。 | +| A.1.4 | 内容正确:文档的代码、需要设置的参数等需要跟产品实际情况实时保持一致。 | +| A.1.5 | 用语准确:应当确切,不能出现多义性的描述。 | +| A.1.6 | 用语一致:同一叫法,全文保持一致,术语与术语库保持一致,正文中缩略语首次出现要给出全称。 | +| A.1.7 | 用语具体:如表示数量或程度时,避免用笼统的“多”“少”“大”,建议用具体数字表示。 | +| **A.2** | **格式要求** | +| A.2.1 | 标点符号正确、句尾有符号结尾。 | +| A.2.2 | 内容尽量用项目列表或分类的方式清晰呈现。不要有单个项目列表;不要有多余空行。 | +| A.2.3 | 英文字母和中文字之间不要有空格。 | +| A.2.4 | 链接必须有效,具体,可直接跳转或下载。Gitee内部建议使用相对链接,避免使用绝对链接。 | +| A.2.5 | 如果是内容的辅助说明,请使用“说明”式样;如果提前申明事项,请使用“须知”式样,不用“注意”格式 | +| **A.3** | **表格** | +| A.3.1 | 表格有表注,表头风格一致,采用名词或名词词组形式。 | +| A.3.2 | 表格有表头,至少为2行2列,避免出现单行或单列表。 | +| A.3.3 | 表格无内容用“_”,不出现空白的单元格。 | +| **A.4** | **图形** | +| A.4.1 | 避免涉及宗教信仰类截图。 | +| A.4.2 | 图形有图注(不可直接粘贴图形),图注风格一致,采用名词或名词词组形式。 | +| A.4.3 | 图形应清晰可辩识,信息表达完整,易于阅读。如流程图不可缺少“开始”和“结束”。 | +| A.4.4 | 图形逻辑清晰,图文配合使用,切忌图文分离。 | +| A.4.5 | 图片的高度建议在640px左右,宽度不超过820px,一般为.png格式,图片的大小建议不超过150k。 | +| A.4.6 | 图形建议尽量不要用文字,中文图用中文,英文图用英文。 | + + +架构图参考如下,注意需要绘图的 **颜色,格式有规范要求**,请参照: + +**图1** 子系统架构图 +![架构图](/images/contribute/template/figures/figure02.png) + + + +## 目录 + +【写作要求】 必选**,明确本项目仓的代码 **目录结构**以及对应目录的 **功能描述 + +```undefined +/foundation/ace +├── frameworks # 框架代码 +│ └── lite +│ ├── examples # 示例代码目录 +│ ├── include # 对外暴露头文件存放目录 +│ ├── packages # 框架JS实现存放目录 +│ ├── src # 源代码存放目录 +│ ├── targets # 各目标设备配置文件存放目录 +│ └── tools # 工具代码存放目录 +├── interfaces # 对外接口存放目录 +│ └── innerkits # 对内部子系统暴露的头文件存放目录 +│ └── builtin # JS应用框架对外暴露JS三方module API接口存放目录 +``` + + + +## 约束 + +【写作要求】 **可选**,明确项目运行的特定条件,如特定的编程语言或特定的操作系统的特定版本。 + +| 要求项 | 内容要求 | +| -------- | -------- | +| D.1.1 | 明确功能限制或操作限制。 | +| D.1.2 | 约束对指导任务开发有影响或体验有感知,否则不用体现。 | +| D.1.3 | 容易出错的操作在步骤里描述,不在此体现。 | + + +## 编译构建/使用方法 + +【写作要求】 可选,子系统Readme不需要提供,对于部件仓的Readme,根据实际情况,提供编译构建的说明。 + + +## 说明 + + +### 接口说明 + +【写作要求】 **可选**,描述本开发指导相关的接口有哪些,旨在要开发者在开发前有大体了解,提升开发效率。 **子系统readme无需提供**,仓库的readme根据需要判断是否提供,如果已经有API接口参考无需提供;写作要求见下: + +| 要求项 | 内容要求 | +| -------- | -------- | +| J.1.1 | 不在本开发任务的接口无需提供。 | +| J.1.2 | 如果接口太多,可以提供主要的接口 | + + +### 使用说明 + +【写作要求】 **可选**, *子系统Readme中偏向于概念介绍;仓Readme偏向于具体功能介绍*;如果已经提供开发指南可直接链接到对应指南,无需再写使用说明。 + +写作要求见下,完成写作后,请逐项自检。 + +| 要求项 | 内容要求 | +| -------- | -------- | +| **F.1** | **如何写好步骤** | +| F.1.1 | 步骤完整:提供必须的步骤,顺利指导完成操作,无缺失。 | +| F.1.2 | 脉络清楚:文档逻辑清晰、合理。文档前面的概述、准备、操作围绕一条线描述,不能章节断裂或前后矛盾的现象。 | +| F.1.3 | 任务句式:标题或句子尽量使用“动词+名词”的句式表述动作。 | +| F.1.4 | 预防提前:操作过程中的限制、易错的、有潜在风险的,要提前描述。 | +| F.1.5 | 步骤清晰-1:无论步骤简单或复杂,都需要写步骤目的,即为什么做。 | +| F.1.6 | 步骤清晰-2:明确在什么环境下,使用什么工具,做什么操作,怎么做该操作。 | +| F.1.7 | 步骤具体:如果操作可选,要明确可选条件。 | +| F.1.8 | 在开发步骤执行完成后,及时明确操作正确的标准。 | +| **F.2** | **如何写好代码段** | +| F.2.1 | 代码涉及开发者拷贝的命令,必须用可编辑的报文呈现,避免截图,使用代码片段包裹样式 | +| F.2.2 | 代码中关键段,关键步骤要有注释说明。 | +| F.2.3 | 代码显示符合代码缩进要求。 | +| F.2.4 | 步骤涉及接口调用,清晰给出接口及其使用说明或示例代码,代码来源于具体实例。 | + + +## Changelog + +【写作要求】 **可选**,当此readme所在的仓,在做版本升级或其他调整时,需要在changelog中维护变化信息【本次开源中,如果涉及升级更新的,需要提供】 + + +## 相关仓 + +【写作要求】 **必选**。列出当前仓所在子系统的所有相关仓的链接,并加粗标识当前的仓 + +示例: + +[内核子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E5%86%85%E6%A0%B8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) + +[drivers\_liteos](https://gitee.com/openharmony/drivers_liteos/blob/master/README_zh.md) + +**kernel\_liteos\_a** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/contribute/template/concept-overview-template.md b/website/docs/_posts/zh-cn/contribute/template/concept-overview-template.md new file mode 100644 index 0000000000000000000000000000000000000000..4e1c75fbb5b17dc08c80b00c848fe00cd253ea82 --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/template/concept-overview-template.md @@ -0,0 +1,124 @@ +--- +title: concept-overview-template +permalink: /pages/extra/b49c06/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 概述 + +## 基本概念 + +*【 **写作要求】*** + +*必选,描述本开发任务相关的基本概念,帮助开发者更好的理解开发任务。* *写作要求见下,完成写作后,请逐项自检。* + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 业界通用的概念不用赘述。 | | +| 注意使用业界通用术语来表达,不用开发者无法理解的内部语言。 | | + + +【写作样例】 + + +XX系统音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。 + + +在进行应用的开发前,开发者应了解以下基本概念: + + +- 采样 + 采样就是把模拟信号数字化的过程,所有的模拟信号都需要通过采样转换为可以用0101来表示的数字信号。 + +- 采样率 + 采样率为每秒从连续信号中提取并组成离散信号的采样次数,单位用赫兹(Hz)来表示。通常人耳能听到频率范围大约在20Hz~20kHz之间的声音。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。 + +- 声道 + 声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。 + +- 音频帧 + 音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的。 + + +## 运作机制 + +*【 **写作要求】*** + +*可选。如果机制比较简单,通过前面基本概念就可以说清楚,此章节可以不用提供,删除标题即可。* + +*描述实现原理介绍机制,如关键步骤相关接口调用时机和触发时机,帮助开发者了解该功能的基本运作原理,以便更好的理解开发任务和定位问题。* + +* 写作要求见下,完成写作后,请逐项自检。* + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 仅描述开发任务相关的原理。 | | +| 尽量图文配合,一般使用时序图、流程图等形式。文字描述与图形描述匹配。 | | + +【写作样例-1】 + +- 信号量初始化,为配置的N个信号量申请内存(N值可以由用户自行配置,受内存限制),并把所有的信号量初始化成未使用,并加入到未使用链表中供系统使用。 + +- 信号量创建,从未使用的信号量链表中获取一个信号量资源,并设定初值。 + +- 信号量申请,若其计数器值大于0,则直接减1返回成功。否则任务阻塞,等待其它任务释放该信号量,等待的超时时间可设定。当任务被一个信号量阻塞时,将该任务挂到信号量等待任务队列的队尾。 + +- 信号量释放,若没有任务等待该信号量,则直接将计数器加1返回。否则唤醒该信号量等待任务队列上的第一个任务。 + +- 信号量删除,将正在使用的信号量置为未使用信号量,并挂回到未使用链表。 + +- 信号量允许多个任务在同一时刻访问同一资源,但会限制同一时刻访问此资源的最大任务数目。访问同一资源的任务数达到该资源的最大数量时,会阻塞其他试图获取该资源的任务,直到有任务释放该信号量。 + + +【写作样例-2】 + +**互斥锁运作原理** + +多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的,需要任务进行独占式处理。互斥锁怎样来避免这种冲突呢? + +用互斥锁处理非共享资源的同步访问时,如果有任务访问该资源,则互斥锁为加锁状态。此时其他任务如果想访问这个公共资源则会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源,此时互斥锁再次上锁,如此确保同一时刻只有一个任务正在访问这个公共资源,保证了公共资源操作的完整性。 + + + +## 约束与限制 + +【写作要求】 + +*必选。* *描述本开发任务过程中* *的约束条件,以及此操作约束带来相应的负面影响,包括但不限于如下几方面:* + +- **功能限制**: + - 功能使用范围(明确不支持的场景)。 + - 规格限制。 + +* **操作限制**: + + * 已知问题的操作。 + * 潜在风险的操作(如引起性能降低)。 + * 引起性能降低的操作。 + +写作要求见下,完成写作后,请逐项自检。 + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 明确功能限制或操作限制。 | | +| 约束对指导任务开发有影响或体验有感知,否则不用体现。 | | +| 容易出错的操作在步骤里描述,不在此体现。 | | + +**【写作样例】** + +**互斥锁的约束与限制:** + +- 两个任务不能对同一把互斥锁加锁。如果某任务对已被持有的互斥锁加锁,则该任务会被挂起,直到持有该锁的任务对互斥锁解锁,才能执行对这把互斥锁的加锁操作。 + +- 互斥锁不能在中断服务程序中使用。 + +- XXX作为实时操作系统需要保证任务调度的实时性,尽量避免任务的长时间阻塞,因此在获得互斥锁之后,应该尽快释放互斥锁。 + +- 持有互斥锁的过程中,不得再调用LOS_TaskPriSet等接口更改持有互斥锁任务的优先级。 diff --git a/website/docs/_posts/zh-cn/contribute/faq-template.md b/website/docs/_posts/zh-cn/contribute/template/faq-template.md similarity index 91% rename from website/docs/_posts/zh-cn/contribute/faq-template.md rename to website/docs/_posts/zh-cn/contribute/template/faq-template.md index e530e620669c66487f037656f42b250a22546fd8..7292393310f06d7aa1de943019370c89f355adfa 100644 --- a/website/docs/_posts/zh-cn/contribute/faq-template.md +++ b/website/docs/_posts/zh-cn/contribute/template/faq-template.md @@ -1,15 +1,15 @@ --- -title: faq-template.md -permalink: /pages/extra/95f10b/ +title: faq-template +permalink: /pages/extra/4a543a/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # FAQ:标题(简要描述问题关键信息) diff --git a/website/docs/_posts/zh-cn/contribute/template/guide-template.md b/website/docs/_posts/zh-cn/contribute/template/guide-template.md new file mode 100644 index 0000000000000000000000000000000000000000..538013bc6bef0ed54a0f1bd84f32d8d68c276b71 --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/template/guide-template.md @@ -0,0 +1,139 @@ +--- +title: guide-template +permalink: /pages/extra/b09c43/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 开发指导 + +** *【写作要求】*** + + +*必选。* *描述各个场景下,开发者如何完成开发任务。* *可根据多场景任务增加章节。写作要求见下,完成写作后,请逐项自检。* + + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 如果有多个场景,请写起多个“开发指导”章节,如音频播放开发指导、音量管理开发指导、短音播放开发指导。 | | +| 标题尽量使用“动词+名词”的句式表述任务操作。 | | + + +## 场景介绍 + +** *【写作要求】*** + +*必选。* *描述在什么情景下解决什么问题,最终达到什么样的效果。*应用SCQA描述方法: + +- S:situation(情景),由大家都熟悉的的情景,事实引入。 + +- C:complication(冲突),但是实际情况往往和我们的要求有冲突。 + +- Q:question(疑问),怎么办? + +- A:answer(回答),我们的解决方案是 … + +*写作要求见下,完成写作后,请逐项自检。* + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 背景原因、什么时候在哪、做了什么操作、最终解决什么问题或操作效果都明确。 | | + +**【写作样例】** + +音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。 + + +## 接口说明 + +** *【写作要求】*** + +*必选。* *描述本开发指导相关的接口有哪些,旨在要开发者在开发前有大体了解,提升开发效率。* *写作要求见下,完成写作后,请逐项自检。* + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 不在本开发任务的接口无需提供。 | | +| 如果接口太多,超过10个,可以提供主要的接口 | | + +**【写作样例】** + +音频播放开放能力如下:AudioRenderer类,具体的API详见接口文档。 + +**表1** 音频播放API接口功能介绍 + +| 接口名 | 描述 | +| -------- | -------- | +| AudioRenderer(AudioRendererInfo audioRendererInfo, PlayMode pm) throws IllegalArgumentException | 构造函数,设置播放相关音频参数和播放模式,使用默认播放设备 | +| AudioRenderer(AudioRendererInfo audioRendererInfo, PlayMode pm, AudioDeviceDescriptor outputDevice) throws IllegalArgumentException | 构造函数,设置播放相关音频参数、播放模式和播放设备 | +| boolean play() | 播放音频流 | +| boolean write(byte[] data, int offset, int size) | 将音频数据以byte流写入音频接收器以进行播放 | + + +## 开发步骤 + +** *【写作要求】*** + + * 必选。描述* *开发的整体过程,便于开发者快速完成开发。* * 具体 写作要求见下,完成写作后,请逐项自检下。* +| 内容要求 | 是否满足 | +| -------- | -------- | +| **如何写好步骤** | | +| 步骤完整:提供必须的步骤,顺利指导完成操作,无缺失。 | | +| 脉络清楚:文档逻辑清晰、合理。文档前面的概述、准备、操作围绕一条线描述,不能章节断裂或前后矛盾的现象。 | | +| 任务句式:标题或句子尽量使用“动词+名词”的句式表述动作。 | | +| 预防提前:操作过程中的限制、易错的、有潜在风险的,要提前描述,使用DOCS平台的“插入> 说明 > 须知”描述。 | | +| 步骤清晰-1:无论步骤简单或复杂,都需要写步骤目的,即为什么做。 | | +| 步骤清晰-2:明确在什么环境下,使用什么工具,做什么操作,怎么做该操作。 | | +| 步骤具体:如果操作可选,要明确可选条件。 | | +| 在开发步骤执行完成后,及时明确操作正确的标准。 | | +| **如何写好代码段** | | +| 代码涉及开发者拷贝的命令,必须用可编辑的报文呈现,避免截图,使用代码片段包裹。 | | +| 代码中关键段用蓝色(RGB:0.0.255)突出显示,关键步骤要有注释说明。 | | +| 代码显示符合代码缩进要求。 | | +| 步骤涉及接口调用,清晰给出接口及其使用说明或示例代码,代码来源于具体实例。 | | + +**【写作样例】** + +1. 构造音频流参数的数据结构AudioStreamInfo,推荐使用AudioStreamInfo.Builder类来构造,模板如下,模板中设置的均为AudioStreamInfo.Builder类的默认值,根据音频流的具体规格来设置具体参数。 + ``` + AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder().sampleRate( AudioStreamInfo.SAMPLE_RATE_UNSPECIFIED) .audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_NONE) .encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_INVALID) .channelMask(AudioStreamInfo.ChannelMask.CHANNEL_INVALID) .streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_UNKNOWN) .build(); + ``` + + 以真实的播放pcm流为例: + ``` + AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder().sampleRate(44100)//44.1kHz .audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_MAY_DUCK)//混音 .encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT)//16-bit PCM .channelMask(AudioStreamInfo.ChannelMask.CHANNEL_OUT_STEREO)//双声道 .streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_MEDIA)//媒体类音频 .build(); + ``` + +2. 使用步骤1创建的音频流构建音频播放的参数结构AudioRendererInfo,推荐使用AudioRendererInfo.Builder类来构造,模板如下,模板中设置的均为AudioRendererInfo.Builder类的默认值,根据音频播放的具体规格来设置具体参数。 + ``` + AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(audioStreamInfo) .audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_NONE) .bufferSizeInBytes(0) .distributedDeviceId("") .isOffload(false) .sessionID(AudioRendererInfo.SESSION_ID_UNSPECIFIED) .build(); + ``` + + 以真实的播放pcm流为例: + ``` + AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(audioStreamInfo) .audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_DIRECT_PCM)//pcm格式的输出流 .bufferSizeInBytes(100) .distributedDeviceId("E54***5E8")//使用分布式设备E54***5E8播放 .isOffload(false)//false表示分段传输buffer并播放,true表示整个音频流一次性传输到HAL层播放 .build(); + ``` + +3. 根据要播放音频流指定PlayMode,不同的PlayMode在写数据时存在差异,详情见步骤7,其余播放流程是无区别的。并通过构造函数获取AudioRenderer类的实例化对象。 + .... + +4. 播放任务结束后,调用AudioRenderer实例化对象的release()释放资源。 + + +## 调测验证(可选) + +** *【写作要求】*** + +*可选。* *描述开发完成后,进行调测验证,确保最终操作成功。* *操作步骤要求同“开发指导”,其他具体写作要求见下,完成写作后,请逐项自检下。* + +| 内容要求 | 是否满足 | +| -------- | -------- | +| 仅进行最后的业务调测,每个小任务的操作结果,在开发步骤执行完成后,及时验证操作结果。 | | +| 明确开发成功标准。 | | + + diff --git a/website/docs/_posts/zh-cn/contribute/template/js-template.md b/website/docs/_posts/zh-cn/contribute/template/js-template.md new file mode 100644 index 0000000000000000000000000000000000000000..d2949b30830dfd2bdb948d83c26278b138a73320 --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/template/js-template.md @@ -0,0 +1,250 @@ +--- +title: js-template +permalink: /pages/extra/6aad90/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# API接口说明模板 + +> *写作说明* +> +> 0.1 - 所有的写作说明,在完成写作后,都要删除。 +> +> 0.2 - 上传路径:docs/zh-cn/application-dev/reference/apis,图片放到对应的figures文件夹中。上传后可通过提issue的方式,触发翻译。 +> +> 0.3 - 一个d.ts文件对应一个js api接口文档。**文件名称:js-apis-模块名.md**。示例: +> +> ​ 媒体@ohos.multimedia.audio,文件命名为:js-apis-audio.md +> +> ​ 电话@ohos.telephony.sms,文件命名为:js-apis-sms.md +> +> 0.4 - 新增文件,需要修改对应的Readme,即docs/zh-cn/application-dev/reference/apis/Readme-CN.md。 +> +> 0.5 - **文档标题**:使用中文短语概括本模块功能。但如果部分概念使用英文更便于开发者理解,不必强求,比方说,Ability、SIM卡等概念可以直接使用。 +> +> 0.6 - 文档标题为一级标题;namespace下的属性字段、function、class、interface、enum、type为二级标题;class下的属性、function为三级标题。 +> +> 0.7 - **对已有模块的新增接口标记起始版本:使用\标签,标记对应的版本号。** +> +> ​ 示例:API 6已有的模块,在API 7新增了一个属性字段,则在属性后加标记,即newAttribute7+。 +> +> ​ 如果新增了一个方法,则在方法标题后增加标记,即 sim.getSimIccId7+,interface、class、枚举等同理。 +> +> 0.8 - **废弃内容**:不能直接在文档上删去,在废弃内容后面加上标标注deprecated,并使用“>”引用语法建议使用的替代方式,加上对应的链接。 +> +> ​ 示例:abandonmentMethod(deprecated) +> +> > 从API Version 7 开始废弃,建议使用[newMethod](#newMethod)替代。 +> +> 下面进入具体每个API的写作。 + +*** +> *写作说明* +> +> 1.1 - 使用markdown的引用语法“>”对接口的起始版本进行说明。 +> +> 1.2 - 一个模块只会有一个起始版本。 +> +> 1.3 - 采用标准句式:“本模块首批接口从API version x开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。”x需要修改为对应的版本号。 +> + +> **说明** +> +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +模块说明。此处对该模块提供的功能、使用场景和使用建议进行简要描述。 + +## 导入模块 +> *写作说明* +> +> 2.1 - 根据实际情况填写导入模块。采用代码段的样式,给出import语句。 +> +> 2.2 - 如果没有导入模块,将“导入模块”修改为“使用说明”。 +> +> ​ 使用说明案例: +> + +> ```js +> import ability_featureAbility from '@ohos.ability.featureAbility'; +> var context = ability_featureAbility.getContext(); +> ``` + +```js +import call from '@ohos.telephony.call'; +``` +## 系统能力 +> *写作说明* +> +> 3.1 - 必选。 +> +示例:SystemCapability.BundleManager.BundleFramework + +## 属性 + +> *写作说明* +> +> 4.1 - 可选,如果没有属性可删除此二级标题。 +> +> 4.2 - 类型如果为自定义类型,需要建立链接到对应的interface或enum中。 +> +> 4.3 - 对于可读属性:如果取值为有特殊含义的有限值,需要进行枚举。 +> +> 4.4 - 对于可写属性:如果仅支持固定字段,需要进行说明。 + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ---------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------ | +| pluggedType | [BatteryPluggedType](#BatteryPluggedType) | 是 | 否 | 表示当前设备连接的充电器类型。 | +| isBatteryPresent | boolean | 是 | 否 | 表示当前设备是否支持电池或者电池是否在位。 | + +## 枚举 + +> *写作说明* +> +> 5.1 - 可选,如果没有可删除。如果有多个枚举,请分多个二级内容描述,并使用“##”自行新建二级标题。 +> +> 5.2 - 二级标题名为实际枚举名,比方说 BatteryHealthState 。 + +在此处给出该枚举类型的简要描述。如:表示连接的充电器类型的枚举。 + +| 名称 | 值 | 说明 | +| ---- | ---- | -------------------------- | +| NONE | 1 | 表示连接的充电器类型未知。 | + +## 方法 + +> *写作说明* +> +> 6.1 - 可选,如果没有可删除。如果有多个方法,请分多个二级内容描述,并使用“##”自行新建二级标题。 +> +> 6.2 - 二级标题名为方法名,采用导入类.方法名,如果是订阅方法,需要在方法名加上对应的订阅事件。 +> +> ​ 示例: sim.getSimIccId +> +> ​ 订阅方法:sim.on('exampleEvent') +> +> 6.3 - **方法具体调用形式**:和d.ts保持一致,需要包括参数类型、参数名、返回值类型。 +> +> ​ 示例:getNetworkState(slotId: number, callback: AsyncCallback\): void +> +> ​ 注意:尖括号<>可能会被识别为标签,导致界面显示失效,可增加一个\,以保证界面正常显示,如“\\<>”或使用转义字符\< \> 。 +> +> 6.4.1 - **方法描述**:对方法实现的功能进行描述,包括其使用的前提条件(*如:在xx方法调用后才能调用、需要确保网络已连接……*)、使用之后的影响(*如:调用该接口后再进行xx将不起效*)、权限限制等。 +> +> 6.4.2 - **异步方法描述**:存在大量异步方法,其返回方式需要在方法描述处进行说明。通过注册回调函数获取?还是通过Promise获取? +> +> 6.4.3 - **表格内换行**:markdown语法中,换行采用特殊标记\
+ +在此处给出方法的具体调用形式:(如果是静态方法需说明) 方法名称(参数1名称:参数1类型,参数2名称:参数2类型,……):返回值类型 + +在此处给出方法描述。说明请参考6.4.1和6.4.2。 + +需要权限:ohos.permission.XXX(如不涉及可删除,如果是系统权限要说明) + +**参数:** (可选,如不涉及可删除) + +| 参数名 | 类型 | 必填 | 说明 | +| ------------ | --------------------------------------------- | ---- | ------------------------------------------------------------ | +| parameterOne | number \| string \| [CustomType](#CustomType) | 是 | 参数描述。给出取值范围、建议值。如果有固定格式,需要给出格式样例,尤其是URI。
自定义类型需要进行建链说明。 | +| callback | Callback\> | 否 | 参数描述。可选参数需要说明不填写该参数的后果。
如:不填该参数则取消该type对应的所有回调。 | + +**返回值**:(可选,如不涉及可删除) + +| 类型 | 说明 | +| ------------------------------------------ | -------------------------------------------- | +| string | 返回值描述。取到返回值之后,可以用来做什么。 | +| Promise\> | 返回值描述。通过Promise获取了什么。 | + +**示例:** + +```js +// 必选项。 +// 所有的示例代码需要进行自检。 +// 不能出现缺符号、变量前后不一致等低错。 +// 所有的使用到的变量要进行声明。 +// 不允许直接写参数名,必须是可使用、易替代的实际用例。 +// 如果非用户自定义填写,需通过注释进行说明。 +// 示例:var result = xxx.createExample(parameterOne); // parameterOne由扫描自动获取 +``` + +## Class/Interface + +> *写作说明* +> +> 7.1 - 可选,如果没有可删除。如果有多个,请分多个二级内容描述,并使用“##”自行新建二级标题。 +> +> 7.2 - 二级标题名为class、interface的名称。 +> +> 7.3 - 如果该API中,既有属性,又有方法,需要先进行属性的写作,并使用“###”三级标题。 +> +> ​ 如果该API中,只有属性,那么不需要新建三级标题,直接使用表格陈列属性,具体示例参考[CustomType](#CustomType)。 + +类描述/interface描述。如果有使用限制,需要在这个地方说明。比方说,是否有前提条件,是否需要通过什么方法先构造一个实例。 + +### 属性 + +> *写作说明* +> +> 除标题使用三级标题外,其余要求同[属性](#属性)。 + +### Class/Interface中的方法 + +> *写作说明* +> +> 7.4 - 标题名为方法名,使用三级标题,**没有前缀**。如果是订阅方法,需要在方法名加上对应的订阅事件。 +> +> ​ 示例: getSimIccId +> +> ​ 订阅方法:on('exampleEvent') +> +> 其余要求请参考[方法](#方法)中的说明。 + +在此处给出方法的具体调用形式。说明请参考6.3。 + +在此处给出方法描述。说明请参考6.4.1和6.4.2。 + +需要权限:ohos.permission.XXX(如不涉及可删除,如果是系统权限要说明) + +**参数:** (可选,如不涉及可删除) + +| 参数名 | 类型 | 必填 | 说明 | +| ------------ | --------------------------------------------- | ---- | ------------------------------------------------------------ | +| parameterOne | number \| string \| [CustomType](#CustomType) | 是 | 参数描述。给出取值范围、建议值。如果有固定格式,需要给出格式样例,尤其是URI。
自定义类型需要进行建链说明。 | +| callback | Callback\> | 否 | 参数描述。可选参数需要说明不填写该参数的后果。
如:不填该参数则取消该type对应的所有回调。 | + +**返回值**:(可选,如不涉及可删除) + +| 类型 | 说明 | +| ------------------------------------------ | -------------------------------------------- | +| string | 返回值描述。取到返回值之后,可以用来做什么。 | +| Promise\> | 返回值描述。通过Promise获取了什么。 | + +**示例:** + +```js +// 必选项。 +// 所有的示例代码需要进行自检。 +// 不能出现缺符号、变量前后不一致等低错。 +// 所有的使用到的变量要进行声明。 +// 不允许直接写参数名,必须是可使用、易替代的实际用例。 +// 如果非用户自定义填写,需通过注释进行说明。 +// 示例:var result = xxx.createExample(parameterOne); // parameterOne由扫描自动获取 +``` + +## CustomType + +仅有k-v键值对的自定义类型示例。 + +| 名称 | 类型 | 可读 |可写| 说明 | +| ------------ | ---- | ---- | ---- | ---- | +| parameterUrl | string | 是 | 是 |媒体输出URI。支持:
1. 协议类型为“internal”的相对路径,示例如下:
临时目录:internal://cache/test.mp4

2. 文件的绝对路径,示例如下:
file:///data/data/ohos.xxx.xxx/files/test.mp4| +| parameterOne | [CustomEnum](#枚举) | 是 | 是 |属性描述,要求与参数说明类似。| + + + diff --git a/website/docs/_posts/contribute/template/tutorial-template.md b/website/docs/_posts/zh-cn/contribute/template/tutorial-template.md similarity index 95% rename from website/docs/_posts/contribute/template/tutorial-template.md rename to website/docs/_posts/zh-cn/contribute/template/tutorial-template.md index 8ae8cc438664607a6fee412ad01416bf216aea0b..c96d68dbc588f99f6941b7a75403230d0a0847b2 100644 --- a/website/docs/_posts/contribute/template/tutorial-template.md +++ b/website/docs/_posts/zh-cn/contribute/template/tutorial-template.md @@ -1,15 +1,15 @@ --- -title: tutorial-template.md -permalink: /pages/extra/7ba326/ +title: tutorial-template +permalink: /pages/extra/bac754/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:45 +date: 2022-02-12 09:01:58 --- # 教程:标题(对应的任务名称) diff --git a/website/docs/_posts/zh-cn/contribute/template/xxboard-template.md b/website/docs/_posts/zh-cn/contribute/template/xxboard-template.md new file mode 100644 index 0000000000000000000000000000000000000000..9981a7c489c57d1fbd2f58eef28631907c79fedd --- /dev/null +++ b/website/docs/_posts/zh-cn/contribute/template/xxboard-template.md @@ -0,0 +1,95 @@ +--- +title: xxboard-template +permalink: /pages/extra/1a077c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# XXX开发板名称 +*本模板定位:OpenHarmony生态引入第三方开发板时,第三方开发板厂商需提供开发板介绍,便于开发者快速了解此开发板。* + +## 介绍 + +【写作说明】 + +*文字描述开发板的功能,面向场景,主要支持的特性能力。* + +*提供开发板外观图片。* + +*底板图片。* + +*功能框图及介绍。* + +**图片名称以开发板名称命名。* + +*参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-lite-introduction-hi3861.md* + +******** +## 开发板规格 + +*【写作说明】提供开发板模组规格清单,硬件规格列表。* + +## 约束和限制(可选) + +*【写作说明】如果开发板在某些功能、特性、规格等使用上,有一定的约束和建议,需要明确说明。* + +******** + + +## 关键特性 +*【写作说明】支持的OpenHarmony关键特性列表。* + +## 引脚定义 +*【写作说明】介绍单板的管脚定义等,描述单板I/O引脚,以及如何配置PIN、如何使用PIN连接外部组件。* + +## 搭建开发环境 + +### 系统要求 + +*【写作说明】描述开发板对OpenHarmony系统依赖、软、硬件环境系统依赖。* + +### 工具要求 + +*【写作说明】提供从哪里下载开发板编译调试工具链。* + +### 搭建过程 + +*【写作说明】Step by Step介绍环境搭建详细步骤。* + +## 编译调试 + +### 编译 + +*【写作说明】如何在此开发板上使用OpenHarmony,以及如何在此单板上刷新OpenHarmony二进制文件及设备。* + +### 烧录 + +*【写作说明】Step by Step介绍如何烧录参考步骤。* + +### 运行 + +*【写作说明】如何判断开发板正常点亮、运行、输出正常。* + + +### 调试 + +*【写作说明】如何调试开发板常见报错等。* + +## 首个示例 + +*【写作说明】基于此开发板给出一个快速上手的示例,运行效果,或者给出demo示例源码链接。* + +## 参考资源 + +*【写作说明】给出更多详细参考文档、sample示例、FAQ、官网等内容链接。* + +## 感谢(可选) + +*【写作说明】致谢做出突出贡献的三方开发者。* + diff --git a/website/docs/_posts/zh-cn/contribute/tutorial-title-task-name.md b/website/docs/_posts/zh-cn/contribute/tutorial-title-task-name.md deleted file mode 100644 index 0c0322a98724be2e54aa11672dfdb58f5c4b43a8..0000000000000000000000000000000000000000 --- a/website/docs/_posts/zh-cn/contribute/tutorial-title-task-name.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: tutorial-title-task-name.md -permalink: /pages/extra/54a97b/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:47 ---- -# 教程:标题(对应的任务名称) - -教程页面介绍如何完成一个复杂的任务开发、功能开发、APP开发。通常教程页面会将开发过程拆解为多个小节,每个小节由一系列步骤组成。同时,教程中一般需要提供代码示例并进行介绍,便于用户了解具体的功能实现。 - -对于教程中可能涉及到的基本概念,简单的概念可以直接介绍,更深度的概念和主题推荐查阅文档对应专题。 - -撰写教程页面时,在“others“目录下面创建新的MarkDown文件。 - -## 总览 - -_写作内容:介绍开发者学习本教程后将完成什么样的任务,实现什么样的功能和效果。__例如,可以是移植教程、实现一个功能开发教程等。_如果可实现多个目标,建议使用项目符号列表。 - -_如果可能,请提供图片或短视频展示实现效果。_ - -## 开发准备 - -- _完成该功能需要的软件、硬件、工具及对应版本信息。_ -- _需要获取的相关权限说明。_ - -## XXX(关键任务一) - -_将教程分解为几个顺序的关键任务或并列不同的场景任务。_ - -1. XXXX。 - - ``` - //代码示例 - ``` - -2. XXXX。 - -_所有的操作步骤,遵循如下写作要求:_ - -1. _步骤明确操作场景和目的,__步骤中执行的主体要描述清楚。_ -2. _步骤中如果涉及接口调用,需要清晰给出使用的接口及其使用说明,示例代码。_ -3. _涉及到工具界面的步骤,可以提供界面截图,帮助理解步骤完成标准。_ -4. _保证代码的逻辑和语法的正确性。_ -5. _代码中关键步骤要有注释说明。_ -6. 代码如有打印输出,请单独提示打印输出内容_,帮助理解步骤完成标准_。 - -## XXX(关键任务二) - -1. XXXX。 - -## 下一步 - -介绍本教程可能关联的后续开发任务,如果没有请删除此内容。 - diff --git "a/website/docs/_posts/zh-cn/contribute/\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" "b/website/docs/_posts/zh-cn/contribute/\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" deleted file mode 100644 index 28ffc6087b704b3750cb11417997bc6857936585..0000000000000000000000000000000000000000 --- "a/website/docs/_posts/zh-cn/contribute/\347\244\276\345\214\272\346\262\237\351\200\232\344\270\216\344\272\244\346\265\201.md" +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 社区沟通与交流.md -permalink: /pages/extra/f67e87/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:47 ---- -# 社区沟通与交流 - -如果您在使用OpenHarmony过程中遇到问题,请加入邮件群组参与讨论,这是参与OpenHarmony项目讨论的正确方式。 - -## 如何订阅邮件列表 - -如果您以前从未订阅过邮件列表,请参照下面的操作步骤。 - -1. 点击您想要订阅的邮件列表的名称。 -2. 浏览器将跳转到该邮件列表的订阅页面,那里将提供有关如何订阅的说明。 -3. 阅读订阅说明,您需要提供一个您希望用来订阅邮件列表的电子邮件地址。 -4. 输入您的电子邮件地址并点击订阅,您将收到一封电子邮件,要求您确认订阅。 -5. 回复您收到的电子邮件以确认您的订阅。 -6. 最后您将收到来自一封来自邮件列表的欢迎邮件。 - -**表 1** : 邮件列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

邮件地址

-

简介

-

功能描述

-

contact@openharmony.io

-

公用邮箱

-

OpenHarmony社区公共邮箱。开发者CLA协议签署可以发邮件到此邮箱。

-

dev@openharmony.io

-

开发邮件列表

-

OpenHarmony社区开发讨论邮件列表,任何社区开发相关话题都可以在邮件列表讨论。任何开发者可订阅

-

cicd@openharmony.io

-

CI邮件列表

-

OpenHarmony社区CICD构建邮件列表,任何开发者可订阅

-

pmc@openharmony.io

-

PMC邮件列表

-

PMC讨论邮件列表,PMC成员可订阅

-

scy@openharmony.io

-

安全问题邮箱

-

开发者可反馈OpenHarmony安全问题到此邮箱。

-

scy-priv@openharmony.io

-

安全组邮件列表

-

安全组成员安全问题处理讨论邮件列表,安全组成员可订阅

-
- -## 如何发送邮件到邮件列表 - -要将邮件发送到指定的邮件列表,请向上表中列出的邮件地址发送您的电子邮件。 - -这样所有在这个邮件列表中的社区成员都能收到您的电子邮件。 - diff --git "a/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\217\212\350\256\270\345\217\257\350\257\201\350\257\264\346\230\216.md" "b/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\217\212\350\256\270\345\217\257\350\257\201\350\257\264\346\230\216.md" new file mode 100644 index 0000000000000000000000000000000000000000..c2b7601422b2501f0614ff046aa325ac3a4632bd --- /dev/null +++ "b/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\217\212\350\256\270\345\217\257\350\257\201\350\257\264\346\230\216.md" @@ -0,0 +1,111 @@ +--- +title: 第三方开源软件及许可证说明 +permalink: /pages/extra/924bcc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +OpenHarmony使用了如下第三方开源软件,下表对各开源软件采用的License进行了说明: + +| 开源仓名 | License | 说明 | +| :----- | :----- | :----- | +| third_party_bounds_checking_function | Mulan Permissive Software License,Version 2 | 该License无强制开放源码义务条款。 | +| third_party_cJSON | MIT License | 该License无强制开放源码义务条款。 | +| third_party_JSON-C | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libuuid | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_popt | MIT License | 该License无强制开放源码义务条款。 | +| third_party_LVM2 | GPL V2.0 | 独立进程,不会导致受到GPL许可的影响。 | +| third_party_cryptsetup | GPL V2.0 | 独立进程,不会导致受到GPL许可的影响。| +| third_party_cmsis | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_curl | Curl License | 该License无强制开放源码义务条款。 | +| third_party_FatFs | FatFs license(BSD-style licenses) | 该License无强制开放源码义务条款。 | +| third_party_FreeBSD | BSD 2-Clause License | 该License无强制开放源码义务条款。 | +| third_party_freetype | The FreeType Project License | 该License无强制开放源码义务条款。 | +| third_party_giflib | MIT License | 该License无强制开放源码义务条款。 | +| third_party_googletest | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_harfbuzz | MIT License | 该License无强制开放源码义务条款。 | +| third_party_iniparser | MIT License | 该License无强制开放源码义务条款。 | +| third_party_jerryscript | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_libjpeg | Libjpeg License (JPEG License) | 该License无强制开放源码义务条款。 | +| third_party_libpng | libpng license | 该License无强制开放源码义务条款。 | +| third_party_Linux_Kernel | GPL V2.0+EXCEPTION | third_party_Linux_Kernel库包含两部分内容,1是jffs2模块,2是scripts模块 。
(1)jffs2模块是为了兼容jffs2而引入,jffs2采用GPLV2+EXCEPTION的许可,并非纯粹的GPLV2,您可以通过如下链接查看其许可证:https://gitee.com/openharmony/third_party_Linux_Kernel/blob/master/fs/jffs2/LICENCE
OpenHarmony对jffs2模块的编译及链接使用方式满足其EXCEPTION的规定,故对该模块的使用,不会导致项目其他代码受到GPLV2的影响。
(2)scripts模块是独立的编译工具,仅在编译过程中用来生成 conf和mconf工具,代码不会编译打包到kernel_liteos_a内核中。因此kernel_liteos_a内核不受GPL影响。 | +| third_party_ltp | GPL V2.0 | third_party_ltp是作为独立进程用于跨进程测试kernel_liteos_a内核接口,不会导致kernel_liteos_a内核受到GPL许可证的影响。 | +| third_party_lwip | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_mbedtls | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_mtd_utils | GPL V2.0 | third_party_mtd_utils用于编译生成jffs2文件系统镜像的打包工具,该工具用于打包jffs2格式的rootfs和userfs镜像,代码不会编译打包到kernel_liteos_a内核中,故kernel_liteos_a内核不受GPL影响。 | +| third_party_musl | BSD 2-Clause License | 该License无强制开放源码义务条款。 | +| third_party_NuttX | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_openssl | OpenSSL License and Original SSLeay License | 该License无强制开放源码义务条款。 | +| third_party_qrcodegen| MIT License | 该License无强制开放源码义务条款。 | +| third_party_unity | MIT License | 该License无强制开放源码义务条款。 | +| third_party_wpa_supplicant | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_zlib | zlib/libpng License | 该License无强制开放源码义务条款。 | +| third_party_rt_thread | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| vendor_hisi_hi35xx_middleware_source_third_party_ffmpeg | LGPL V2.1 | OpenHarmony采用动态链接方式使用LGPL许可证下的ffmpeg库,不会导致该项目其它代码受到LGPL许可证的影响。 | +| vendor_hisi_hi35xx_thirdparty_uboot_src | GPL-2.0+ | uboot是作为独立进程,不会导致boot外的软件受到GPL许可证的影响。 | +| vendor_hisi_hi3861_hi3861仓下的u-boot | GPL-2.0+ | uboot是作为独立进程,不会导致boot外的软件受到GPL许可证的影响。 | +| third_party_XKeyboardConfig | MIT License | 该License无强制开放源码义务条款。 | +| third_party_abseil-cpp | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_boost | Boost Software License V1.0 | 该License无强制开放源码义务条款,tools、libs目录下部分GPLV2协议的文件为测试文件,OpenHarmony运行期不使用,不会受GPL许可证影响。 | +| third_party_boringssl | OpenSSL License,MIT License,ISC License | 该License无强制开放源码义务条款。 | +| third_party_cares | MIT License | 该License无强制开放源码义务条款。 | +| third_party_css-what | BSD 2-Clause License | 该License无强制开放源码义务条款。 | +| third_party_easymock | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_eudev | GPL V2.0/LGPL V2.0 | 独立进程,被init进程调用,OpenHarmony进程不受GPL影响。 | +| third_party_expat | MIT License | 该License无强制开放源码义务条款。 | +| third_party_flatbuffers | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_flutter | BSD 3-Clause License | 该License无强制开放源码义务条款,其中部分文件采用GNU General Public License v2.0 w/Bison exception,该文件未使用,不会参与打包;部分文件采用GPL V2协议,但仅用于生成资料文档,对OpenHarmony进程不影响。 | +| third_party_glib | LGPL V2.1 | 采用动态链接调用,OpenHarmony进程不受LGPL影响。 | +| third_party_gn | BSD 3-clause License | 该License无强制开放源码义务条款。 | +| third_party_grpc | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_gstreamer | LGPL V2.0 | 采用动态链接调用,OpenHarmony进程不受LGPL影响。 | +| third_party_javapoet | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_jinja2 | BSD 3-clause License | 该License无强制开放源码义务条款。 | +| third_party_jsframework | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_json | MIT License | 该License无强制开放源码义务条款。 | +| third_party_jsoncpp | MIT License | 该License无强制开放源码义务条款。 | +| third_party_junit | EPL V1.0 | 仅测试使用,无修改,满足EPL条款要求。 | +| third_party_libcoap | BSD 3-Clause License | 该License无强制开放源码义务条款,其中部分编译用脚本文件使用 Autoconf exception to GPL 2.0 or later协议,OpenHarmony中未使用。 | +| third_party_libdrm | MIT license | 该License无强制开放源码义务条款,其中部分文件采用GPL-2.0 WITH Linux-syscall-note,在OpenHarmony中没有使用,不受其影响。 | +| third_party_libevdev | MIT License | 该License无强制开放源码义务条款,其中部分文件使用GPL-2.0 WITH Linux-syscall-note许可,属于UAPI正常使用,不受GPL许可影响。 | +| third_party_libffi | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libinput | MIT License | 该License无强制开放源码义务条款,其中部分文件使用GPL-2.0 WITH Linux-syscall-note许可,属于UAPI正常使用,不受GPL许可影响。 | +| third_party_libphonenumber | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_libunwind | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libuv | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libxkbcommon | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libxml2 | MIT License | 该License无强制开放源码义务条款。 | +| third_party_markupsafe | BSD 3-clause License | 该License无强制开放源码义务条款。 | +| third_party_mingw-w64 | Zope Public License V2.1 | 该License无强制开放源码义务条款,其中部分编译用脚本文件使用 Autoconf exception to GPL 2.0 or later协议,满足该协议要求,OpenHarmony进程不受GPL影响;部分头文件为LGPL-2.1+,采用动态链接调用,OpenHarmony进程不受GPL影响。 | +| third_party_mtdev | MIT License | 该License无强制开放源码义务条款。 | +| third_party_ninja | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_node | Apache License V2.0
Artistic License 2.0
BSD 2-Clause License
BSD 3-Clause License
ICU License
MIT License
OpenSSL License
Public Domain
SSLeay License
UNICODE INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
c-ares license
zlib/libpng License
| 该软件包含的License中Artistic License 2.0对应的组件在OpenHarmony项目中未使用,其余License无强制开放源码义务条款。 | +| third_party_objenesis | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_pixman | MIT license | 该License无强制开放源码义务条款。 | +| third_party_protobuf | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_python | Python Software Foundation License V2 | 该License无强制开放源码义务条款,其中部分编译用脚本文件使用 Autoconf exception to GPL 2.0 or later协议,满足该协议要求,OpenHarmony进程不受GPL影响; | +| third_party_re2 | BSD 3-Clause License | 该License无强制开放源码义务条款。 | +| third_party_sqlite | Public Domain | 该License无强制开放源码义务条款。 | +| third_party_wayland-ivi-extension | Apache License V2.0 | 该License无强制开放源码义务条款。 | +| third_party_wayland-protocols_standard | MIT license | 该License无强制开放源码义务条款,其中部分编译用脚本文件使用 Autoconf exception to GPL 2.0 or later协议,OpenHarmony中未使用。 | +| third_party_wayland_standard | MIT license | 该License无强制开放源码义务条款,其中部分编译用脚本文件使用 Autoconf exception to GPL 2.0 or later协议,OpenHarmony中未使用。部分为Libtool Exception协议,满足该协议要求。 | +| third_party_weston | MIT license | 该License无强制开放源码义务条款。 | +| third_party_lz4 | BSD 2-Clause License | 该License无强制开放源码义务条款。 | +| third_party_bzip2 | bzip2 and libbzip2 License | 该License无强制开放源码义务条款。 | +| third_party_mksh | MirOS License | 该License无强制开放源码义务条款。 | +| third_party_toybox | Public Domain License | 该License无强制开放源码义务条款。 | +| third_party_optimized_routines | MIT License | 该License无强制开放源码义务条款。 | +| third_party_libsnd | LGPL v2.1 | 该License无强制开放源码义务条款。部分测试代码使用GPL-3.0-or-later协议,部分测试代码使用GPL-2.0-or-later协议 | +| third_party_pulseaudio | LGPL v2.1 | 该License无强制开放源码义务条款。 | +| third_party_ffmpeg | LGPL v2.1 | OpenHarmony采用动态链接方式使用LGPL许可证下的ffmpeg库,不会导致该项目其它代码受到LGPL许可证的影响。 | +| third_party_quickjs | MIT licence | 该License无强制开放源码义务条款。| +| third_party_icu | BSD 3-Clause License, ICU License, UNICODE INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE | License无强制开放源码义务条款。 | +| third_party_ejdb | MIT License| License无强制开放源码义务条款。 | +| third_party_iowow | MIT License| License无强制开放源码义务条款。 | +| third_party_glfw | zlib/libpng License | 该License无强制开放源码义务条款。 | \ No newline at end of file diff --git "a/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" "b/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" index 3b3c73072be72ba420069257f207511d1f8d343e..1da82eb599ba01fff84afa62852a1b013b2f65f0 100644 --- "a/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" +++ "b/website/docs/_posts/zh-cn/contribute/\347\254\254\344\270\211\346\226\271\345\274\200\346\272\220\350\275\257\344\273\266\345\274\225\345\205\245\346\214\207\345\257\274.md" @@ -1,15 +1,15 @@ --- -title: 第三方开源软件引入指导.md -permalink: /pages/extra/ba9721/ +title: 第三方开源软件引入指导 +permalink: /pages/extra/c986a5/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:58 --- # 第三方开源软件引入指导 diff --git "a/website/docs/_posts/zh-cn/contribute/\350\256\270\345\217\257\350\257\201\344\270\216\347\211\210\346\235\203\350\247\204\350\214\203.md" "b/website/docs/_posts/zh-cn/contribute/\350\256\270\345\217\257\350\257\201\344\270\216\347\211\210\346\235\203\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..524cfdf25a8af229acb30699b958cbe27073859e --- /dev/null +++ "b/website/docs/_posts/zh-cn/contribute/\350\256\270\345\217\257\350\257\201\344\270\216\347\211\210\346\235\203\350\247\204\350\214\203.md" @@ -0,0 +1,96 @@ +--- +title: 许可证与版权规范 +permalink: /pages/extra/b20432/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 许可证与版权规范 + +## 目的 +本规范明确了OpenHarmony社区的代码贡献者、Committer、PMC成员如何处理Repo及源代码文件的许可与版权声明,包括如下几个部分 +1. LICENSE文件 +2. NOTICE文件 +3. 版权和许可头 + +## 范围 +本规范仅适用于OpenHarmony社区,不适用于将OpenHarmony项目应用于个人或企业以开发其它产品的场景,也不适用分发第三方开源软件的场景(该场景参见[第三方开源软件引入指导](/pages/extra/c986a5/))。 + +## 本文的改进和修订说明 +1. 本文档由OpenHarmony PMC主导起草和维护。本文档的最新版本总可以在 [这里](/pages/extra/b20432/) 找到。 +2. 任何对于本文中涉及的规则的增加,修改,删除都必须被追踪,请进入该追踪系统。 +3. 最终规则经过社区充分的讨论后,由PMC定稿。 + +## LICENSE文件 +1. 每个开源仓必须有清晰描述的许可证信息,且许可证必须与OpenHarmony整体许可证规则一致,如用户态开源仓使用Apache License 2.0许可协议,LiteOS内核态开源仓使用BSD 3-clause许可协议。 +2. 每个开源仓的许可证文件必须为纯文本格式,放置于代码仓的根目录,里面包含该许可的全文,并且以”LICENSE“命名,不用带".txt",".md"等后缀。 +3. 如果开源仓的不同源码包含多种许可证,请将主许可证描述在以”LICENSE“命名的文件中,其它许可证请以”LICENSE-许可证类型-备注“命名并放置于仓的根目录或该许可证对应源码的根目录,同时在主许可证中描述各许可证文件位置及其适用的范围与场景。 +4. 每个开源仓的许可证文件必须要涵盖该仓下所有文件,确保各许可证的涵盖范围描述准确、精简,并且不要包含不在本仓发布的其它源代码许可等不必要的信息,比如要单独下载的依赖软件的许可不要包含在仓和许可证信息中。 +5. 如果开源仓在发布时以二进制形式发布,请确保许可证文件位于其发布格式的常规位置,如发布文件夹或压缩包的顶层目录,对于".jar"格式的文件,许可证可位于META-INF目录。 + +## NOTICE文件 +1. 如分发的二进制文件中包含有第三方开源软件,请提供以“NOTICE”命名的文件,NOTICE文件以纯文本格式描述包含的所有第三方开源软件名称、软件版本、权利人声明、License信息 +2. NOTICE文件通常放置在发布文件夹或压缩包的顶层目录,对于".jar"格式的文件,许可证可位于META-INF目录。 + + +## 版权和许可头 +1. 开源仓中的文件原则上都应当包含合适的版权和许可头声明,除非是如下几种场景: +* 添加版权和许可声明会影响到该文件的功能,如JSON文件因不支持注释,可不添加版权和许可头。 +* 工具生成的文件且包含说明该文件是由工具自动生成的描述信息。 +* 简短的供用户阅读的说明文件,添加版权许可头会影响其可读性和,如README等。 + +2. 版权和许可头声明形式如下: +``` +Copyright (C) [第一次发布年份]-[当前版本发布年份] [版权所有者] + +许可证头,以具体的许可证内容为准,如: + +Apache License Version 2.0许可头: +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +BSD-3-Clause 许可头: +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` +2. 版权头中的年份注意是作品对外发布的年份,如果是第一次发布则写发布年份即可,如果不是第一次发布,则写 "第一次发布年份-当前版本发布年份"。 +3. 版权所有者是法律实体,可以是个人或者公司,若代表公司贡献代码,请写公司法律实体。 +4. 许可头信息必须与该开源仓的许可证信息一致,如果某文件是双重许可证,则其许可头要清晰地说明各许可证的适用条件,并在文件许可头中包含各许可证定义的许可头描述。 diff --git "a/website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\214\207\345\215\227.md" "b/website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..a21114bb439edfe3ab11ba6b7b02b0bfbd338099 --- /dev/null +++ "b/website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\214\207\345\215\227.md" @@ -0,0 +1,32 @@ +--- +title: 贡献指南 +permalink: /pages/extra/385f1f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 贡献指南 + +- **[参与贡献](/pages/010d01)** + +- **[行为准则](/pages/010d02)** + +- **[贡献代码](/pages/010d03)** + +- **[贡献流程](/pages/010d04)** + +- **[FAQ](/pages/010d07)** + +- **[贡献文档](/pages/extra/20a162/)** + +- **[写作规范](/pages/010d0501)** + +- **[社区沟通与交流](/pages/010d06)** + + diff --git "a/website/docs/_posts/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" "b/website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" similarity index 92% rename from "website/docs/_posts/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" rename to "website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" index 59bc711a1e20239a37081fc2199f9dec449d33e0..49b9556928f5969aa42add649f2557746ac7cf27 100644 --- "a/website/docs/_posts/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" +++ "b/website/docs/_posts/zh-cn/contribute/\350\264\241\347\214\256\346\226\207\346\241\243.md" @@ -1,15 +1,15 @@ --- -title: 贡献文档.md -permalink: /pages/extra/678153/ +title: 贡献文档 +permalink: /pages/extra/20a162/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:45 +date: 2022-02-12 09:01:58 --- # 贡献文档 @@ -18,7 +18,7 @@ date: 2021-12-30 18:17:45 卓越贡献者将会在开发者社区文档贡献专栏表彰公示。 - [贡献方式](#section5723203852414) -- [写作规范](/pages/000c0400) +- [写作规范](/pages/010d0501) ## 内容版权 @@ -64,20 +64,20 @@ date: 2021-12-30 18:17:45 文档团队成员将评审并合并您的修改内容,感谢您对OpenHarmony文档的支持和帮助。 -更多内容可参考[贡献流程](/pages/000c03)。 +更多内容可参考[贡献流程](/pages/010d04)。 ### 为发行版本贡献文档 为了帮助开发者更高效使用OpenHarmony社区的每个Release版本,社区会根据每个版本规划的需求特性提供配套文档(如指南、API参考、开发示例、Release Notes、API Changelog、FAQ等)。有的需求涉及新增功能特性和文档,有的需求的是对现有特性和文档内容更新。 -欢迎开发者参与贡献,详细参考:[为发行版本贡献文档](/pages/000c0401) +欢迎开发者参与贡献,详细参考:[为发行版本贡献文档](/pages/010d0502) ### 贡献经验分享内容 鼓励开发者在学习、开发过程中,总结经验并创建技术内容帮助更多开发者快速上手。推荐输出各类How to教程、常见问题FAQ等。请参考如下写作模板: -- [How to教程](/pages/extra/7ba326/) -- [FAQ](/pages/extra/03f82c/) +- [How to教程](/pages/extra/bac754/) +- [FAQ](/pages/extra/4a543a/) 内容写作模板归档在Docs文档仓下contribute文件夹中。 diff --git a/website/docs/_posts/design/API-Review-Template.md b/website/docs/_posts/zh-cn/design/API-Review-Template.md similarity index 96% rename from website/docs/_posts/design/API-Review-Template.md rename to website/docs/_posts/zh-cn/design/API-Review-Template.md index fba9ef2dc92b62854f9b277afdb248a8e27adb6c..f8f13bb3690f4146e06efbe28d553c28164b8586 100644 --- a/website/docs/_posts/design/API-Review-Template.md +++ b/website/docs/_posts/zh-cn/design/API-Review-Template.md @@ -1,15 +1,15 @@ --- -title: API-Review-Template.md -permalink: /pages/extra/5f7b0a/ +title: API-Review-Template +permalink: /pages/extra/ba75d2/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:45 +date: 2022-02-12 09:01:56 --- # OpenHarmony xxx子系统 xxx API评审申请 diff --git a/website/docs/_posts/zh-cn/design/OpenHarmony-API-governance.md b/website/docs/_posts/zh-cn/design/OpenHarmony-API-governance.md index a3b3c04ebe953245ff6e18169ecfb165ff1ca3bc..5c402973c82928273d8a102838dc750986bdc61f 100644 --- a/website/docs/_posts/zh-cn/design/OpenHarmony-API-governance.md +++ b/website/docs/_posts/zh-cn/design/OpenHarmony-API-governance.md @@ -1,43 +1,61 @@ --- -title: OpenHarmony-API-governance.md -permalink: /pages/extra/d012a7/ +title: OpenHarmony-API-governance +permalink: /pages/extra/d4794e/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:47 +date: 2022-02-12 09:01:56 --- # OpenHarmony API治理章程 +## 总览 +为了引导OpenHarmony生态健康、有序发展和演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。 -## 总览 +本章程由[API SIG](https://www.openharmony.cn/SIG/api/)制定,经[PMC](https://www.openharmony.cn/community/pmc/)批准发布;本对章程的修订必须经由API SIG评审后,由PMC批准发布。 + +## 概述 + +### 范围与定义 + +OpenHarmony软件栈中包含了多个角色,因此API也分作多种类型。 + +不同的API类型其兼容性要求也不一样,具体如下表所述: -为了引导OpenHarmony应用生态健康、有序发展演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。 +| 类型 | 提供者 | 使用者 | 兼容性要求 | 看护手段| +|---|---|---|---|---| +| Public API | 系统与框架 | 所有应用开发者 | 5个API版本| XTS| +| Test API | 测试框架 | 所有应用开发者| 3个API版本| 待构建 | +| System API | 系统与框架 |系统应用开发者 |不承诺| 待构建 | +| HDI | HDF| 系统服务 | 4个API版本| XTS | +| Driver API | HDF | 驱动开发者 | 不承诺 | 无 | +| Inner API | 系统部件 | 系统部件 | 不承诺 | 无 | -本章程由API SIG制定,经PMC批准发布;本对章程的修订必须经由API SIG评审后,由PMC批准发布。 -## API范围与定义 -应用程序接口(API)位于应用层和框架层之间,是由操作系统预定义的、由框架层和系统应用提供给应用(包括系统应用和三方应用)开发使用的类、方法等用户程序编程接口;不包括OEM扩展接口。 +各类型API说明如下: -![](/images/zh-cn/design/figures/API-Scope-And-Definition.png) +* Public API:OpenHarmony对所有应用开发者公开的API。 +* Test API:测试专用的API,供开发者使用。 +* System API:提供给系统特权应用使用的API,普通应用无法使用。 +* HDI:描述硬件能力的接口。 +* Driver API:提供给驱动开发者使用的接口。 +* Inner API:系统服务和框架实现彼此调用的API,仅供系统内部使用,不承诺兼容性。 -OpenHarmony API按可授权使用方分类包括: -- Public API:公开发布,提供给三方应用开发使用的API。 -- System API:非公开发布,仅授权平台签名应用(signature)、预置特权应用(privileged)使用的API。 -- Test API:受限发布,仅适用于xTS或应用调试阶段可使用的API。 -

如无特别说明,本章程定义的条款同时适用于Public API、System API或Test API等三种OpenHarmony API。针对System API和Test API的额外要求或例外说明,通过特别说明方式加以补充说明。

+### API与编程语言 -OpenHarmony API按编程语言分类包括: -- Java API:面向应用开放的Java编程语言接口。 -- JS API:面向应用开放的JavaScript编程语言接口。 -- Native API:面向应用开放的C/C++编程语言接口。 -

如无特别说明,本章程定义的条款同时适用于Java API、JS API和Native API等三种编程语言OpenHarmony API。

+OpenHarmony的目标是构建面向万物互联时代的新一代操作系统,其实现涵盖但不限于以下编程语言: + +* C/C++ +* JavaScript +* TypeScript + +本章程所描述的内容与编程语言无关。即:在不违反编程语言要求的情况下,API不分编程语言都要遵守章程的要求。 ## API治理 @@ -47,24 +65,26 @@ OpenHarmony API按编程语言分类包括: | - | - | |Contributor|API的设计和交付主体,负责API相关的代码与设计文档提交。| |Committer|API相关的代码评审,涉及API提交预审。| -|领域SIG|

新增API相关的代码提交评审,领域SIG评审通过即可合入。

变更API相关的代码提交预审。

| +|领域SIG| 新增API相关的代码提交评审,领域SIG评审通过即可合入。
变更API相关的代码提交预审。| |API SIG|变更API相关的代码提交评审。| |PMC|API Version计划发布、API治理章程修订评审发布等。| ### API评审流程 API评审流程如下: -![](/images/zh-cn/design/figures/API-Review-Process.png) + 主要过程说明: -1. API评审申请、代码提交(Owner:Contributor),除代码提交外,如果涉及API新增或变更需同步提交相应的API设计文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、领域SIG、API SIG等相关人员预审。 -1. 代码评审(Owner:Committer),代码评审和API预审,涉及API提交CodeReview通过后,还需要进一步领域SIG评审。如果单次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Committer评审,只有所有对应领域的Committer都完成CodeReview后才能进入下一评审环节。 + +1. API评审申请、代码提交(Owner:Contributor),所有涉及API新增或变更需同步提交相应的API评审文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、领域SIG、API SIG等相关人员预审。 +1. 代码评审(Owner:Committer),代码评审和API预审,涉及API提交Code Review通过后,还需要进一步领域SIG评审。如果单次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Committer评审,只有所有对应领域的Committer都完成CodeReview后才能进入下一评审环节。 1. API评审(Owner:领域SIG),新增API相关的代码提交评审,领域SIG评审通过即可代码合入;变更API相关的代码提交,领域SIG评审通过后,还需要进一步提交API SIG。如果单次提交同时涉及多个领域的API新增,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只需一个领域SIG评审通过即可代码合入。如果单次提交同时涉及多个领域的API变更,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只有所有对应领域的SIG都要评审通过才能进入下一评审环节。 1. API变更评审(Owner:API SIG),变更API相关的代码提交评审,评审通过即可代码。 1. 评审完成。 ### API评审申请要素 -如果涉及API新增或变更需同步提交相应的API设计文档。 + +如果涉及API新增或变更需同步提交相应的API评审文档。API评审文档使用[《OpenHarmony API 评审模板》](/pages/extra/ba75d2/)描述。 针对新增API,需要包含如下要素: 1. 需求来源与使用场景(必须)。 @@ -78,9 +98,11 @@ API评审流程如下: 针对变更API,需要额外包含如下要素: 1. 针对老接口的处理方式(废弃、隐藏或彻底删除)以及对使用老SDK开发应用的兼容措施(必须); 2. 变更影响、替代接口和相应的应用适配方案(必须)。 -3. 刷新ChangeLog(必须) 和 API-diff文档(涉及JS/Native API变更,必须;Java API的差异报告可工具化生成,不需要人工提交)。 +3. 刷新ChangeLog(必须) 和 API-diff文档(涉及JS/Native API变更,必须)。 ## API设计要求 + + ### 一致性要求 1. 概念一致性:基于场景的业务模型抽象,形成OpenHarmony的连贯、一致、自恰的用户程序模型和业务概念。 1. 术语一致性:相应的业务术语必须采用统一名词,不允许使用多个语意接近的名词表示同一个业务对象;同样地,为了避免产生混淆,也不允许针对不同的业务对象使用相同的名词或语言接近的名词。 @@ -103,10 +125,9 @@ API评审流程如下: 1. 作用域越大,命名应越精确。 1. 不用或少用缩写,业界通用术语遵从行业习惯允许使用缩写。 1. 包名/模块名/命名空间前缀约定: - 1. Java API 统一包名: package ohos.\*。 - 2. JS API 统一模块名:@ohos.\*。 - 3. Native API 统一命名空间:namespace OHOS.\*。 - 4. 引用外部开源代码的,可以保留原包名/模块名/命名空间,也可以按照上述规则对包名统一进行替换。 + 1. JS API 统一模块名:@ohos.\*。 + 2. Native API 统一命名空间:namespace OHOS.\*。 + 3. 引用外部开源代码的,可以保留原包名/模块名/命名空间,也可以按照上述规则对包名统一进行替换。 1. 包名/模块名/命名空间最短不少于2段,最长不超过4段;每一段建议使用一个单词,最长不超过2个单词。 1. 类名、方法名/函数名、成员变量、变量名最多不超过4个单词。 @@ -149,7 +170,7 @@ API评审流程如下: 1. 禁止“原型相同、功能不兼容”的API修改,可受限使用“废弃old-api、新增new-api”的方式进行修改。 1. 根据发布类型不同,API的生命周期和兼容性要求: -![](/images/zh-cn/design/figures/API-Lifecycle.png) +![](/images/design/figures/API-Lifecycle.png) 1. Canary版本:早期发布的预览版本,不承诺API稳定。 1. 对上一Release发布版本保持API兼容。 @@ -165,14 +186,33 @@ API评审流程如下: 1. 提供可替代接口。 1. 废弃API至少保留5个API Version版本(对废弃5个API Version的API可以彻底删除,不再支持)。 -### 性能/功耗/可靠性要求 +### 性能要求 1. 应及时响应,避免调用者等待;如果API调用执行时间过长应设计为异步方式。 -1. 应关注API调用时机、调用频次对RAM占用的影响。 -1. 应关注API调用时机、调用频次对功耗的影响。 -1. API内部创建对象的生命周期要闭合,避免对象资源泄漏。 -1. 满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。 +2. 应关注API调用时机、调用频次对RAM占用的影响。 +3. 应关注API调用时机、调用频次对功耗的影响。 +4. 对使用资源的API调用需要能及时释放资源,异常场景具备容错机制,保障资源及时释放。 + +### 功耗要求 + +1. 针对API调用时机、调用频次对功耗的影响做评估,有影响进行相关设计。 +2. 版本演进过程中,功耗不劣化。 + +### 可靠性要求 + +1. API不能因为外部输入(输入参数、系统状态、外部数据等)或者内部状态、数据异常而崩溃,应该返回确定的错误码或者抛出预定义的异常。 +2. API应明确调用是同步还是异步调用,若是同步调用,应明确超时上限或者允许调用者设置超时时间,避免调用卡死导致业务无响应。 +3. API务必支持多线程重入。 +4. 满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。 +5. API内部创建对象的生命周期要闭合,避免对象资源泄漏。 +6. API要明确客户端调用失败后,能够发起重试的最大次数。 ### 测试要求 1. 新增API必须同步交付API自动化测试用例,用例100%覆盖API接口。 -1. 用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。 -1. 用例执行高效,每条用例执行时间控制在毫秒级。 \ No newline at end of file +2. 用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。 +3. 用例执行高效,每条用例执行时间控制在毫秒级。 +4. 用例执行全自动化:接口用例需要达成100%自动化。 +5. 用例有效性:用户要求必须存在断言,且不能仅是检查是否抛出异常,需要有功能逻辑的断言。 + +### 编程语言要求 + +API根据其编程语言类型,需要遵守相应的OpenHarmony编程语言规范。 diff --git "a/website/docs/_posts/zh-cn/design/OpenHarmony\351\203\250\344\273\266\350\256\276\350\256\241\345\222\214\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/website/docs/_posts/zh-cn/design/OpenHarmony\351\203\250\344\273\266\350\256\276\350\256\241\345\222\214\345\274\200\345\217\221\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..ebfd74798c359973493ec00db9aa69858cea99cb --- /dev/null +++ "b/website/docs/_posts/zh-cn/design/OpenHarmony\351\203\250\344\273\266\350\256\276\350\256\241\345\222\214\345\274\200\345\217\221\346\214\207\345\215\227.md" @@ -0,0 +1,131 @@ +--- +title: OpenHarmony部件设计和开发指南 +permalink: /pages/extra/9998fe/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:56 +--- +# OpenHarmony部件设计和开发指南 + +## 前言 + +组件化、部件化、模块化是指软件基于组件、部件、模块解耦,实现各个领域软件分而治之的软件设计方法。它们的关系为:**组件**(可独立部署、二进制复用) > **部件**(可独立开发、编译和测试) > **模块**(代码级复用)。 + +OpenHarmony参考机械装配领域的零部件的概念将系统能力抽象为部件,通过拼装和配置部件的方式定制适用于不同设备的操作系统。 + +## 部件定义 + +部件是体现系统能力的基本单元,以源码为划分依据,具有独立的文件和目录,在不同设备上可以实例化为相应的库或可执行文件。 + +## 部件划分 + +部件按照如下原则进行划分: + +- 具备独立的代码目录,可独立编译出库或可执行文件。 + +- 小型和标准系统中的部件应具备独立部署的能力,非必选的部件被裁剪后不会导致系统异常。 + +- 功能可独立测试和验证。 + +部件在架构上按子系统归类,子系统是逻辑概念,它由具体的部件组成。 + +另外,几点说明如下: + +- 对于具有可配置特性的部件,特性可按需配置,特性有无不应导致部件对外提供的接口变化。 + +- 被依赖的三方开源软件库和提供基础能力的部件,称为**依赖部件**,跟随其他部件一起部署。 + +- 如果部件可拆分出更小的功能模块并向应用提供API,称这类模块为**子部件**,跟随父部件一起部署,无法独立部署。子部件依赖父部件,但父部件不允许依赖子部件。 + +## 基本原则 + +部件在设计和开发时应遵循如下规则和建议: + +**规则1.1** 部件应当实现独立自制原则,保持部件本身的解耦和独立。 + +**规则1.2** 部件应该去中心化治理,部件间的依赖关系应简单清晰合理。 + +**规则1.3** 禁止部件间反向依赖、循环依赖,下层部件禁止依赖上层部件。 + +**规则1.4** 禁止部件的实现依赖特定的开发板或产品形态。 + +**规则1.5** 部件接口应保持稳定,已发布的接口不能变化,保持接口兼容。 + +**建议1.1** 部件应支持自动化构建和验证的能力。 + +## 命名规则 + +#### **部件名** + +英文名:名词形式,需体现部件的功能,在系统内全局唯一,不超过63个有效英文字符,使用小写加下划线的内核风格命名,例如:unix_like。 +中文名:名词形式,需体现部件的功能,不超过16个中文字符,不建议中英文混合。 + +#### **仓名** + +部件仓名使用英文,命名规则:<子系统>_<部件>,例如:文件管理子系统的存储服务部件的仓名为“filemanagement_storage_service”。仓名总长度不超过100个字符。 + +> 说明: +> +> 1)部件和仓原则上是一一对应关系,特性情况下多个部件可以共享一个仓,但部件的目录必选独立。 +> +> 2)三方开源的部件名保持三方原始的命名,仓名前添加“third_party”前缀。三方开源部件统一放到third_party目录下。 +> +> 3)仓名和路径名中的子系统名均不带下划线。 + +#### **路径** + +部件目录使用英文,路径规则:<领域>/<子系统>/<部件>, 例如:foundation/filemanagement/storage_service。 + +#### **部件目录结构** + +```xml +├── interfaces # 接口 +│ ├── kits # 应用接口,可选 +│ │ ├── js # JS接口,可选 +│ │ └── native # C/C++接口,可选 +│ └── inner_api # 系统内部件间接口 +├── frameworks # 部件无独立进程的实现,可选 +│ ├── native # C/C++实现,可选 +│ └── js # JS API的实现,可选 +│ ├── napi # napi代码实现,可选 +│ ├── builtin # 仅用于LiteOS-M,可选 +│ └── plugin # Ark UI特有,可选 +├── services # 独立进程的实现,可选 +├── test # 测试代码,必选 +├── BUILD.gn # 编译入口,必选 +└── bundle.json # 部件描述文件,必选 +``` + +## 部件增删改 + +部件的新增、合并、删除需经架构SIG(Special Interest Group)和[相关领域的SIG leader](https://gitee.com/openharmony/community/blob/master/sig/sigs_subsystem_list.md)评审,流程如下: + +1、准备如下的部件属性列表: + +表1. 部件属性评审表 + +| 部件属性 | 说明 | +| ------------ | ------------------------------------------------------------ | +| 英文名称 | 名词形式,需体现部件的功能,在系统内全局唯一,不超过63个有效英文字符,使用小写加下划线的内核风格命名,例如:unix_like。 | +| 中文名称 | 名词形式,需体现部件的功能,不超过16个中文字符,不建议中英文混合。 | +| 子系统 | 部件归属的子系统 | +| 功能描述 | 一句话简要描述部件功能,100字以内。 | +| 可配置特性 | 部件对外可配置的特性。 | +| 适用系统类型 | 部件适用的系统类型:小型、轻量和标准,可以同时支持多种。 | +| 源码目录 | 部件的源码根目录。 | +| ROM | 部件设计的ROM基线值。 | +| RAM | 部件设计的RAM基线值。 | +| 依赖 | 部件依赖的其他部件和开源软件。 | + + +2、发邮件给架构SIG(dev@openharmony.io)和[相关领域的SIG leader](https://gitee.com/openharmony/community/blob/master/sig/sigs_subsystem_list.md)进行邮件评审,邮件标题【OpenHarmony部件新增/合并/删除评审申请】,邮件正文中按部件实际情况填写“表1.部件属性评审表" 。 + +> 说明:部件修改/合并需提供修改/合并前后部件属性,提供待删除的部件停止维护的计划。删除和合并部件要谨慎,要评估对存量版本的影响。 + +3、评审通过后,请按[SIG管理章程](https://gitee.com/openharmony/community/tree/master/sig)新建部件仓和修改manifest,SIG孵化完成后合入OpenHarmony组织代码主库。 \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..d59843dc5c97821aa41d9e597ef4f7229e19c1d0 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/Readme-CN.md @@ -0,0 +1,188 @@ +--- +title: Readme-CN +permalink: /pages/extra/ffeb4e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 导读 + +- [系统类型](#section767218232110) +- [文档导读](#section19810171681218) + +为了方便开发者正确获取内容,本导读基于OpenHarmony学习路径同时结合开发者具体业务对相关资料资源进行了分类。 + +## 系统类型 + +在正式学习OpenHarmony开发前,开发者需要先了解系统类型,方便后续根据自身业务匹配对应的系统及对应文档资源。 + +OpenHarmony是一款面向全场景的开源分布式操作系统,采用组件化设计,支持在128KiB到xGiB RAM资源的设备上运行系统组件,设备开发者可基于目标硬件能力自由选择系统组件进行集成。 + +为了保证在不同硬件上集成的易用性,OpenHarmony当前定义了三种基础系统类型,设备开发者通过选择基础系统类型完成必选组件集配置后,便可实现其最小系统的开发。这三种基础系统类型的参考定义如下: + +- 轻量系统(mini system) + + 面向MCU类处理器例如Arm Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。 + +- 小型系统(small system) + + 面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为1MiB,可以提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产品如智能家居领域的IP Camera、电子猫眼、路由器以及智慧出行域的行车记录仪等。 + +- 标准系统(standard system) + + 面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为128MiB,可以提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。 + + +OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按需配置,以支撑其特色功能的扩展或定制开发。系统将这些可选的系统组件组合为一系列描述为特性或功能的系统能力,以方便设备开发者理解和选择。 + +## 文档导读 + +- [轻量和小型系统开发指导](#table3762949121211) +- [标准系统开发指导](#table17667535516) + +**表 1** 轻量和小型系统开发指导(参考内存<128MB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

学习路径

+

开发者业务

+

相关文档

+

了解OpenHarmony

+

整体认知OpenHarmony

+
+

获取开发资源

+

准备开发前相关资源

+
+

快速入门

+

快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行。

+

轻量和小型系统快速入门

+

基础能力使用

+

使用OpenHarmony提供的基础能力

+
+

进阶开发

+

结合系统能力开发智能设备

+
+

移植适配

+
  • 针对特定芯片做移植适配
  • 对三方库进行移植适配
+
+

贡献组件

+

OpenHarmony贡献功能组件

+
+

参考

+

开发参考

+
+
+ +**表 2** 标准系统开发指导(参考内存≥128MB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

学习路径

+

开发者业务

+

相关文档

+

了解OpenHarmony

+

整体认知OpenHarmony

+
+

获取开发资源

+

准备开发前相关资源

+
+

快速入门

+

快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行。

+

标准系统快速入门

+

基础能力使用

+

使用OpenHarmony提供的基础能力

+
+

进阶开发

+

结合系统能力开发智能设备

+
+

移植适配

+

对三方库进行移植适配

+
+

贡献组件

+

OpenHarmony贡献功能组件

+
+

参考

+

开发参考

+
+
+ diff --git a/website/docs/_posts/zh-cn/device-dev/bundles/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/bundles/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..9824efda571f0e888fcd2b4ee2e1da0438f59903 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/bundles/Readme-CN.md @@ -0,0 +1,25 @@ +--- +title: Readme-CN +permalink: /pages/extra/0e7635/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Bundle开发指南 + +- [开发规范](/pages/01060101) +- [开发指南](/pages/extra/1fe808/) + - [概述](/pages/0106010201) + - [安装hpm命令行工具](/pages/0106010202) + - [开发Bundle](/pages/0106010203) +- [开发示例](/pages/extra/00c0e4/) + - [HPM介绍](/pages/0106010301) + - [编译环境准备](/pages/0106010302) + - [操作实例](/pages/0106010303) + diff --git a/website/docs/_posts/zh-cn/device-dev/bundles/bundles-demo.md b/website/docs/_posts/zh-cn/device-dev/bundles/bundles-demo.md new file mode 100644 index 0000000000000000000000000000000000000000..d8685edbe713e63a5401293eb804d79ea9acc97b --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/bundles/bundles-demo.md @@ -0,0 +1,22 @@ +--- +title: bundles-demo +permalink: /pages/extra/00c0e4/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 开发示例 + +- **[HPM介绍](/pages/0106010301)** + +- **[编译环境准备](/pages/0106010302)** + +- **[操作实例](/pages/0106010303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/bundles/bundles-guide.md b/website/docs/_posts/zh-cn/device-dev/bundles/bundles-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..614b3f2819b4cd9950248234cda1412405d51593 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/bundles/bundles-guide.md @@ -0,0 +1,22 @@ +--- +title: bundles-guide +permalink: /pages/extra/1fe808/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 开发指南 + +- **[概述](/pages/0106010201)** + +- **[安装hpm命令行工具](/pages/0106010202)** + +- **[开发Bundle](/pages/0106010203)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/bundles/bundles.md b/website/docs/_posts/zh-cn/device-dev/bundles/bundles.md new file mode 100644 index 0000000000000000000000000000000000000000..7b65da152f72d6cc2086483d483acb00d545d207 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/bundles/bundles.md @@ -0,0 +1,22 @@ +--- +title: bundles +permalink: /pages/extra/fcfa7e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# HPM bundle + +- **[开发规范](/pages/01060101)** + +- **[开发指南](/pages/extra/1fe808/)** + +- **[开发示例](/pages/extra/00c0e4/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/driver/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/driver/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..f56d0d85ed65b253af7528082a80c500cb08a7d7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/Readme-CN.md @@ -0,0 +1,59 @@ +--- +title: Readme-CN +permalink: /pages/extra/6e1f48/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 驱动使用指南 + +- [HDF驱动框架](/pages/extra/ad639e/) + - [HDF开发概述](/pages/0105020101) + - [驱动开发](/pages/0105020102) + - [驱动服务管理](/pages/0105020103) + - [驱动消息机制管理](/pages/0105020104) + - [配置管理](/pages/0105020105) + - [HDF开发实例](/pages/0105020106) +- [平台驱动开发](/pages/extra/c7b224/) + - [ADC](/pages/0105020201) + - [GPIO](/pages/0105020202) + - [HDMI](/pages/0105020203) + - [I2C](/pages/0105020204) + - [I3C](/pages/0105020205) + - [MIPI-CSI](/pages/0105020206) + - [MIPI-DSI](/pages/0105020207) + - [MMC](/pages/0105020208) + - [PWM](/pages/0105020209) + - [RTC](/pages/010502020a) + - [SDIO](/pages/010502020b) + - [SPI](/pages/010502020c) + - [UART](/pages/010502020d) + - [WatchDog](/pages/010502020e) +- [平台驱动使用](/pages/extra/924b53/) + - [ADC](/pages/0105020301) + - [GPIO](/pages/0105020302) + - [HDMI](/pages/0105020303) + - [I2C](/pages/0105020304) + - [I3C](/pages/0105020305) + - [MIPI-CSI](/pages/0105020306) + - [MIPI-DSI](/pages/0105020307) + - [PWM](/pages/0105020308) + - [RTC](/pages/0105020309) + - [SDIO](/pages/010502030a) + - [SPI](/pages/010502030b) + - [UART](/pages/010502030c) + - [WATCHDOG](/pages/010502030d) +- [外设驱动使用](/pages/extra/5201ae/) + - [LCD](/pages/0105020401) + - [TOUCHSCREEN](/pages/0105020402) + - [SENSOR](/pages/0105020403) + - [WLAN](/pages/0105020404) + - [AUDIO](/pages/0105020405) + - [USB](/pages/0105020406) + - [CAMERA](/pages/0105020407) diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver-develop.md b/website/docs/_posts/zh-cn/device-dev/driver/driver-develop.md new file mode 100644 index 0000000000000000000000000000000000000000..f05f62ed621275cfe3f6c141f388563c1c70eca6 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver-develop.md @@ -0,0 +1,42 @@ +--- +title: driver-develop +permalink: /pages/extra/c7b224/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 平台驱动开发 + +- **[ADC](/pages/0105020201)** + +- **[GPIO](/pages/0105020202)** + +- **[HDMI](/pages/0105020203)** + +- **[I2C](/pages/0105020204)** + +- **[I3C](/pages/0105020205)** + +- **[MIPI-CSI](/pages/0105020206)** + +- **[MIPI-DSI](/pages/0105020207)** + +- **[MMC](/pages/0105020208)** + +- **[PWM](/pages/0105020209)** + +- **[RTC](/pages/010502020a)** + +- **[SDIO](/pages/010502020b)** + +- **[SPI](/pages/010502020c)** + +- **[UART](/pages/010502020d)** + +- **[WatchDog](/pages/010502020e)** diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver-hdf.md b/website/docs/_posts/zh-cn/device-dev/driver/driver-hdf.md new file mode 100644 index 0000000000000000000000000000000000000000..7a804d04d2d53ee89d14fbbbf146e2016f0dc138 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver-hdf.md @@ -0,0 +1,28 @@ +--- +title: driver-hdf +permalink: /pages/extra/ad639e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# HDF驱动框架 + +- **[HDF开发概述](/pages/0105020101)** + +- **[驱动开发](/pages/0105020102)** + +- **[驱动服务管理](/pages/0105020103)** + +- **[驱动消息机制管理](/pages/0105020104)** + +- **[配置管理](/pages/0105020105)** + +- **[HDF开发实例](/pages/0105020106)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md b/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md new file mode 100644 index 0000000000000000000000000000000000000000..81d0bae8156d667e476e573eba7dd69b7e991d49 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md @@ -0,0 +1,382 @@ +--- +title: driver-peripherals-vibrator-des +permalink: /pages/extra/7006c5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Vibrator +- [概述](##概述) + - [功能简介](###功能简介) + - [运作机制](###运作机制) +- [开发指导](##开发指导) + - [接口说明](###接口说明) + - [开发步骤](###开发步骤) + - [开发实例](###开发实例) + +## 概述 + +### 功能简介 + +为了快速开发传感器驱动,基于HDF(Hardware Driver Foundation)驱动框架开发了马达驱动模型。马达设备模型抽象,屏蔽设备驱动与系统交互的实现,为硬件服务层提供统一稳定的驱动接口能力,为驱动开发者提供开放的接口实现和抽象的配置接口能力。用于不同操作系统马达设备部件的部署指导和马达设备部件驱动的开发。马达驱动模型如[图1](马达驱动模型图)所示: + +**图 1** 马达驱动模型图 + + + +### 运作机制 + +通过介绍马达驱动模型的加载以及运行流程,对模型内部关键组件以及关联组件之间的关系进行了划分,整体加载流程如[图2](#马达驱动运行图)所示: + +**图2** 马达驱动运行图 + + + +马达驱动模型以标准系统Hi3516DV300产品为例,介绍整个驱动加载及运行流程: + +1. 从device info HCS 的Vibrator Host读取Vibrator管理配置信息。 +2. 解析Vibrator配置信息,并关联对应设备驱动。 +3. 从linear_vibrator_config HCS读取Vibrator数据配置信息。 +4. 解析Vibrator数据配置信息,并关联对应Haptic驱动。 +5. 客户端下发Vibrator Stub控制到服务端。 +6. 服务端调用Vibrator Stub控制。 +7. 启动马达抽象驱动接口。 +8. Haptic中起线程,解析效果模块。 +9. Haptic调用马达抽象驱动中的Start接口。 +10. 马达抽象驱动调用马达差异化驱动中的Start接口。 + +## 开发指导 + +### 接口说明 + +马达驱动模型支持静态HCS配置和动态参数两种振动效果配置能力。马达硬件服务调用StartOnce接口动态配置持续振动;调用Start接口启动静态配置的振动效果。马达驱动模型对HDI开放的API接口能力,参考[表1](马达驱动模型对外API接口能力介绍)。 + +**表 1** 马达驱动模型对外API接口能力介绍 + +| 接口名 | 功能描述 | +| -------------------------------------- | -------------------------------------------------------- | +| int32_t StartOnce(uint32_t duration) | 按照指定持续时间触发振动马达,duration为振动持续时长。 | +| int32_t Start(const char *effectType) | 按照指定预置效果启动马达,effectType表示预置的预置效果。 | +| int32_t Stop(enum VibratorMode mode) | 按照指定的振动模式停止马达振动。 | + +### 开发步骤 + +Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能力接口,包括马达一次振动、马达效果配置震动、马达停止。基于HDF(Hardware Driver Foundation)驱动框架开发的马达驱动模型,实现跨操作系统迁移、器件差异配置等功能。马达具体的开发步骤如下: + +1. 基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现,配置资源和HCS解析。 +2. 创建马达效果模型,解析马达效果HCS配置。 +3. 完成马达振动和停止接口开发,会根据振动效果的模式创建和销毁定时器。 +4. 马达驱动模型提供给开发者马达驱动差异化接口,开发者实现差异化接口。 + +### 开发实例 + +1. 马达驱动的初始化和去初始化 + + - 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出马达驱动模型,使用HCS作为配置描述源码。HCS配置字段详细介绍参考[配置管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md)。其中Driver Entry入口函数定义如下: + + ``` + /* 注册马达抽象驱动入口数据结构体对象 */ + struct HdfDriverEntry g_vibratorDriverEntry = { + .moduleVersion = 1, //马达模块版本号 + .moduleName = "HDF_VIBRATOR", //马达模块名,要与device_info.hcs文件里的马达moduleName字段值一样 + .Bind = BindVibratorDriver, //马达绑定函数 + .Init = InitVibratorDriver, //马达初始化函数 + .Release = ReleaseVibratorDriver, //马达资源释放函数 + }; + + HDF_INIT(g_vibratorDriverEntry); + ``` + + - 基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。 + + ``` + /* 马达驱动对外发布的能力 */ + static int32_t DispatchVibrator(struct HdfDeviceIoClient *client, + int32_t cmd, struct HdfSBuf *data, struct HdfSBuf *reply) + { + int32_t loop; + + for (loop = 0; loop < sizeof(g_vibratorCmdHandle) / sizeof(g_vibratorCmdHandle[0]); ++loop) { + if ((cmd == g_vibratorCmdHandle[loop].cmd) && (g_vibratorCmdHandle[loop].func != NULL)) { + return g_vibratorCmdHandle[loop].func(data, reply); + } + } + + return HDF_SUCCESS; + } + + /* 马达驱动对外提供的服务绑定到HDF框架 */ + int32_t BindVibratorDriver(struct HdfDeviceObject *device) + { + struct VibratorDriverData *drvData = NULL; + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(device, HDF_FAILURE); + + drvData = (struct VibratorDriverData *)OsalMemCalloc(sizeof(*drvData)); + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_MALLOC_FAIL); + + drvData->ioService.Dispatch = DispatchVibrator; + drvData->device = device; + device->service = &drvData->ioService; + g_vibratorDrvData = drvData; + + return HDF_SUCCESS; + } + + /* 马达驱动初始化入口函数*/ + int32_t InitVibratorDriver(struct HdfDeviceObject *device) + { + struct VibratorDriverData *drvData = NULL; + + drvData->mode = VIBRATOR_MODE_BUTT; + drvData->state = VIBRATOR_STATE_IDLE; + ...... + if (CreateVibratorHaptic(device) != HDF_SUCCESS) { + HDF_LOGE("%s: init workQueue fail!", __func__); + return HDF_FAILURE; + } + + return HDF_SUCCESS; + } + + /* 释放马达驱动初始化时分配的资源 */ + void ReleaseVibratorDriver(struct HdfDeviceObject *device) + { + struct VibratorDriverData *drvData = NULL; + ...... + (void)DestroyVibratorHaptic(); + (void)OsalMutexDestroy(&drvData->mutex); + (void)OsalMemFree(drvData); + g_vibratorDrvData = NULL; + } + ``` + + - 马达设备管理模块负责系统中马达器件接口发布,在系统启动过程中,HDF框架机制通过马达 Host里设备HCS配置信息,加载设备管理驱动。 + + ``` + /* 马达设备HCS配置 */ + vibrator :: host { + hostName = "vibrator_host"; + device_vibrator :: device { + device0 :: deviceNode { + policy = 2; //驱动服务发布的策略 + priority = 100; //驱动启动优先级(0-200),值越大优先级越低,建议配置100,优先级相同则不保证device的加载顺序 + preload = 0; //驱动按需加载字段,0表示加载,2表示不加载 + permission = 0664; //驱动创建设备节点权限 + moduleName = "HDF_VIBRATOR"; //驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 + serviceName = "hdf_misc_vibrator"; //驱动对外发布服务的名称,必须唯一 + deviceMatchAttr = "hdf_vibrator_driver"; //驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等 + } + } + ``` + +2. 创建马达效果模型,解析马达效果HCS配置。 + + - 创建马达效果模型。 + + ``` + /* 创建马达效果模型,分配资源,解析马达HCS配置 */ + int32_t CreateVibratorHaptic(struct HdfDeviceObject *device) + { + struct VibratorHapticData *hapticData = NULL; + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(device, HDF_FAILURE); + + hapticData = (struct VibratorHapticData *)OsalMemCalloc(sizeof(*hapticData)); + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(hapticData, HDF_ERR_MALLOC_FAIL); + g_vibratorHapticData = hapticData; + hapticData->supportHaptic = false; + + if (OsalMutexInit(&hapticData->mutex) != HDF_SUCCESS) { + HDF_LOGE("%s: fail to init mutex", __func__); + goto EXIT; + } + + DListHeadInit(&hapticData->effectSeqHead); + + /* 解析马达效果HCS配置 */ + if (ParserVibratorHapticConfig(device->property) != HDF_SUCCESS) { + HDF_LOGE("%s: parser haptic config fail!", __func__); + goto EXIT; + } + + return HDF_SUCCESS; + EXIT: + OsalMemFree(hapticData); + return HDF_FAILURE; + } + ``` + + - 马达效果模型使用HCS作为配置描述源码,HCS配置字段详细介绍参考[配置管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md)。 + + ``` + /* 马达数据配置模板(vibrator_config.hcs) */ + root { + vibratorConfig { + boardConfig { + match_attr = "hdf_vibrator_driver"; //需要和马达设备配置match_attr字段保持一致 + vibratorAttr { + /* 0:转子 1:线性 */ + deviceType = 1; //设备类型 + supportPreset = 1; //支持的预设类型 + } + vibratorHapticConfig { + haptic_clock_timer { + effectName = "haptic.clock.timer"; + type = 1; // 0 内置模式, 1 时间序列 + seq = [600, 600, 200, 600]; // 时间序列 + } + haptic_default_effect { + effectName = "haptic.default.effect"; + type = 0; + seq = [0, 3, 800, 1]; + } + } + } + } + } + ``` + +3. 完成马达振动和停止接口开发,会根据振动效果的模式创建和销毁定时器。 + + 马达硬件服务调用StartOnce接口动态配置持续振动时间;调用StartEffect接口启动静态配置的振动效果,为驱动开发者提供抽象的配置接口能力。 + + ``` + /* 按照指定持续时间触发振动马达,duration为振动持续时长 */ + static int32_t StartOnce(struct HdfSBuf *data, struct HdfSBuf *reply) + { + uint32_t duration; + int32_t ret; + struct VibratorEffectCfg config; + struct VibratorDriverData *drvData = GetVibratorDrvData(); + (void)reply; + ...... + config.cfgMode = VIBRATOR_MODE_ONCE; + config.duration = duration; + config.effect = NULL; + /* 据振动效果的模式创建 */ + ret = StartHaptic(&config); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: start haptic fail!", __func__); + return ret; + } + + return HDF_SUCCESS; + } + + /* 按照预置效果启动马达,effectType表示预置的预置效果 */ + static int32_t StartEffect(struct HdfSBuf *data, struct HdfSBuf *reply) + { + int32_t ret; + const char *effect = NULL; + struct VibratorEffectCfg config; + struct VibratorDriverData *drvData = GetVibratorDrvData(); + (void)reply; + ...... + config.cfgMode = VIBRATOR_MODE_PRESET; + config.duration = 0; + config.effect = effect; + + ret = StartHaptic(&config); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: start haptic fail!", __func__); + return ret; + } + + return HDF_SUCCESS; + } + + /* 按照指定的振动模式停止马达振动 */ + static int32_t Stop(struct HdfSBuf *data, struct HdfSBuf *reply) + { + int32_t ret; + int32_t mode; + struct VibratorDriverData *drvData = GetVibratorDrvData(); + (void)reply; + ...... + /* 停止马达效果振动,销毁马达定时器 */ + ret = StopHaptic(); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: stop haptic fail!", __func__); + return ret; + } + + (void)OsalMutexLock(&drvData->mutex); + drvData->mode = VIBRATOR_MODE_BUTT; + (void)OsalMutexUnlock(&drvData->mutex); + + return HDF_SUCCESS; + } + ``` + +4. 马达驱动模型提供给开发者马达驱动差异化接口,开发者实现差异化接口。 + + - 此接口在差异化器件驱动初始化成功时,注册差异实现接口,方便实现器件差异的驱动接口。 + + ``` + /* 注册马达差异化实现接口 */ + int32_t RegisterVibrator(struct VibratorOps *ops) + { + struct VibratorDriverData *drvData = GetVibratorDrvData(); + + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(ops, HDF_FAILURE); + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(drvData, HDF_FAILURE); + + (void)OsalMutexLock(&drvData->mutex); + drvData->ops.Start = ops->Start; + drvData->ops.StartEffect = ops->StartEffect; + drvData->ops.Stop = ops->Stop; + (void)OsalMutexUnlock(&drvData->mutex); + + return HDF_SUCCESS; + } + ``` + + - 马达驱动模型提供给开发者马达驱动差异化接口,具体实现如下: + + ``` + /* 按照指定持续时间触发马达线性驱动 */ + static int32_t StartLinearVibrator() + { + int32_t ret; + struct VibratorLinearDriverData *drvData = GetLinearVibratorData(); + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(drvData, HDF_FAILURE); + ...... + ret = GpioWrite(drvData->gpioNum, GPIO_VAL_LOW); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: pull gpio%d to %d level failed", __func__, drvData->gpioNum, GPIO_VAL_LOW); + return ret; + } + return HDF_SUCCESS; + } + + /* 按照预置振动效果启动马达线性驱动 */ + static int32_t StartEffectLinearVibrator(uint32_t effectType) + { + (void)effectType; + HDF_LOGE("%s: vibrator set build-in effect no support!", __func__); + return HDF_SUCCESS; + } + + /* 按照指定的振动模式停止马达线性驱动 */ + static int32_t StopLinearVibrator() + { + int32_t ret; + struct VibratorLinearDriverData *drvData = GetLinearVibratorData(); + CHECK_VIBRATOR_NULL_PTR_RETURN_VALUE(drvData, HDF_FAILURE); + ...... + ret = GpioWrite(drvData->gpioNum, GPIO_VAL_HIGH); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: pull gpio%d to %d level failed", __func__, drvData->gpioNum, GPIO_VAL_HIGH); + return ret; + } + return HDF_SUCCESS; + } + ``` + + + diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals.md b/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals.md new file mode 100644 index 0000000000000000000000000000000000000000..290ca321bb3d03f466e40807435baeba38b22445 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver-peripherals.md @@ -0,0 +1,24 @@ +--- +title: driver-peripherals +permalink: /pages/extra/5201ae/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 外设驱动使用 + +- **[LCD](/pages/0105020401)** + +- **[TOUCHSCREEN](/pages/0105020402)** + +- **[SENSOR](/pages/0105020403)** + +- **[WLAN](/pages/0105020404)** + +- **[AUDIO](/pages/0105020405)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver-platform.md b/website/docs/_posts/zh-cn/device-dev/driver/driver-platform.md new file mode 100644 index 0000000000000000000000000000000000000000..f29ca1e14f9f45d95595730545a954e7d873806f --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver-platform.md @@ -0,0 +1,40 @@ +--- +title: driver-platform +permalink: /pages/extra/924b53/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 平台驱动使用 + +- **[ADC](/pages/0105020301)** + +- **[GPIO](/pages/0105020302)** + +- **[HDMI](/pages/0105020303)** + +- **[I2C](/pages/0105020304)** + +- **[I3C](/pages/0105020305)** + +- **[MIPI-CSI](/pages/0105020306)** + +- **[MIPI-DSI](/pages/0105020307)** + +- **[PWM](/pages/0105020308)** + +- **[RTC](/pages/0105020309)** + +- **[SDIO](/pages/010502030a)** + +- **[SPI](/pages/010502030b)** + +- **[UART](/pages/010502030c)** + +- **[WATCHDOG](/pages/010502030d)** diff --git a/website/docs/_posts/zh-cn/device-dev/driver/driver.md b/website/docs/_posts/zh-cn/device-dev/driver/driver.md new file mode 100644 index 0000000000000000000000000000000000000000..53652c1de78d8360c8985b5bc12b87b9b5b90973 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/driver/driver.md @@ -0,0 +1,24 @@ +--- +title: driver +permalink: /pages/extra/bf4d26/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 驱动 + +- **[HDF驱动框架](/pages/extra/ad639e/)** + +- **[平台驱动开发](/pages/extra/c7b224/)** + +- **[平台驱动使用](/pages/extra/924b53/)** + +- **[外设驱动使用](/pages/extra/5201ae/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/faqs/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/faqs/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..a02af4b64405462ac17dc350617a41ca829c143e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/faqs/Readme-CN.md @@ -0,0 +1,24 @@ +--- +title: Readme-CN +permalink: /pages/extra/3d816b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# FAQs + +- [常见问题概述](/pages/010c0401) +- [环境搭建常见问题](/pages/010c0402) +- [编译构建子系统常见问题](/pages/010c0403) +- [烧录常见问题](/pages/010c0404) +- [内核常见问题](/pages/010c0405) +- [移植常见问题](/pages/010c0406) +- [启动恢复常见问题](/pages/010c0407) +- [系统应用常见问题](/pages/010c0408) + diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/get-code/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..d661ca913a79e823855b7ac9c219ffb16db4caa2 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/get-code/Readme-CN.md @@ -0,0 +1,22 @@ +--- +title: Readme-CN +permalink: /pages/extra/9279fd/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 获取源码 + +- [获取源码](/pages/extra/f144a2/) + - [源码获取](/pages/extra/00a0c5/) + +- [获取工具](/pages/extra/fc0c41/) + - [Docker编译环境](/pages/010b01) + - [IDE](/pages/010b02) + diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/gettools-acquire.md b/website/docs/_posts/zh-cn/device-dev/get-code/gettools-acquire.md deleted file mode 100644 index 3caff48b896eb72fd9712f7f708d29b9c450f75f..0000000000000000000000000000000000000000 --- a/website/docs/_posts/zh-cn/device-dev/get-code/gettools-acquire.md +++ /dev/null @@ -1,325 +0,0 @@ ---- -title: gettools-acquire.md -permalink: /pages/extra/70d134/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:40 ---- -# Docker编译环境 - -- [Docker环境介绍](#section107932281315) -- [环境准备](#section7337134183512) -- [独立Docker环境](#section2858536103611) - - [搭建Docker环境-轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB)](#section319412277287) - - [编译源码-轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB)](#section631485163615) - - [搭建Docker环境-标准系统类设备(参考内存≥128MB)](#section13585262391) - - [编译源码-标准系统类设备(参考内存≥128MB)](#section193711513406) - -- [基于HPM的Docker环境](#section485713518337) - - [搭建Docker环境](#section3295842510) - - [获取及编译源码](#section69141039143518) - - -## Docker环境介绍 - -OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下: - -- 独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 -- 基于HPM的Docker环境:适用于使用HPM工具进行发行版编译的场景。 - -**表 1** Docker镜像介绍 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Docker环境

-

系统类型

-

运行平台

-

Docker镜像仓库

-

标签

-

独立 Docker环境

-

轻量和小型系统

-

Ubuntu/Windows

-

swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker

-

0.0.5

-

标准系统

-

Ubuntu

-

swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard

-

0.0.2

-

HPM Docker环境

-

轻量和小型系统

-

Ubuntu/Windows

-

swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker

-

0.0.3

-
- -## 环境准备 - -在使用docker环境前需要先完成以下操作: - -1. 安装Docker,Docker安装请参考[官方指导](https://docs.docker.com/engine/install/)。 -2. 获取OpenHarmony源码,请参考[获取源码](/pages/extra/dade07/)。 - - >![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** - >HPM Docker环境无需单独获取源码。 - - -## 独立Docker环境 - -OpenHarmony的Docker镜像托管在[HuaweiCloud SWR](https://console.huaweicloud.com/swr/?region=cn-south-1#/app/warehouse/warehouseMangeDetail/goldensir/openharmony-docker/openharmony-docker?type=ownImage)上。开发者可以通过该镜像在很大程度上简化编译前的环境配置。下文将介绍具体使用步骤。 - -### 搭建Docker环境-轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB) - -**方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:** - -1. 获取Docker镜像。 - - ``` - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - -2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ubuntu下执行: - - ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - windows下执行(假设源码目录为D:\\OpenHarmony): - - ``` - docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - -**方式二:通过Dockerfile 构建本地Docker镜像进行构建** - -1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 - - ``` - git clone https://gitee.com/openharmony/docs.git - ``` - -2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。 - - ``` - cd docs/docker - ./build.sh - ``` - -3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ubuntu下执行: - - ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - windows下执行(假设源码目录为D:\\OpenHarmony): - - ``` - docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5 - ``` - - -### 编译源码-轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB) - -通过如下编译脚本启动轻量系统类设备(参考内存≥128KB)和小型系统类设备(参考内存≥1MB)的编译。下文以Hi3516平台为例说明具体编译步骤。 - -设置编译路径,选择当前路径。 - -``` -hb set - . -``` - -**图 1** 设置编译界面 - - -![](/images/zh-cn/device-dev/get-code/figure/zh-cn_image_0000001101413884.png) - ->![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** ->当前开发板平台和编译界面的对应关系如下: ->- Hi3861:wifiiot\_hispark\_pegasus@hisilicon ->- Hi3516:ipcamera\_hispark\_taurus@hisilicon ->- Hi3518:ipcamera\_hispark\_aries@hisilicon - -1. 选择ipcamera\_hispark\_taurus@hisilicon并回车。 -2. 执行编译。 - - ``` - hb build -f - ``` - -3. 查看编译结果。 - - 编译结果文件生成在out/hispark\_taurus/ipcamera\_hispark\_taurus目录下。 - - -### 搭建Docker环境-标准系统类设备(参考内存≥128MB) - -**方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:** - -1. 获取Docker镜像。 - - ``` - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.2 - ``` - -2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ``` - docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.2 - ``` - - -**方式二:通过Dockerfile 构建本地Docker镜像进行构建** - -1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 - - ``` - git clone https://gitee.com/openharmony/docs.git - ``` - -2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。 - - ``` - cd docs/docker/standard - ./build.sh - ``` - -3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 - - ``` - docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.2 - ``` - - -### 编译源码-标准系统类设备(参考内存≥128MB) - -1. 在源码的根目录执行预处理脚本。 - - ``` - ../scripts/prepare.sh - ``` - -2. 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。 - - ``` - ./build.sh --product-name {product_name} - ``` - - \{product\_name\}为当前版本支持的平台。比如:Hi3516DV300等。 - - 编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。 - - ->![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** ->退出Docker执行exit命令即可。 - -## 基于HPM的Docker环境 - -docker\_dist是一个[HPM](https://hpm.harmonyos.com/)系统中的模板组件,能够帮助用户快速初始化HPM工程,利用docker镜像来快速编译OpenHarmony发行版,在很大程度上简化了编译前的环境配置。开发者在配置好Ubuntu和[hpm-cli](/pages/000802)开发环境后,可以通过以下步骤来使用我们提供的Docker环境。 - -### 搭建Docker环境 - -1. 初始化安装模板。在任意工作目录中执行以下命令。 - - ``` - hpm init -t @ohos/docker_dist - ``` - -2. 修改publishAs。 - - 因为获取到的是模板类型的包,要把包的类型改为需要的类型。 在当前目录下打开bundle.json文件,把"publishAs"字段的值由"template"改为"distribution"。 - - -### 获取及编译源码 - -执行编译。自动安装docker只能在Ubuntu环境下执行,如果其他环境,需要用户自行安装docker,然后拉取镜像,执行编译。 - -- **自动安装docker(Ubuntu环境)** - - 以下命令可以帮助用户自动安装docker, 拉取镜像,并且在容器中开始运行对应解决方案的拉取和编译。 - - **方式一:** - - 命令后接参数指定解决方案,格式如下: - - ``` - hpm run docker solution={product} - ``` - - \{product\}为需编译的解决方案,如:@ohos/hispark\_taurus、@ohos/hispark\_aries、@ohos/hispark\_pegasus。 - - **方式二:** - - 设置环境变量来选择解决方案,再执行编译命令。 - - 1. 选择解决方案。 - - ``` - export solution={product} - ``` - - \{product\}为需编译的解决方案,如:@ohos/hispark\_taurus、@ohos/hispark\_aries、@ohos/hispark\_pegasus。 - - 2. 获取源码及执行编译。 - - ``` - hpm run docker - ``` - - 以上两种方式以@ohos/hispark\_taurus为例,执行成功结果如下: - - ``` - ...... - ohos ipcamera_hispark_taurus build success! - @ohos/hispark_taurus: distribution building completed. - ``` - - -- **自行安装docker(非Ubuntu环境)** - - 自行安装docker相关操作如下: - - ``` - # 拉取镜像 - docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.3# linux环境下的编译 - hpm run distWithDocker solution={product} - # windows下的编译,需要配置gitbash - hpm config set shellPath "gitbash路径" - hpm run distWithDocker solution={product} - ``` - - diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/gettools-ide.md b/website/docs/_posts/zh-cn/device-dev/get-code/gettools-ide.md deleted file mode 100644 index 8629f55b05794ac4e5159f5902ddad24ec0ac387..0000000000000000000000000000000000000000 --- a/website/docs/_posts/zh-cn/device-dev/get-code/gettools-ide.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: gettools-ide.md -permalink: /pages/extra/20bf1d/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:44 ---- -# IDE - -- [获取设备开发工具(HUAWEI DevEco Device Tool)](#section2452141120244) -- [获取应用开发工具(HUAWEI DevEco Studio)](#section0904101019258) - -## 获取设备开发工具(HUAWEI DevEco Device Tool) - -HUAWEI DevEco Device Tool是OpenHarmony面向智能设备开发者提供的一站式集成开发环境,支持OpenHarmony的组件按需定制,支持代码编辑、编译、烧录、调试等功能,支持C/C++语言,以插件的形式部署在Visual Studio Code上。具体可参见[获取工具](https://device.harmonyos.com/cn/ide)和[工具使用指南](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905)**。** - -Huawei DevEco Device Tool支持 OpenHarmony设备开发的演进路标如下: - -![](/images/zh-cn/device-dev/get-code/figure/3-28.png) - -## 获取应用开发工具(HUAWEI DevEco Studio) - -HUAWEI DevEco Studio(以下简称DevEco Studio)是面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的OpenHarmony应用开发服务。通过使用DevEco Studio,开发者可以更高效的开发具备OpenHarmony分布式能力的应用,进而提升创新效率。具体可参见[获取工具](https://developer.harmonyos.com/cn/develop/deveco-studio)和[工具使用指南](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)。 - diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/gettools.md b/website/docs/_posts/zh-cn/device-dev/get-code/gettools.md new file mode 100644 index 0000000000000000000000000000000000000000..b836f7bb615766c4efceeb51ebbcbe65e168fa6d --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/get-code/gettools.md @@ -0,0 +1,20 @@ +--- +title: gettools +permalink: /pages/extra/fc0c41/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 获取工具 + +- **[Docker编译环境](/pages/010b01)** + +- **[IDE](/pages/010b02)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode-acquire.md b/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode-acquire.md index 69f3641e2ea1e6d8e3cd76eff09bf348bc5d2d9f..dfa942094488c3887d8e314315445cf3645baa2e 100644 --- a/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode-acquire.md +++ b/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode-acquire.md @@ -1,48 +1,50 @@ --- -title: sourcecode-acquire.md -permalink: /pages/extra/dade07/ +title: sourcecode-acquire +permalink: /pages/extra/00a0c5/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:40 +date: 2022-02-12 09:01:58 --- -# 源码获取 +# 获取源码 - [OpenHarmony介绍](#section6370143622110) -- [源码获取概述](#section12763342204) -- [获取方式1:从代码仓库获取](#section537312010229) +- [获取源码概述](#section12763342204) +- [获取方式1:从码云仓库获取](#section537312010229) - [适用场景](#section10881513459) - [前提条件](#section102871547153314) - [操作步骤](#section429012478331) -- [获取方式2:从HPM获取](#section463013147412) +- [获取方式2:从DevEco Marketplace获取](#section463013147412) - [适用场景](#section26661067443) - [前提条件](#section17544943123315) - [操作步骤](#section954619433333) - [获取方式3:从镜像站点获取](#section1186691118430) +- [获取方式4:从github镜像仓库获取\(每天UTC时间23点同步\)](#section23448418360) - [源码目录简介](#section1072115612811) ## OpenHarmony介绍 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。 -开源代码仓库地址:[https://openharmony.gitee.com](https://openharmony.gitee.com) +开源代码仓库地址:[https://openharmony.gitee.com](https://openharmony.gitee.com)。 -## 源码获取概述 +## 获取源码概述 -本文档将介绍如何获取OpenHarmony源码并说明OpenHarmony的源码目录结构。OpenHarmony的代码以[组件](/pages/000800)的形式开放,开发者可以通过如下其中一种方式获取: +本文档将介绍如何获取OpenHarmony源码并说明OpenHarmony的源码目录结构。OpenHarmony的代码以[组件](/pages/01060101)的形式开放,开发者可以通过如下其中一种方式获取: -- **获取方式1**:从代码仓库获取。通过repo或git工具从代码仓库中下载,此方式可获取最新代码。 -- **获取方式2**:通过HPM包管理器获取。在[HPM](https://hpm.harmonyos.com)网站,查找满足需求的开源发行版,直接下载(或者定制后下载),再通过hpm-cli命令工具将所需的组件及工具链下载、安装到本地。 +- **获取方式1**:从码云代码仓库获取。通过repo或git工具从代码仓库中下载,此方式可获取最新代码。 +- **获取方式2**:通过[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站获取。访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站,查找满足需求的开源发行版,直接下载(或者定制后下载),再通过hpm-cli命令工具将所需的组件及工具链下载、安装到本地。 - **获取方式3**:从镜像站点下载归档后的发行版压缩文件。如果要获取旧版本的源码,也可通过此方式获取,此方式下载速度较快。 +- **获取方式4**:从github代码仓库获取。通过repo或git工具从代码仓库中下载,此方式可获取最新代码。 -## 获取方式1:从代码仓库获取 +## 获取方式1:从码云仓库获取 ### 适用场景 @@ -61,7 +63,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 1. 注册码云gitee账号。 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装[git客户端](http://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 +3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 ``` git config --global user.name "yourname" @@ -80,14 +82,14 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 ### 操作步骤 -**获取轻量/小型/标准系统(2.0 Canary)源码** +**获取轻量/小型/标准系统源码** ->![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** ->主干代码为开发分支,开发者可通过主干代码获取最新特性。release分支代码相对比较稳定,开发者可基于release分支代码进行商用功能开发。 +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>Master主干为开发分支,开发者可通过Master主干获取最新特性。发布版本代码相对比较稳定,开发者可基于发布版本代码进行商用功能开发。 - **OpenHarmony主干代码获取** - 方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify @@ -95,7 +97,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 repo forall -c 'git lfs pull' ``` - 方式二:通过repo + https 下载。 + 方式二:通过repo + https下载。 ``` repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify @@ -103,27 +105,16 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 repo forall -c 'git lfs pull' ``` +- **OpenHarmony发布版本代码获取** -- **OpenHarmony release 分支最新代码获取** + OpenHarmony发布版本获取源码方式请参考[Release-Notes](/pages/010104)。 - >![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** - >当前通过release分支只能获取轻量和小型系统源码。 - 通过repo下载。 - - ``` - repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify - repo sync -c - repo forall -c 'git lfs pull' - ``` - -- OpenHarmony其他版本源码获取方式请参考版本[Release-Notes](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/Readme.md)。 - -## 获取方式2:从HPM获取 +## 获取方式2:从DevEco Marketplace获取 ### 适用场景 -对于刚接触OpenHarmony的新用户,希望能够参考一些示例解决方案从而进行快速开发。可以在[HPM](https://hpm.harmonyos.com)网站获取下载开源发行版,也可以在开源发行版的基础上定制(添加或删除组件)。然后通过包管理器命令行工具(hpm-cli)将需要的组件及相关的编译工具链全部下载、安装到本地。 +对于刚接触OpenHarmony的新用户,希望能够参考一些示例解决方案从而进行快速开发。可以在[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home)网站获取下载开源发行版,也可以在开源发行版的基础上定制(添加或删除组件)。然后通过包管理器命令行工具(hpm-cli)将需要的组件及相关的编译工具链全部下载、安装到本地。 ### 前提条件 @@ -133,7 +124,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 官网下载并在本地安装Node.js. - 推荐安装 [Node.js](https://nodejs.org/) 12.x \(包含 npm 6.14.4\)或更高版本 \(推荐 12.13.0+\)。 + [Node.js](https://nodejs.org/) 版本需不低于12.x \(包含npm 6.14.4\),推荐安装LTS版本。 2. 通过Node.js自带的npm安装hpm命令行工具。 @@ -159,15 +150,13 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 ### 操作步骤 1. 查找发行版。 - 1. 打开包管理页面[HPM](https://hpm.harmonyOS.com),设定搜索的对象为“发行版“,如下图所示。 + 1. 访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home),设定搜索的对象为“设备组件“,并在左侧边栏选择“开源发行版“,如下图所示。 2. 在搜索框输入关键字搜索,如“摄像头”。 3. 结果中显示与关键字匹配的发行版,可以进一步根据组件类别等过滤条件(如:适配的开发板,内核)精确筛选。 4. 查找合适的发行版,点击查看发行版的详情介绍。 - **图 1** 包管理 - - - ![](/images/zh-cn/device-dev/get-code/figure/zh-cn_image_0000001119915556.png) + **图 1** 包管理 + ![](/images/device-dev/get-code/figure/包管理.png "包管理") 2. 了解发行版详情。 @@ -175,10 +164,8 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 2. 点击「直接下载」,将发行版下载到本地。 3. 点击「定制组件」,将对发行版包含的组件进行定制(添加/删除)。 - **图 2** 发行版示例 - - - ![](/images/zh-cn/device-dev/get-code/figure/zh-cn_image_0000001119755646.png) + **图 2** 发行版示例 + ![](/images/device-dev/get-code/figure/发行版示例.png "发行版示例") 3. 定制组件。 1. 进入发行版的定制页面,如下图所示。 @@ -186,169 +173,211 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 3. 在右边填写您的项目基本信息,包括名称、版本、描述等信息。 4. 点击“下载“,系统会根据您的选择,生成相应的OpenHarmony代码结构文件\(如my\_cust\_dist.zip\),保存至本地文件。 - **图 3** 组件定制 - + **图 3** 组件定制 + ![](/images/device-dev/get-code/figure/组件定制.png "组件定制") - ![](/images/zh-cn/device-dev/get-code/figure/zh-cn_image_0000001166715379.png) - -4. 下载安装组件。 - 1. 解压下载的压缩文件,用命令行工具CMD(Linux下的Shell终端) - 2. 在解压后的文件目录下执行hpm install指令 - 3. 下载的组件存在工程目录下的ohos\_bundles文件夹中(部分组件安装后会将源码复制到指定目录下)。 +4. 安装组件。 + 1. 解压下载的压缩文件,用命令行工具CMD(Linux下的Shell终端)。 + 2. 在解压后的文件目录下执行hpm install指令,系统会自动下载并安装组件。安装窗口显示“Install sucessful”表示组件下载及安装成功。 + 3. 下载的组件将保存在工程目录下的ohos\_bundles文件夹中(部分组件安装后会将源码复制到指定目录下)。 ## 获取方式3:从镜像站点获取 为了获得更好的下载性能,您可以选择从以下站点的镜像库获取源码或者对应的解决方案。 ->![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** ->- 本部分只提供OpenHarmony Master最新版本和LTS最新版本的源码获取方式, 其他版本源码获取方式以及具体版本信息请参考[Release-Notes](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/Readme.md) ->- 当前Master 1.0版本已经不再维护。 +本部分只提供OpenHarmony Master最新版本和LTS最新版本的获取源码方式, 其他版本获取源码方式以及具体版本信息请参考[Release-Notes](/pages/010104)。 -**表 1** 源码获取路径 +**表 1** 获取源码路径 -

LTS版本源码

+ + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + +

LTS版本源码

+

版本信息

+

下载站点

+

SHA256校验码

+

全量代码(标准、轻量和小型系统)

版本信息

+

3.0

下载站点

+

站点

SHA256校验码

+

SHA256校验码

全量代码(轻量和小型系统)

+

标准系统解决方案(二进制)

1.1.1

+

3.0

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3861解决方案(二进制)

+

Hi3861解决方案(二进制)

1.1.1

+

3.0

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3518解决方案(二进制)

+

Hi3518解决方案(二进制)

1.1.1

+

3.0

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3516解决方案(二进制)

+

Hi3516解决方案-LiteOS(二进制)

1.1.1

+

3.0

站点

+

站点

SHA256 校验码

+

SHA256校验码

RELEASE-NOTES

+

Hi3516解决方案-Linux(二进制)

1.1.1

+

3.0

站点

+

站点

-

+

SHA256校验码

Master版本源码

+

RELEASE-NOTES

版本信息

+

3.0

下载站点

+

站点

SHA256校验码

+

-

全量代码(标准系统)

+

Master版本源码

2.0 Canary

+

版本信息

站点1站点2

+

下载站点

SHA256校验码

+

SHA256校验码

全量代码(轻量和小型系统)

+

全量代码Beta版本(标准、轻量和小型系统)

1.0(不再维护)

+

3.1 Beta

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3861解决方案(二进制)

+

Hi3516标准系统解决方案(二进制)

1.0(不再维护)

+

3.1 Beta

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3518解决方案(二进制)

+

RK3568标准系统解决方案(二进制)

1.0(不再维护)

+

3.1 Beta

站点

+

站点

SHA256 校验码

+

SHA256校验码

Hi3516解决方案(二进制)

+

Hi3861解决方案(二进制)

1.0(不再维护)

+

3.1 Beta

站点

+

站点

SHA256 校验码

+

SHA256校验码

RELEASE-NOTES

+

Hi3516解决方案-LiteOS(二进制)

1.0(不再维护)

+

3.1 Beta

站点

+

站点

-

+

SHA256校验码

编译工具链

+

Hi3516解决方案-Linux(二进制)

版本信息

+

3.1 Beta

下载站点

+

站点

SHA256校验码

+

SHA256校验码

编译工具链获取清单

+

RELEASE-NOTES

-

+

3.1 Beta

站点

+

站点

-

+

-

+

编译工具链

+

版本信息

+

下载站点

+

SHA256校验码

+

编译工具链获取清单

+

-

+

站点

+

-

+## 获取方式4:从github镜像仓库获取\(每天UTC时间23点同步\) + +方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[GitHub帮助中心](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account))。 + +``` +repo init -u git@github.com:openharmony/manifest.git -b master --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + +方式二:通过repo + https下载。 + +``` +repo init -u https://github.com/openharmony/manifest.git -b master --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + ## 源码目录简介 -下表是OpenHarmony源码的目录及简单说明: +下表是OpenHarmony源码目录: **表 2** 源码目录 diff --git a/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode.md b/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode.md new file mode 100644 index 0000000000000000000000000000000000000000..38c590d7e47e2a1e477c3b86723217d6d157cfc9 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/get-code/sourcecode.md @@ -0,0 +1,18 @@ +--- +title: sourcecode +permalink: /pages/extra/f144a2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 获取源码 + +- **[源码获取](/pages/extra/00a0c5/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/glossary/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/glossary/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..c93278036fa3c7da57a5c693f22cb1972a83b542 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/glossary/Readme-CN.md @@ -0,0 +1,17 @@ +--- +title: Readme-CN +permalink: /pages/extra/3e023a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 术语 + +- [术语](/pages/010103) + diff --git a/website/docs/_posts/zh-cn/device-dev/guide/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/guide/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..43c1d3583705b8a51475c078ac45a7d34389fdd4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/guide/Readme-CN.md @@ -0,0 +1,47 @@ +--- +title: Readme-CN +permalink: /pages/extra/cdfc69/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 设备开发指南 + +- [轻量和小型系统设备](/pages/extra/9ac06b/) + - [WLAN连接类产品](/pages/extra/feefcc/) + - [LED外设控制](/pages/0107010101) + - [集成三方SDK](/pages/0107010102) + - [无屏摄像头类产品](/pages/extra/470a3f/) + - [摄像头控制](/pages/extra/e55ff3/) + - [概述](/pages/010701020101) + - [示例开发](/pages/extra/056ede/) + - [拍照开发指导](/pages/01070102010201) + - [录像开发指导](/pages/01070102010202) + - [应用实例](/pages/010701020103) + - [带屏摄像头类产品](/pages/extra/238595/) + - [屏幕和摄像头控制](/pages/extra/556289/) + - [概述](/pages/010701030101) + - [示例开发](/pages/extra/6c47e8/) + - [拍照开发指导](/pages/01070103010201) + - [录像开发指导](/pages/01070103010202) + - [预览开发指导](/pages/01070103010203) + - [应用实例](/pages/010701030103) + - [视觉应用开发](/pages/extra/0304df/) + - [概述](/pages/010701030201) + - [开发准备](/pages/010701030202) + - [添加页面](/pages/010701030203) + - [开发首页](/pages/010701030204) + - [开发详情页](/pages/010701030205) + - [调试打包](/pages/010701030206) + - [真机运行](/pages/010701030207) + - [常见问题](/pages/010701030208) +- [标准系统设备](/pages/extra/8e2ca5/) + - [时钟应用开发指导](/pages/01070201) + - [平台驱动开发示例](/pages/01070202) + - [外设驱动开发示例](/pages/01070203) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control-demo.md b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control-demo.md index 6df8bc1de50ead40989340eb77b9382397c5384f..e34b52251d7c2526c4f7139652bcd82dab359aa3 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control-demo.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control-demo.md @@ -1,22 +1,22 @@ --- -title: device-camera-control-demo.md -permalink: /pages/extra/a41da1/ +title: device-camera-control-demo +permalink: /pages/extra/6c47e8/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 示例开发 -- **[拍照开发指导](/pages/000600020001)** +- **[拍照开发指导](/pages/01070103010201)** -- **[录像开发指导](/pages/000600020002)** +- **[录像开发指导](/pages/01070103010202)** -- **[预览开发指导](/pages/000600020003)** +- **[预览开发指导](/pages/01070103010203)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control.md b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control.md index 993d64f64eadcb8a2a962eab851e271270f26536..30a3083bfe12b0a6246036e3ee48f7082abe07e8 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-control.md @@ -1,22 +1,22 @@ --- -title: device-camera-control.md -permalink: /pages/extra/bec91a/ +title: device-camera-control +permalink: /pages/extra/556289/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 屏幕和摄像头控制 -- **[概述](/pages/000600020000)** +- **[概述](/pages/010701030101)** -- **[示例开发](/pages/extra/a41da1/)** +- **[示例开发](/pages/extra/6c47e8/)** -- **[应用实例](/pages/000600020004)** +- **[应用实例](/pages/010701030103)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-visual.md b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-visual.md index eff7f24a693ea36f0bc658f991bd6b61a8c132e8..838a128cd9a95296ca41dc4b2e3d539883b48230 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-camera-visual.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-camera-visual.md @@ -1,32 +1,32 @@ --- -title: device-camera-visual.md -permalink: /pages/extra/368cab/ +title: device-camera-visual +permalink: /pages/extra/0304df/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 视觉应用开发 -- **[概述](/pages/000600020100)** +- **[概述](/pages/010701030201)** -- **[开发准备](/pages/000600020101)** +- **[开发准备](/pages/010701030202)** -- **[添加页面](/pages/000600020102)** +- **[添加页面](/pages/010701030203)** -- **[开发首页](/pages/000600020103)** +- **[开发首页](/pages/010701030204)** -- **[开发详情页](/pages/000600020104)** +- **[开发详情页](/pages/010701030205)** -- **[调试打包](/pages/000600020105)** +- **[调试打包](/pages/010701030206)** -- **[真机运行](/pages/000600020106)** +- **[真机运行](/pages/010701030207)** -- **[常见问题](/pages/000600020107)** +- **[常见问题](/pages/010701030208)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-camera.md b/website/docs/_posts/zh-cn/device-dev/guide/device-camera.md index b5ecf87d5b13eb7938133f119e20ba09978a959e..f7be59a5766fd1b813c5007df2c4c8849101f19c 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-camera.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-camera.md @@ -1,20 +1,20 @@ --- -title: device-camera.md -permalink: /pages/extra/b9f1a5/ +title: device-camera +permalink: /pages/extra/238595/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 带屏摄像头类产品 -- **[屏幕和摄像头控制](/pages/extra/bec91a/)** +- **[屏幕和摄像头控制](/pages/extra/556289/)** -- **[视觉应用开发](/pages/extra/368cab/)** +- **[视觉应用开发](/pages/extra/0304df/)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control-demo.md b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control-demo.md index a91463d94ee97043571a7d4fbab0d0d3078b032d..e593fa65b5b878063a22c8f5e30b06008c85e953 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control-demo.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control-demo.md @@ -1,20 +1,20 @@ --- -title: device-iotcamera-control-demo.md -permalink: /pages/extra/ba9467/ +title: device-iotcamera-control-demo +permalink: /pages/extra/056ede/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 示例开发 -- **[拍照开发指导](/pages/0006000101)** +- **[拍照开发指导](/pages/01070102010201)** -- **[录像开发指导](/pages/0006000102)** +- **[录像开发指导](/pages/01070102010202)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control.md b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control.md index 8fe996489f15f795f617c1f6fa61e8e4b4d32e92..7aea282c0ac25f779e57e4d60117d468409b6ab8 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera-control.md @@ -1,22 +1,22 @@ --- -title: device-iotcamera-control.md -permalink: /pages/extra/229e49/ +title: device-iotcamera-control +permalink: /pages/extra/e55ff3/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 摄像头控制 -- **[概述](/pages/0006000100)** +- **[概述](/pages/010701020101)** -- **[示例开发](/pages/extra/ba9467/)** +- **[示例开发](/pages/extra/056ede/)** -- **[应用实例](/pages/0006000103)** +- **[应用实例](/pages/010701020103)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera.md b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera.md index 77a8aabeb04fb5f3e8a0dbda73a1889c5665ce95..ea97df5f8672576120136b4fcab0c0e053bdcb19 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-iotcamera.md @@ -1,18 +1,18 @@ --- -title: device-iotcamera.md -permalink: /pages/extra/d4b6cb/ +title: device-iotcamera +permalink: /pages/extra/470a3f/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # 无屏摄像头类产品 -- **[摄像头控制](/pages/extra/229e49/)** +- **[摄像头控制](/pages/extra/e55ff3/)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-lite.md b/website/docs/_posts/zh-cn/device-dev/guide/device-lite.md new file mode 100644 index 0000000000000000000000000000000000000000..b32526a8b11bfd323c402443cf781599e8d2aea4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-lite.md @@ -0,0 +1,22 @@ +--- +title: device-lite +permalink: /pages/extra/9ac06b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 轻量和小型系统设备 + +- **[WLAN连接类产品](/pages/extra/feefcc/)** + +- **[无屏摄像头类产品](/pages/extra/470a3f/)** + +- **[带屏摄像头类产品](/pages/extra/238595/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-standard.md b/website/docs/_posts/zh-cn/device-dev/guide/device-standard.md new file mode 100644 index 0000000000000000000000000000000000000000..86e6ff3dfe4a12d691fdc8db8be3dd7a0cf7f79d --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-standard.md @@ -0,0 +1,22 @@ +--- +title: device-standard +permalink: /pages/extra/8e2ca5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 标准系统设备 + +- **[时钟应用开发指导](/pages/01070201)** + +- **[平台驱动开发示例](/pages/01070202)** + +- **[外设驱动开发示例](/pages/01070203)** + + diff --git a/website/docs/_posts/device-dev/guide/device-wlan-led.md b/website/docs/_posts/zh-cn/device-dev/guide/device-wlan-led.md similarity index 49% rename from website/docs/_posts/device-dev/guide/device-wlan-led.md rename to website/docs/_posts/zh-cn/device-dev/guide/device-wlan-led.md index dcc681c7514fb2a66d0e4cf51d413946164ec3ab..9c4c6eacca5920db8648eb9f2938c0721a4cdb22 100644 --- a/website/docs/_posts/device-dev/guide/device-wlan-led.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-wlan-led.md @@ -1,18 +1,18 @@ --- -title: device-wlan-led.md -permalink: /pages/extra/2d8771/ +title: device-wlan-led +permalink: /pages/extra/f0327c/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:34 +date: 2022-02-12 09:01:57 --- # LED外设控制 -- **[LED外设控制](/pages/0006000000)** +- **[LED外设控制](/pages/0107010101)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device-wlan.md b/website/docs/_posts/zh-cn/device-dev/guide/device-wlan.md index 934c1f09214367cda324d83ad17185621dbc6ddf..6e9952ca1ab35db322765d65f9fdc0cb93a879ff 100644 --- a/website/docs/_posts/zh-cn/device-dev/guide/device-wlan.md +++ b/website/docs/_posts/zh-cn/device-dev/guide/device-wlan.md @@ -1,20 +1,21 @@ --- -title: device-wlan.md -permalink: /pages/extra/d57142/ +title: device-wlan +permalink: /pages/extra/feefcc/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:41 +date: 2022-02-12 09:01:57 --- # WLAN连接类产品 + -- **[LED外设控制](/pages/0006000000)** +- **[LED外设控制](/pages/extra/f0327c/)** -- **[集成三方SDK](/pages/0006000001)** +- **[集成三方SDK](/pages/0107010102)** diff --git a/website/docs/_posts/zh-cn/device-dev/guide/device.md b/website/docs/_posts/zh-cn/device-dev/guide/device.md new file mode 100644 index 0000000000000000000000000000000000000000..32c3c8c6a989b5812d5744958ac23b2b43658ee8 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/guide/device.md @@ -0,0 +1,20 @@ +--- +title: device +permalink: /pages/extra/3828d5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 设备 + +- **[轻量和小型系统设备](/pages/extra/9ac06b/)** + +- **[标准系统设备](/pages/extra/8e2ca5/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/kernel/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..54d63889fdd24e098bf2d53585723f4efa2a822c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/Readme-CN.md @@ -0,0 +1,209 @@ +--- +title: Readme-CN +permalink: /pages/extra/61cc23/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核使用指南 + +- [轻量系统内核](/pages/extra/04851a/) + - [内核概述](/pages/0105010101) + - [基础内核](/pages/extra/49ddf7/) + - [中断管理](/pages/extra/55418d/) + - [基本概念](/pages/01050101020101) + - [开发指导](/pages/01050101020102) + - [任务管理](/pages/extra/3ac755/) + - [基本概念](/pages/01050101020201) + - [开发指导](/pages/01050101020202) + - [内存管理](/pages/extra/646278/) + - [基本概念](/pages/01050101020301) + - [静态内存](/pages/01050101020302) + - [动态内存](/pages/01050101020303) + - [内核通信机制](/pages/extra/cf6bfe/) + - [事件](/pages/extra/a08696/) + - [基本概念](/pages/0105010102040101) + - [开发指导](/pages/0105010102040102) + - [互斥锁](/pages/extra/bd9d14/) + - [基本概念](/pages/0105010102040201) + - [开发指导](/pages/0105010102040202) + - [消息队列](/pages/extra/48afc6/) + - [基本概念](/pages/0105010102040301) + - [开发指导](/pages/0105010102040302) + - [信号量](/pages/extra/439acc/) + - [基本概念](/pages/0105010102040401) + - [开发指导](/pages/0105010102040402) + - [时间管理](/pages/extra/5441a5/) + - [基本概念](/pages/01050101020501) + - [开发指导](/pages/01050101020502) + - [软件定时器](/pages/extra/4076da/) + - [基本概念](/pages/01050101020601) + - [开发指导](/pages/01050101020602) + - [扩展组件](/pages/extra/778d59/) + - [C++支持](/pages/010501010301) + - [CPU占用率](/pages/extra/ea4925/) + - [基本概念](/pages/01050101030201) + - [开发指导](/pages/01050101030202) + - [基本概念](/pages/extra/7abaa7/) + - [开发指导](/pages/extra/009b0d/) + - [文件系统](/pages/extra/4e32ae/) + - [FAT](/pages/01050101030301) + - [LittleFS](/pages/extra/8f380b/) + - [基本概念](/pages/0105010103030201) + - [开发指导](/pages/0105010103030202) + - [内核调测](/pages/extra/60468d/) + - [内存调测](/pages/extra/6b3bb3/) + - [内存信息统计](/pages/01050101040101) + - [内存泄漏检测](/pages/01050101040102) + - [踩内存检测](/pages/01050101040103) + - [异常调测](/pages/010501010402) + - [Trace调测](/pages/010501010403) + - [LMS调测](/pages/010501010404) + - [附录](/pages/extra/c608fb/) + - [内核编码规范](/pages/010501010501) + - [基本数据结构](/pages/extra/a40545/) + - [双向链表](/pages/01050101050201) + - [标准库支持](/pages/extra/308d92/) + - [CMSIS支持](/pages/01050101050301) + - [POSIX支持](/pages/01050101050302) +- [小型系统内核](/pages/extra/6f0c9d/) + - [内核概述](/pages/0105010201) + - [内核启动](/pages/extra/be815f/) + - [内核态启动](/pages/010501020201) + - [用户态启动](/pages/010501020202) + - [基础内核](/pages/extra/78e086/) + - [中断及异常处理](/pages/010501020301) + - [进程管理](/pages/extra/a55987/) + - [进程](/pages/01050102030201) + - [任务](/pages/01050102030202) + - [调度器](/pages/01050102030203) + - [内存管理](/pages/extra/31b7d6/) + - [堆内存管理](/pages/01050102030301) + - [物理内存管理](/pages/01050102030302) + - [虚拟内存管理](/pages/01050102030303) + - [虚实映射](/pages/01050102030304) + - [内核通信机制](/pages/extra/a5b198/) + - [事件](/pages/01050102030401) + - [信号量](/pages/01050102030402) + - [互斥锁](/pages/01050102030403) + - [消息队列](/pages/01050102030404) + - [读写锁](/pages/01050102030405) + - [用户态快速互斥锁](/pages/01050102030406) + - [信号](/pages/01050102030407) + - [时间管理](/pages/010501020305) + - [软件定时器](/pages/010501020306) + - [原子操作](/pages/010501020307) + - [扩展组件](/pages/extra/3ced1c/) + - [系统调用](/pages/010501020401) + - [动态加载与链接](/pages/010501020402) + - [虚拟动态共享库](/pages/010501020403) + - [轻量级进程间通信](/pages/010501020404) + - [文件系统](/pages/extra/9370c0/) + - [虚拟文件系统](/pages/01050102040501) + - [支持的文件系统](/pages/extra/201cc2/) + - [FAT](/pages/0105010204050201) + - [JFFS2](/pages/0105010204050202) + - [NFS](/pages/0105010204050203) + - [Ramfs](/pages/0105010204050204) + - [Procfs](/pages/0105010204050205) + - [适配新的文件系统](/pages/01050102040503) + - [调测与工具](/pages/extra/1dfc6d/) + - [Shell](/pages/extra/13c256/) + - [Shell介绍](/pages/01050102050101) + - [Shell命令开发指导](/pages/01050102050102) + - [Shell命令编程实例](/pages/01050102050103) + - [Shell命令使用详解](/pages/extra/5e0b1c/) + - [系统命令](/pages/extra/7b8fef/) + - [cpup](/pages/010501020501040101) + - [date](/pages/010501020501040102) + - [dmesg](/pages/010501020501040103) + - [exec](/pages/010501020501040104) + - [free](/pages/010501020501040105) + - [help](/pages/010501020501040106) + - [hwi](/pages/010501020501040107) + - [kill](/pages/010501020501040108) + - [log](/pages/010501020501040109) + - [memcheck](/pages/01050102050104010a) + - [oom](/pages/01050102050104010b) + - [pmm](/pages/01050102050104010c) + - [reset](/pages/01050102050104010d) + - [sem](/pages/01050102050104010e) + - [stack](/pages/01050102050104010f) + - [su](/pages/010501020501040110) + - [swtmr](/pages/010501020501040111) + - [systeminfo](/pages/010501020501040112) + - [task](/pages/010501020501040113) + - [uname](/pages/010501020501040114) + - [vmm](/pages/010501020501040115) + - [watch](/pages/010501020501040116) + - [文件命令](/pages/extra/bcb45b/) + - [cat](/pages/010501020501040201) + - [cd](/pages/010501020501040202) + - [chgrp](/pages/010501020501040203) + - [chmod](/pages/010501020501040204) + - [chown](/pages/010501020501040205) + - [cp](/pages/010501020501040206) + - [format](/pages/010501020501040207) + - [ls](/pages/010501020501040208) + - [lsfd](/pages/010501020501040209) + - [mkdir](/pages/01050102050104020a) + - [mount](/pages/01050102050104020b) + - [partinfo](/pages/01050102050104020c) + - [partition](/pages/01050102050104020d) + - [pwd](/pages/01050102050104020e) + - [rm](/pages/01050102050104020f) + - [rmdir](/pages/010501020501040210) + - [statfs](/pages/010501020501040211) + - [sync](/pages/010501020501040212) + - [touch](/pages/010501020501040213) + - [writeproc](/pages/010501020501040214) + - [umount](/pages/010501020501040215) + - [网络命令](/pages/extra/0d76b1/) + - [arp](/pages/010501020501040301) + - [dhclient](/pages/010501020501040302) + - [ifconfig](/pages/010501020501040303) + - [ipdebug](/pages/010501020501040304) + - [netstat](/pages/010501020501040305) + - [ntpdate](/pages/010501020501040306) + - [ping](/pages/010501020501040307) + - [ping6](/pages/010501020501040308) + - [telnet](/pages/010501020501040309) + - [tftp](/pages/01050102050104030a) + - [魔法键使用方法](/pages/01050102050105) + - [用户态异常信息说明](/pages/01050102050106) + - [Trace调测](/pages/010501020502) + - [Perf调测](/pages/010501020503) + - [LMS调测](/pages/010501020504) + - [进程调测](/pages/extra/dcf14b/) + - [CPU占用率](/pages/01050102050501) + - [内存调测](/pages/extra/c42b85/) + - [内存信息统计](/pages/01050102050601) + - [内存泄漏检测](/pages/01050102050602) + - [踩内存检测](/pages/01050102050603) + - [用户态内存调测](/pages/extra/ac4dfa/) + - [基本概念](/pages/01050102050701) + - [运行机制](/pages/01050102050702) + - [使用指导](/pages/extra/a3bd12/) + - [接口说明](/pages/0105010205070301) + - [使用说明](/pages/extra/a06366/) + - [接口调用方式](/pages/010501020507030201) + - [命令行参数方式](/pages/010501020507030202) + - [常见问题场景](/pages/01050102050704) + - [其他内核调测手段](/pages/extra/356413/) + - [临终遗言](/pages/01050102050801) + - [常见问题定位方法](/pages/01050102050802) + - [附录](/pages/extra/7ef543/) + - [基本数据结构](/pages/extra/661027/) + - [双向链表](/pages/01050102060101) + - [位操作](/pages/01050102060102) + - [标准库](/pages/010501020602) +- [标准系统内核](/pages/extra/34d397/) + - [Linux内核概述](/pages/0105010301) + - [OpenHarmony开发板Patch使用指导](/pages/0105010302) + - [Linux内核编译与构建指导](/pages/0105010303) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-basic-mini-time.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-basic-mini-time.md new file mode 100644 index 0000000000000000000000000000000000000000..a0d725f06a500e7f353b7113f2803370a657beee --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-basic-mini-time.md @@ -0,0 +1,20 @@ +--- +title: kernel-basic-mini-time +permalink: /pages/extra/5441a5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 时间管理 + +- **[基本概念](/pages/01050101020501)** + +- **[开发指导](/pages/01050101020502)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-memory-inner.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-memory-inner.md new file mode 100644 index 0000000000000000000000000000000000000000..d5c72a3846888f1cc0763ff5356b5d64fbc11182 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-memory-inner.md @@ -0,0 +1,22 @@ +--- +title: kernel-memory-inner +permalink: /pages/extra/60468d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核调测 + +- **[内存调测](/pages/extra/6b3bb3/)** + +- **[异常调测](/pages/010501010402)** + +- **[Trace调测](/pages/010501010403)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-app.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-app.md new file mode 100644 index 0000000000000000000000000000000000000000..65d6787e7cb0423c400006c17284429b3d9bd90f --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-app.md @@ -0,0 +1,22 @@ +--- +title: kernel-mini-app +permalink: /pages/extra/c608fb/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 附录 + +- **[内核编码规范](/pages/010501010501)** + +- **[基本数据结构](/pages/extra/a40545/)** + +- **[标准库支持](/pages/extra/308d92/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data-list.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data-list.md deleted file mode 100644 index dcc803195bab3d76cf693c983597a396424f5963..0000000000000000000000000000000000000000 --- a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data-list.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: kernel-mini-appx-data-list.md -permalink: /pages/extra/37d8dd/ -navbar: true -sidebar: false -prev: false -next: false -search: false -article: false -comment: false -editLink: false -date: 2021-12-30 12:57:42 ---- -# 双向链表 - -- [基本概念](#section1990715203418) -- [功能说明](#section848334511411) -- [开发流程](#section01781261552) -- [编程实例](#section67569495514) - - [实例描述](#section48761994551) - - [示例代码](#section1280202685519) - - [结果验证](#section5811249105512) - - -## 基本概念 - -双向链表是指含有往前和往后两个方向的链表,即每个结点中除存放下一个节点指针外,还增加一个指向前一个节点的指针。其头指针head是唯一确定的。 - -从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作,但需要注意前后方向的操作。 - -## 功能说明 - -双向链表模块为用户提供下面几种功能,接口详细信息可以查看API参考。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

功能分类

-

接口名

-

描述

-

初始化链表

-

LOS_ListInit

-

将指定双向链表节点初始化为双向链表

-

LOS_DL_LIST_HEAD

-

定义一个双向链表节点并以该节点初始化为双向链表

-

增加节点

-

LOS_ListAdd

-

将指定节点插入到双向链表头端

-

LOS_ListTailInsert

-

将指定节点插入到双向链表尾端

-

删除节点

-

LOS_ListDelete

-

将指定节点从链表中删除

-

LOS_ListDelInit

-

将指定节点从链表中删除,并使用该节点初始化链表

-

判断双向链表是否为空

-

LOS_ListEmpty

-

判断链表是否为空

-

获取结构体信息

-

LOS_DL_LIST_ENTRY

-

获取包含链表的结构体地址,接口的第一个入参表示的是链表中的某个节点,第二个入参是要获取的结构体名称,第三个入参是链表在该结构体中的名称

-

LOS_OFF_SET_OF

-

获取指定结构体内的成员相对于结构体起始地址的偏移量

-

遍历双向链表

-

LOS_DL_LIST_FOR_EACH

-

遍历双向链表

-

LOS_DL_LIST_FOR_EACH_SAFE

-

遍历双向链表,并存储当前节点的后继节点用于安全校验

-

遍历包含双向链表的结构体

-

LOS_DL_LIST_FOR_EACH_ENTRY

-

遍历指定双向链表,获取包含该链表节点的结构体地址

-

LOS_DL_LIST_FOR_EACH_ENTRY_SAFE

-

遍历指定双向链表,获取包含该链表节点的结构体地址,并存储包含当前节点的后继节点的结构体地址

-
- -## 开发流程 - -双向链表的典型开发流程: - -1. 调用LOS\_ListInit/LOS\_DL\_LIST\_HEAD初始双向链表。 -2. 调用LOS\_ListAdd向链表插入节点。 -3. 调用LOS\_ListTailInsert向链表尾部插入节点。 -4. 调用LOS\_ListDelete删除指定节点。 -5. 调用LOS\_ListEmpty判断链表是否为空。 -6. 调用LOS\_ListDelInit删除指定节点并以此节点初始化链表。 - ->![](/images/zh-cn/device-dev/public_sys-resources/icon-note.gif) **说明:** ->- 需要注意节点指针前后方向的操作。 ->- 链表操作接口,为底层接口,不对入参进行判空,需要使用者确保传参合法。 ->- 如果链表节点的内存是动态申请的,删除节点时,要注意释放内存。 - -## 编程实例 - -### 实例描述 - -本实例实现如下功能: - -1. 初始化双向链表。 -2. 增加节点。 -3. 删除节点。 -4. 测试操作是否成功。 - -### 示例代码 - -示例代码如下: - -``` -#include "stdio.h" -#include "los_list.h" - -static UINT32 ListSample(VOID) -{ - LOS_DL_LIST listHead = {NULL,NULL}; - LOS_DL_LIST listNode1 = {NULL,NULL}; - LOS_DL_LIST listNode2 = {NULL,NULL}; - - //首先初始化链表 - printf("Initial head\n"); - LOS_ListInit(&listHead); - - //添加节点1和节点2,并校验他们的相互关系 - LOS_ListAdd(&listHead, &listNode1); - if (listNode1.pstNext == &listHead && listNode1.pstPrev == &listHead) { - printf("Add listNode1 success\n"); - } - - LOS_ListTailInsert(&listHead, &listNode2); - if (listNode2.pstNext == &listHead && listNode2.pstPrev == &listNode1) { - printf("Tail insert listNode2 success\n"); - } - - //删除两个节点 - LOS_ListDelete(&listNode1); - LOS_ListDelete(&listNode2); - - //确认链表为空 - if (LOS_ListEmpty(&listHead)) { - printf("Delete success\n"); - } - - return LOS_OK; -} -``` - -### 结果验证 - -编译运行得到的结果为: - -``` -Initial head -Add listNode1 success -Tail insert listNode2 success -Delete success -``` - diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data.md new file mode 100644 index 0000000000000000000000000000000000000000..4cbe4c6b7f645308bfabfd297e6f15f601805e35 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-data.md @@ -0,0 +1,18 @@ +--- +title: kernel-mini-appx-data +permalink: /pages/extra/a40545/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 基本数据结构 + +- **[双向链表](/pages/01050101050201)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-lib.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-lib.md new file mode 100644 index 0000000000000000000000000000000000000000..9028869e7d8bf6553f21adeb5bde3ca9b15f42e6 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-appx-lib.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-appx-lib +permalink: /pages/extra/308d92/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 标准库支持 + +- **[CMSIS支持](/pages/01050101050301)** + +- **[POSIX支持](/pages/01050101050302)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-interrupt.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-interrupt.md new file mode 100644 index 0000000000000000000000000000000000000000..0e93c6efc122f8e11233103a2f5b8fb547d7b3f1 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-interrupt.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-interrupt +permalink: /pages/extra/55418d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 中断管理 + +- **[基本概念](/pages/01050101020101)** + +- **[开发指导](/pages/01050101020102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md new file mode 100644 index 0000000000000000000000000000000000000000..fdc1459b8557ab351ca528e548d49f19312f605e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-ipc-event +permalink: /pages/extra/a08696/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 事件 + +- **[基本概念](/pages/0105010102040101)** + +- **[开发指导](/pages/0105010102040102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-mutex.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-mutex.md new file mode 100644 index 0000000000000000000000000000000000000000..47c387153fa9052b1561f3f7ad2ea2cf2f9321b7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-mutex.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-ipc-mutex +permalink: /pages/extra/bd9d14/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 互斥锁 + +- **[基本概念](/pages/0105010102040201)** + +- **[开发指导](/pages/0105010102040202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md new file mode 100644 index 0000000000000000000000000000000000000000..1cb1a6c71cd2c2b0b5af81f854fa499f84898720 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-ipc-queue +permalink: /pages/extra/48afc6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 消息队列 + +- **[基本概念](/pages/0105010102040301)** + +- **[开发指导](/pages/0105010102040302)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-sem.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-sem.md new file mode 100644 index 0000000000000000000000000000000000000000..ea4103b7450b0cc962dd655fa42b82f6be1a5e0b --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-sem.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-ipc-sem +permalink: /pages/extra/439acc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 信号量 + +- **[基本概念](/pages/0105010102040401)** + +- **[开发指导](/pages/0105010102040402)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc.md new file mode 100644 index 0000000000000000000000000000000000000000..febe1a7dced3986ebaa1c27db5ecba7a85e2780f --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-ipc.md @@ -0,0 +1,24 @@ +--- +title: kernel-mini-basic-ipc +permalink: /pages/extra/cf6bfe/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核通信机制 + +- **[事件](/pages/extra/a08696/)** + +- **[互斥锁](/pages/extra/bd9d14/)** + +- **[消息队列](/pages/extra/48afc6/)** + +- **[信号量](/pages/extra/439acc/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-memory.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-memory.md new file mode 100644 index 0000000000000000000000000000000000000000..ddbbca1251201936854b34f9c07b61f1e7e117bd --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-memory.md @@ -0,0 +1,22 @@ +--- +title: kernel-mini-basic-memory +permalink: /pages/extra/646278/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内存管理 + +- **[基本概念](/pages/01050101020301)** + +- **[静态内存](/pages/01050101020302)** + +- **[动态内存](/pages/01050101020303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-soft.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-soft.md new file mode 100644 index 0000000000000000000000000000000000000000..54d4027c23a4b02fc468f7244855a87c40e3367e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-soft.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-soft +permalink: /pages/extra/4076da/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 软件定时器 + +- **[基本概念](/pages/01050101020601)** + +- **[开发指导](/pages/01050101020602)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-task.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-task.md new file mode 100644 index 0000000000000000000000000000000000000000..1b026d2c44db21e5ad0167e2f5c7d0239df4dd7a --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic-task.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-basic-task +permalink: /pages/extra/3ac755/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 任务管理 + +- **[基本概念](/pages/01050101020201)** + +- **[开发指导](/pages/01050101020202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic.md new file mode 100644 index 0000000000000000000000000000000000000000..285ab019445615f3bd8325a320ae6e9af12815fd --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-basic.md @@ -0,0 +1,28 @@ +--- +title: kernel-mini-basic +permalink: /pages/extra/49ddf7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 基础内核 + +- **[中断管理](/pages/extra/55418d/)** + +- **[任务管理](/pages/extra/3ac755/)** + +- **[内存管理](/pages/extra/646278/)** + +- **[内核通信机制](/pages/extra/cf6bfe/)** + +- **[时间管理](/pages/extra/5441a5/)** + +- **[软件定时器](/pages/extra/4076da/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-cpup.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-cpup.md new file mode 100644 index 0000000000000000000000000000000000000000..be0a0203ce86b744102bc7bfc5ee17accd97ca4f --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-cpup.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-extend-cpup +permalink: /pages/extra/ea4925/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# CPU占用率 + +- **[基本概念](/pages/01050101030201)** + +- **[开发指导](/pages/01050101030202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-basic.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-basic.md new file mode 100644 index 0000000000000000000000000000000000000000..b6508fcb920aa8e25ecb09003cd5b5bee5ead00c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-basic.md @@ -0,0 +1,104 @@ +--- +title: kernel-mini-extend-dynamic-loading-basic +permalink: /pages/extra/7abaa7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 基本概念 + +- [运行机制](#section139861939219) + - [符号表导出](#section15414650102716) + - [ELF文件加载](#section5221181562810) + - [ELF文件链接](#section68441639182817) + +- [ELF支持规格](#section187315541916) + - [ELF支持类型](#section1701552268) + - [ELF共享库编译链接选项](#section17292133274) + + +在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF方案,方便拓展算法生态。LiteOS-M提供类似于dlopen、dlsym等接口,APP通过动态加载模块提供的接口可以加载、卸载相应算法库。如图1所示,APP需要通过三方算法库所需接口获取对应信息输出,三方算法库又依赖内核提供的基本接口,如malloc等。APP加载所需接口,并对相关的未定义符号完成重定位后,APP即可调用该接口完成功能调用。目前动态加载组件只支持arm架构。此外,待加载的共享库需要验签或者限制来源,确保系统的安全性。 + +**图 1** LiteOS-M内核动态加载架构图 +![](/images/device-dev/kernel/figure/LiteOS-M内核动态加载架构图.png "LiteOS-M内核动态加载架构图") + +## 运行机制 + +### 符号表导出 + +共享库调用内核接口需要内核主动暴露动态库所需的接口,如图2所示,该机制将符号信息编译到指定段中,调用SYM\_EXPORT宏即可完成对指定符号的信息导出。符号信息通过结构体SymInfo描述,成员包括符号名和符号地址信息,宏SYM\_EXPORT通过\_\_attribute\_\_编译属性将符号信息导入.sym.\*段中。 + +``` +typedef struct { + CHAR *name; + UINTPTR addr; +} SymInfo; + +#define SYM_EXPORT(func) \ +const SymInfo sym_##func __attribute__((section(".sym."#func))) = { \ + .name = #func, \ + .addr = (UINTPTR)func \ +}; +``` + +**图 2** 导出的符号表信息 +![](/images/device-dev/kernel/figure/导出的符号表信息.png "导出的符号表信息") + +### ELF文件加载 + +加载过程中,根据ELF文件的句柄以及程序头表的段偏移可以得到需要加载到内存的LOAD段,一般有两个段,只读段及读写段,如下所示,可以用readelf -l查看ELF文件的LOAD段信息。如图3所示,根据相应的对齐属性申请物理内存,通过每个段的加载基址及偏移将代码段或数据段写入内存中。 + +``` +$ readelf -l lib.so + +Elf file type is DYN (Shared object file) +Entry point 0x5b4 +There are 4 program headers, starting at offset 52 + +Program Headers: + Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align + EXIDX 0x000760 0x00000760 0x00000760 0x00008 0x00008 R 0x4 + LOAD 0x000000 0x00000000 0x00000000 0x0076c 0x0076c R E 0x10000 + LOAD 0x00076c 0x0001076c 0x0001076c 0x0010c 0x00128 RW 0x10000 + DYNAMIC 0x000774 0x00010774 0x00010774 0x000c8 0x000c8 RW 0x4 + + Section to Segment mapping: + Segment Sections... + 00 .ARM.exidx + 01 .hash .dynsym .dynstr .rel.dyn .rel.plt .init .plt .text .fini .ARM.exidx .eh_frame + 02 .init_array .fini_array .dynamic .got .data .bss + 03 .dynamic +``` + +**图 3** ELF文件的加载过程 +![](/images/device-dev/kernel/figure/ELF文件的加载过程.png "ELF文件的加载过程") + +### ELF文件链接 + +如图4所示,通过ELF文件的.dynamic段获取重定位表,遍历表中每一个需要重定位的条目,再根据需要重定位的符号名在共享库和内核提供的导出符号表中查找相应符号并更新相应的重定位信息。 + +**图 4** ELF文件的链接过程 +![](/images/device-dev/kernel/figure/ELF文件的链接过程.png "ELF文件的链接过程") + +## ELF支持规格 + +### ELF支持类型 + +编译共享库时,添加-fPIC可以编译出位置无关代码(-fPIC为编译选项),此时共享库文件类型为ET\_DYN,其可以加载至任意有效的地址区间。 + +例:arm-none-eabi-gcc -fPIC –shared –o lib.so lib.c + +### ELF共享库编译链接选项 + +1. “-nostdlib”编译链接选项:不依赖编译器中lib库。 +2. “-nostartfiles”编译链接选项:不依赖编译器中启动相关的文件。 +3. “-fPIC”编译选项:可编译位置无关的共享库。 +4. “-z max-page-size=4”链接选项:二进制文件中可加载段的对齐字节数为4,可节约内存,可用于动态库。 +5. “-mcpu=”需要指定对应的cpu架构。 + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-guide.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..0481dd23a4219098bec25e6fbdd7a2203c1551bf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading-guide.md @@ -0,0 +1,200 @@ +--- +title: kernel-mini-extend-dynamic-loading-guide +permalink: /pages/extra/009b0d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 开发指导 + +- [接口说明](#section158501652121514) +- [开发流程](#section5241132917523) +- [编程实例](#section8708112313531) + +## 接口说明 + +**表 1** 功能列表 + + + + + + + + + + + + + + + + + + + + + +

功能分类

+

接口名

+

描述

+

动态加载功能接口

+

LOS_DynlinkInit

+

初始化动态链接器链表以及互斥锁

+

LOS_SoLoad

+

加载指定路径的共享库

+

LOS_FindSym

+

根据共享库句柄查找指定符号

+

LOS_SoUnload

+

卸载共享库句柄

+
+ +## 开发流程 + +1. 利用arm-none-eabi-gcc交叉编译器编译共享库并制作FAT或LittleFS文件系统格式镜像烧写至flash中; +2. 在target\_config.h文件中定义宏LOSCFG\_DYNLINK为1使能动态加载模块; +3. 调用LOS\_SoLoad接口加载指定路径下的共享库; +4. 调用LOS\_FindSym接口查找指定符号,获取符号地址; +5. 调用LOS\_SoUnload卸载指定共享库句柄。 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>1. 利用交叉编译器编译共享库所需要的编译选项参考ELF支持规格一节。 +>2. 制作文件系统镜像之前需要对特定单板适配FAT或LittleFS文件系统。 +>3. 共享库不依赖编译器中的libc库,不支持c++。 +>4. 共享库只能依赖内核提供的接口,不能依赖其他共享库。 + +## 编程实例 + +实例以cortex-m4单板为例。 + +1. 共享库示例代码及编译 + + 示例代码主要测试全局符号间的调用功能以及对内核接口maloc、free、memset接口的调用功能。 + + ``` + #include + #include + + int g_param = 10; + + int callee(int a, int b) + { + char *addr = malloc(g_param); + if (addr == NULL) { + return 0; + } + + memset(addr, '1', g_param); + + free(addr); + return a + b + g_param; + } + + int caller(int a, int b) + { + return callee(a, b); + } + ``` + + ``` + $ arm-none-eabi-gcc -fPIC -shared -mcpu=cortex-m4 -nostdlib -nostartfiles -z max-page-size=4 -o test.so test.c + ``` + +2. 导出共享库中使用到的malloc、free、memset符号,下述代码单独编写成一个.c文件,参与OS编译即可。 + + ``` + #include "stdlib.h" + #include "string.h" + + SYM_EXPORT(malloc); + SYM_EXPORT(free); + SYM_EXPORT(memset); + ``` + +3. 确定内核的编译环境,在对应编译器的编译链接脚本中添加如下语句,保证符号表信息在编译链接的时候输出到指定的段。 + + 在IAR编译器.icf链接脚本中添加如下语句: + + ``` + keep {section .TABLE.START}; + keep {section .sym.*}; + keep {section .table.end}; + define block SYMBOL_TABLE with fixed order + { + section .TABLE.START, + section .sym.*, + section .table.end + }; + place in ROM_region {readonly, block SYMBOL_TABLE}; + ``` + + 在gcc编译器的.ld链接脚本中添加如下语句: + + ``` + __sym_table_start = .; + KEEP(*( SORT (.sym.*))); + __sym_table_end = .; + ``` + +4. 共享库加载链接、执行与卸载 + + 示例代码主要测试LOS\_SoLoad、LOS\_FindSym、LOS\_SoUnload接口的功能是否正常以及通过LOS\_FindSym查找到的符号的调用是否正常。 + + ``` + #include "los_dynlink.h" + + VOID DynlinkTest(VOID) + { + VOID *handle = NULL; + INT32 (*func)(INT32, INT32) = NULL; + CHAR *symbolName = "caller"; + CHAR *dsoName = "/lib/test.so"; + INT32 ret; + + handle = (VOID *)LOS_SoLoad(dsoName, NULL); + if (handle == NULL) { + printf("Failed to load so\n"); + return; + } + + func = (INT32 (*)(INT32, INT32))LOS_FindSym(handle, symbolName); + if (func == NULL) { + printf("Failed to find symbol\n"); + LOS_SoUnload(handle); + return; + } + + ret = func(1, 1); + if (ret != 12) { + printf("Failed to execute function\n"); + LOS_SoUnload(handle); + return; + } + + ret = LOS_SoUnload(handle); + if (ret != 0) { + printf("Failed to unload so\n"); + } + + + printf("Success!\n"); + } + ``` + +5. 结果验证 + + ``` + Success! + ``` + + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>用例中文件系统路径为/lib/test.so; +>可以创建一个任务,在任务中调用DynlinkTest接口进行测试; + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8c949878b35404f80be4fae3b46a97afdba4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-extend-dynamic-loading +permalink: /pages/extra/04c665/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# + +- **[基本概念](/pages/extra/7abaa7/)** + +- **[开发指导](/pages/extra/009b0d/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file-lit.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file-lit.md new file mode 100644 index 0000000000000000000000000000000000000000..f57189cd0200e41084867d7e7a8802f08cdb9063 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file-lit.md @@ -0,0 +1,20 @@ +--- +title: kernel-mini-extend-file-lit +permalink: /pages/extra/8f380b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# LittleFS + +- **[基本概念](/pages/0105010103030201)** + +- **[开发指导](/pages/0105010103030202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file.md new file mode 100644 index 0000000000000000000000000000000000000000..dbd335024b3416c663b5358bb925dc044e5117a7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend-file.md @@ -0,0 +1,217 @@ +--- +title: kernel-mini-extend-file +permalink: /pages/extra/4e32ae/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 文件系统 + +当前支持的文件系统有FATFS与LittleFS,支持的功能如下表所示: + +**表 1** ****功能列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

功能分类

+

接口名

+

描述

+

FATFS

+

LITTELFS

+

文件操作

+

open

+

打开文件

+

支持

+

支持

+

close

+

关闭文件

+

支持

+

支持

+

read

+

读取文件内容

+

支持

+

支持

+

write

+

往文件写入内容

+

支持

+

支持

+

lseek

+

设置文件偏移位置

+

支持

+

支持

+

unlink

+

删除文件

+

支持

+

支持

+

rename

+

重命名文件

+

支持

+

支持

+

fstat

+

通过文件句柄获取文件信息

+

支持

+

支持

+

stat

+

通过文件路径名获取文件信息

+

支持

+

支持

+

fsync

+

文件内容刷入存储设备

+

支持

+

支持

+

目录操作

+

mkdir

+

创建目录

+

支持

+

支持

+

opendir

+

打开目录

+

支持

+

支持

+

readdir

+

读取目录项内容

+

支持

+

支持

+

closedir

+

关闭目录

+

支持

+

支持

+

rmdir

+

删除目录

+

支持

+

支持

+

分区操作

+

mount

+

分区挂载

+

支持

+

支持

+

umount

+

分区卸载

+

支持

+

支持

+

umount2

+

分区卸载,可通过MNT_FORCE参数进行强制卸载

+

支持

+

不支持

+

statfs

+

获取分区信息

+

支持

+

不支持

+
+ +- **[FAT](/pages/01050101030301)** + +- **[LittleFS](/pages/extra/8f380b/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend.md new file mode 100644 index 0000000000000000000000000000000000000000..d5efb1d8508079c40ffa841ea813bea3247c4f15 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-extend.md @@ -0,0 +1,24 @@ +--- +title: kernel-mini-extend +permalink: /pages/extra/778d59/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 扩展组件 + +- **[C++支持](/pages/010501010301)** + +- **[CPU占用率](/pages/extra/ea4925/)** + +- **[动态加载](/pages/extra/04c665/)** + +- **[文件系统](/pages/extra/4e32ae/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-memory-debug.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-memory-debug.md new file mode 100644 index 0000000000000000000000000000000000000000..c0d16c5902584e1414fe9c777a746142144a9499 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini-memory-debug.md @@ -0,0 +1,24 @@ +--- +title: kernel-mini-memory-debug +permalink: /pages/extra/6b3bb3/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内存调测 + +内存调测方法旨在辅助定位动态内存相关问题,提供了基础的动态内存池信息统计手段,向用户呈现内存池水线、碎片率等信息;提供了内存泄漏检测手段,方便用户准确定位存在内存泄漏的代码行,也可以辅助分析系统各个模块内存的使用情况;提供了踩内存检测手段,可以辅助定位越界踩内存的场景。 + +- **[内存信息统计](/pages/01050101040101)** + +- **[内存泄漏检测](/pages/01050101040102)** + +- **[踩内存检测](/pages/01050101040103)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini.md new file mode 100644 index 0000000000000000000000000000000000000000..0c9b6cba8e3c31a4b4a18e685d6a7ec59d6ab0d1 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-mini.md @@ -0,0 +1,26 @@ +--- +title: kernel-mini +permalink: /pages/extra/04851a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 轻量系统内核 + +- **[内核概述](/pages/0105010101)** + +- **[基础内核](/pages/extra/49ddf7/)** + +- **[扩展组件](/pages/extra/778d59/)** + +- **[内核调测](/pages/extra/60468d/)** + +- **[附录](/pages/extra/c608fb/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx-structure.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx-structure.md new file mode 100644 index 0000000000000000000000000000000000000000..567db04ba35a3021043776ea0fb2a4e46d59d1df --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx-structure.md @@ -0,0 +1,20 @@ +--- +title: kernel-small-apx-structure +permalink: /pages/extra/661027/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 基本数据结构 + +- **[双向链表](/pages/01050102060101)** + +- **[位操作](/pages/01050102060102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx.md new file mode 100644 index 0000000000000000000000000000000000000000..f8d34a85ba3425f52a5c271f9bec68a093cbcfe5 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-apx.md @@ -0,0 +1,20 @@ +--- +title: kernel-small-apx +permalink: /pages/extra/7ef543/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 附录 + +- **[基本数据结构](/pages/extra/661027/)** + +- **[标准库](/pages/010501020602)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-memory.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-memory.md new file mode 100644 index 0000000000000000000000000000000000000000..d5b4c4a5796edd788dfabab03a53552eb8795c0f --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-memory.md @@ -0,0 +1,24 @@ +--- +title: kernel-small-basic-memory +permalink: /pages/extra/31b7d6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内存管理 + +- **[堆内存管理](/pages/01050102030301)** + +- **[物理内存管理](/pages/01050102030302)** + +- **[虚拟内存管理](/pages/01050102030303)** + +- **[虚实映射](/pages/01050102030304)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-process.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-process.md new file mode 100644 index 0000000000000000000000000000000000000000..1f663b1bd68ca7d2f4c06d0102d67d4ce376c494 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-process.md @@ -0,0 +1,22 @@ +--- +title: kernel-small-basic-process +permalink: /pages/extra/a55987/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 进程管理 + +- **[进程](/pages/01050102030201)** + +- **[线程](/pages/01050102030202)** + +- **[调度器](/pages/01050102030203)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-trans.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-trans.md new file mode 100644 index 0000000000000000000000000000000000000000..81e3e9c3219ca968423696d1a7ffda554bddd523 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basic-trans.md @@ -0,0 +1,30 @@ +--- +title: kernel-small-basic-trans +permalink: /pages/extra/a5b198/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核通信机制 + +- **[事件](/pages/01050102030401)** + +- **[信号量](/pages/01050102030402)** + +- **[互斥锁](/pages/01050102030403)** + +- **[消息队列](/pages/01050102030404)** + +- **[读写锁](/pages/01050102030405)** + +- **[用户态快速互斥锁](/pages/01050102030406)** + +- **[信号](/pages/01050102030407)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basics.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basics.md new file mode 100644 index 0000000000000000000000000000000000000000..555b8afa33cafa73f254754a19ef37835e567f61 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-basics.md @@ -0,0 +1,30 @@ +--- +title: kernel-small-basics +permalink: /pages/extra/78e086/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 基础内核 + +- **[中断及异常处理](/pages/010501020301)** + +- **[进程管理](/pages/extra/a55987/)** + +- **[内存管理](/pages/extra/31b7d6/)** + +- **[内核通信机制](/pages/extra/a5b198/)** + +- **[时间管理](/pages/010501020305)** + +- **[软件定时器](/pages/010501020306)** + +- **[原子操作](/pages/010501020307)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs-support.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs-support.md new file mode 100644 index 0000000000000000000000000000000000000000..ffd42b0cced58651560f4ae10b1574ebca3e7f77 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs-support.md @@ -0,0 +1,26 @@ +--- +title: kernel-small-bundles-fs-support +permalink: /pages/extra/201cc2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 支持的文件系统 + +- **[FAT](/pages/0105010204050201)** + +- **[JFFS2](/pages/0105010204050202)** + +- **[NFS](/pages/0105010204050203)** + +- **[Ramfs](/pages/0105010204050204)** + +- **[Procfs](/pages/0105010204050205)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs.md new file mode 100644 index 0000000000000000000000000000000000000000..78df6f78f86beb10a5d07bef76a0ce7dac378c58 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles-fs.md @@ -0,0 +1,29 @@ +--- +title: kernel-small-bundles-fs +permalink: /pages/extra/9370c0/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 文件系统 + +文件系统(File System,或者简称FS),是操作系统中输入输出的一种主要形式,主要负责和内外部的存储设备交互。 + +文件系统对上通过C库提供的POSIX标准的操作接口,具体可以参考C库的API文档说明。对下,通过内核态的VFS虚拟层,屏蔽了各个具体文件系统的差异。基本架构如下: + +**图 1** 文件系统的总体结构 +![](/images/device-dev/kernel/figure/文件系统的总体结构.png "文件系统的总体结构") + +- **[虚拟文件系统](/pages/01050102040501)** + +- **[支持的文件系统](/pages/extra/201cc2/)** + +- **[适配新的文件系统](/pages/01050102040503)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles.md new file mode 100644 index 0000000000000000000000000000000000000000..377b24f10521d145d085bbf5542790b8fd633716 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-bundles.md @@ -0,0 +1,26 @@ +--- +title: kernel-small-bundles +permalink: /pages/extra/3ced1c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 扩展组件 + +- **[系统调用](/pages/010501020401)** + +- **[动态加载与链接](/pages/010501020402)** + +- **[虚拟动态共享库](/pages/010501020403)** + +- **[轻量级进程间通信](/pages/010501020404)** + +- **[文件系统](/pages/extra/9370c0/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-memory.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-memory.md new file mode 100644 index 0000000000000000000000000000000000000000..15f01d02a72ee23ebca7cae46a7cb759ed8e1716 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-memory.md @@ -0,0 +1,22 @@ +--- +title: kernel-small-debug-memory +permalink: /pages/extra/c42b85/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内存调测 + +- **[内存信息统计](/pages/01050102050601)** + +- **[内存泄漏检测](/pages/01050102050602)** + +- **[踩内存检测](/pages/01050102050603)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-other.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-other.md new file mode 100644 index 0000000000000000000000000000000000000000..7cb7a807ccd40b60430f3e28d86b19a0f183763c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-other.md @@ -0,0 +1,20 @@ +--- +title: kernel-small-debug-other +permalink: /pages/extra/356413/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 其他内核调测手段 + +- **[临终遗言](/pages/01050102050801)** + +- **[常见问题定位方法](/pages/01050102050802)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-process.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-process.md new file mode 100644 index 0000000000000000000000000000000000000000..a7a68d5dcd5acb4a7a3bd3d43560b59f4720198a --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-process.md @@ -0,0 +1,18 @@ +--- +title: kernel-small-debug-process +permalink: /pages/extra/dcf14b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 进程调测 + +- **[CPU占用率](/pages/01050102050501)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd.md new file mode 100644 index 0000000000000000000000000000000000000000..0b983b254706b360029d200e73f98ce28ede256c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd.md @@ -0,0 +1,64 @@ +--- +title: kernel-small-debug-shell-cmd +permalink: /pages/extra/7b8fef/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 系统命令 + +- **[cpup](/pages/010501020501040101)** + +- **[date](/pages/010501020501040102)** + +- **[dmesg](/pages/010501020501040103)** + +- **[du](/pages/010501020501040216)** + +- **[exec](/pages/010501020501040104)** + +- **[free](/pages/010501020501040105)** + +- **[help](/pages/010501020501040106)** + +- **[hwi](/pages/010501020501040107)** + +- **[kill](/pages/010501020501040108)** + +- **[log](/pages/010501020501040109)** + +- **[memcheck](/pages/01050102050104010a)** + +- **[oom](/pages/01050102050104010b)** + +- **[pmm](/pages/01050102050104010c)** + +- **[reboot](/pages/010501020501040117)** + +- **[reset](/pages/01050102050104010d)** + +- **[sem](/pages/01050102050104010e)** + +- **[stack](/pages/01050102050104010f)** + +- **[su](/pages/010501020501040110)** + +- **[swtmr](/pages/010501020501040111)** + +- **[systeminfo](/pages/010501020501040112)** + +- **[task](/pages/010501020501040113)** + +- **[top](/pages/010501020501040118)** + +- **[uname](/pages/010501020501040114)** + +- **[vmm](/pages/010501020501040115)** + +- **[watch](/pages/010501020501040116)** diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-details.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-details.md new file mode 100644 index 0000000000000000000000000000000000000000..9e3de24ca65f04912805fd2e08c578c8f4675478 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-details.md @@ -0,0 +1,26 @@ +--- +title: kernel-small-debug-shell-details +permalink: /pages/extra/5e0b1c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Shell命令使用详解 + +本章节介绍了系统关键命令的功能、格式、参数范围、使用指南和使用实例。 + +不在本文档范围内的命令,详见[help](/pages/010501020501040106)命令的输出内容,也可以通过命令的“-h | --help”选项,查看该命令的使用帮助。 + +- **[系统命令](/pages/extra/7b8fef/)** + +- **[文件命令](/pages/extra/bcb45b/)** + +- **[网络命令](/pages/extra/0d76b1/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-file.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-file.md new file mode 100644 index 0000000000000000000000000000000000000000..999f9ac81609ce699072895dee62ceb31b8dc0cb --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-file.md @@ -0,0 +1,58 @@ +--- +title: kernel-small-debug-shell-file +permalink: /pages/extra/bcb45b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 文件命令 + +- **[cat](/pages/010501020501040201)** + +- **[cd](/pages/010501020501040202)** + +- **[chgrp](/pages/010501020501040203)** + +- **[chmod](/pages/010501020501040204)** + +- **[chown](/pages/010501020501040205)** + +- **[cp](/pages/010501020501040206)** + +- **[format](/pages/010501020501040207)** + +- **[ls](/pages/010501020501040208)** + +- **[lsfd](/pages/010501020501040209)** + +- **[mkdir](/pages/01050102050104020a)** + +- **[mount](/pages/01050102050104020b)** + +- **[mv](/pages/010501020501040217)** + +- **[partinfo](/pages/01050102050104020c)** + +- **[partition](/pages/01050102050104020d)** + +- **[pwd](/pages/01050102050104020e)** + +- **[rm](/pages/01050102050104020f)** + +- **[rmdir](/pages/010501020501040210)** + +- **[statfs](/pages/010501020501040211)** + +- **[sync](/pages/010501020501040212)** + +- **[touch](/pages/010501020501040213)** + +- **[writeproc](/pages/010501020501040214)** + +- **[umount](/pages/010501020501040215)** diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-net.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-net.md new file mode 100644 index 0000000000000000000000000000000000000000..9025dd4963d1dbc0648c38d03aaea45e8211c0aa --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell-net.md @@ -0,0 +1,35 @@ +--- +title: kernel-small-debug-shell-net +permalink: /pages/extra/0d76b1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 网络命令 + +- **[arp](/pages/010501020501040301)** + +- **[dhclient](/pages/010501020501040302)** + +- **[ifconfig](/pages/010501020501040303)** + +- **[ipdebug](/pages/010501020501040304)** + +- **[netstat](/pages/010501020501040305)** + +- **[ntpdate](/pages/010501020501040306)** + +- **[ping](/pages/010501020501040307)** + +- **[ping6](/pages/010501020501040308)** + +- **[telnet](/pages/010501020501040309)** + +- **[tftp](/pages/01050102050104030a)** + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell.md new file mode 100644 index 0000000000000000000000000000000000000000..32c51e83934fe857d234c397da213253827d3dc8 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-shell.md @@ -0,0 +1,28 @@ +--- +title: kernel-small-debug-shell +permalink: /pages/extra/13c256/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Shell + +- **[Shell介绍](/pages/01050102050101)** + +- **[Shell命令开发指导](/pages/01050102050102)** + +- **[Shell命令编程实例](/pages/01050102050103)** + +- **[Shell命令使用详解](/pages/extra/5e0b1c/)** + +- **[魔法键使用方法](/pages/01050102050105)** + +- **[用户态异常信息说明](/pages/01050102050106)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide-use.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide-use.md new file mode 100644 index 0000000000000000000000000000000000000000..ab11b554f6fa4cfb13dce6c156b98fa140aacdc7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide-use.md @@ -0,0 +1,30 @@ +--- +title: kernel-small-debug-user-guide-use +permalink: /pages/extra/a06366/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 使用说明 + +编译OpenHarmony工程时默认编译的是debug版本,即libc库已经集成内存调测相关的接口实现,用户可以根据具体需要决定是否使能内存调测功能。 + +堆内存调测功能提供两种方式供用户使用:接口调用及命令行参数。 + +- 接口调用:优点是可以较精确的检查某一段代码逻辑的堆内存相关信息,缺点是需要修改用户代码。 +- 命令行参数:优点是无需修改用户代码,缺点是无法精确的校验某一段逻辑的堆内存信息。 + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>内存调测功能使能后,进程退出时会默认进行一次堆内存泄漏和堆内存完整性检查。内存调测功能未使能时,堆内存统计、堆内存泄漏检查、堆内存完整性校验功能不会开启,调用相关调测接口无响应。 + +- **[接口调用方式](/pages/010501020507030201)** + +- **[命令行参数方式](/pages/010501020507030202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..313faf6d80fb09d9057a7dcc165d528c4b100305 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user-guide.md @@ -0,0 +1,20 @@ +--- +title: kernel-small-debug-user-guide +permalink: /pages/extra/a3bd12/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 使用指导 + +- **[接口说明](/pages/0105010205070301)** + +- **[使用说明](/pages/extra/a06366/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user.md new file mode 100644 index 0000000000000000000000000000000000000000..381ce5820753f01ad63596feb25eca85ae4ed95a --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug-user.md @@ -0,0 +1,30 @@ +--- +title: kernel-small-debug-user +permalink: /pages/extra/ac4dfa/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 用户态内存调测 + +- **[基本概念](/pages/01050102050701)** + +- **[运行机制](/pages/01050102050702)** + +- **[使用指导](/pages/extra/a3bd12/)** + +- **[常见问题场景](/pages/01050102050704)** + +- **[Linux内核概述](/pages/0105010301)** + +- **[OpenHarmony开发板Patch使用指导](/pages/0105010302)** + +- **[Linux内核编译与构建指导](/pages/0105010303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug.md new file mode 100644 index 0000000000000000000000000000000000000000..bcc6615572338d413689a2d3fc38631eb0ee3fbd --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-debug.md @@ -0,0 +1,26 @@ +--- +title: kernel-small-debug +permalink: /pages/extra/1dfc6d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 调测与工具 + +- **[Shell](/pages/extra/13c256/)** + +- **[Trace](/pages/010501020502)** + +- **[进程调测](/pages/extra/dcf14b/)** + +- **[内存调测](/pages/extra/c42b85/)** + +- **[其他内核调测手段](/pages/extra/356413/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-start.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-start.md new file mode 100644 index 0000000000000000000000000000000000000000..419c690de705edd8844d43b8de0199ccaa7871c0 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small-start.md @@ -0,0 +1,20 @@ +--- +title: kernel-small-start +permalink: /pages/extra/be815f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核启动 + +- **[内核态启动](/pages/010501020201)** + +- **[用户态启动](/pages/010501020202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small.md new file mode 100644 index 0000000000000000000000000000000000000000..f5eb14e4d6bcf52b115b4bcd940914a704044c60 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-small.md @@ -0,0 +1,28 @@ +--- +title: kernel-small +permalink: /pages/extra/6f0c9d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 小型系统内核 + +- **[内核概述](/pages/0105010201)** + +- **[内核启动](/pages/extra/be815f/)** + +- **[基础内核](/pages/extra/78e086/)** + +- **[扩展组件](/pages/extra/3ced1c/)** + +- **[调测与工具](/pages/extra/1dfc6d/)** + +- **[附录](/pages/extra/7ef543/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel-standard.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-standard.md new file mode 100644 index 0000000000000000000000000000000000000000..c29b0b13c9428dd717709c5fe1b3c38c3a3d31bf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel-standard.md @@ -0,0 +1,22 @@ +--- +title: kernel-standard +permalink: /pages/extra/34d397/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 标准系统内核 + +- **[Linux内核概述](/pages/0105010301)** + +- **[OpenHarmony开发板Patch使用指导](/pages/0105010302)** + +- **[Linux内核编译与构建指导](/pages/0105010303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/kernel/kernel.md b/website/docs/_posts/zh-cn/device-dev/kernel/kernel.md new file mode 100644 index 0000000000000000000000000000000000000000..e75f92bfc1e8b4b7217864b6b16a4d9013fe580a --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/kernel/kernel.md @@ -0,0 +1,22 @@ +--- +title: kernel +permalink: /pages/extra/278468/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核 + +- **[轻量系统内核](/pages/extra/04851a/)** + +- **[小型系统内核](/pages/extra/6f0c9d/)** + +- **[标准系统内核](/pages/extra/34d397/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/porting/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..ca080bf39e1f1946768997603ad04c858c50f938 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/Readme-CN.md @@ -0,0 +1,77 @@ +--- +title: Readme-CN +permalink: /pages/extra/818f17/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +## 概述 +目前OpenHarmony已经成立了SIG组[sig-devboard](https://gitee.com/openharmony/community/blob/master/sig/sig-devboard/sig_devboard_cn.md)。该SIG组以支持更多第三方开发板为目标,提供开发板移植的支撑。 + +在了解开发板移植前,需要先了解一下OpenHarmony对设备的分类。不同设备类型的移植方法会有较大差异。 + +| 设备类型 | 硬件要求 | 支持的内核 | +|---------|-------------|----------------| +| 轻量系统类设备 | 内存>128KB | LiteOS-M | +| 小型系统类设备 | 内存>1MB、有MMU | LiteOS-A、Linux | +| 标准系统类设备 | 内存>128MB | Linux | + +## 代码准备 + +目前OpenHarmony已经为各厂家创建了仓库并在openharmony-sig中进行孵化。参与孵化仓开发,需要使用如下方法初始化和下载代码。 + +```shell +repo init -u https://gitee.com/openharmony-sig/manifest.git -b master -m devboard.xml --no-repo-verify +``` + +其他下载步骤与主线相同。 + +## 芯片移植指导 + +- [轻量系统芯片移植指导](/pages/extra/8d1893/) + - [移植准备](/pages/extra/f8d4b1/) + - [移植须知](/pages/0104010101) + - [编译构建适配流程](/pages/0104010102) + - [内核移植](/pages/extra/71893e/) + - [移植概述](/pages/0104010201) + - [内核基础适配](/pages/0104010202) + - [内核移植验证](/pages/0104010203) + - [板级系统移植](/pages/extra/716a3b/) + - [移植概述](/pages/0104010301) + - [板级驱动适配](/pages/0104010302) + - [HAL层实现](/pages/0104010303) + - [系统组件调用](/pages/0104010304) + - [lwIP组件适配](/pages/0104010305) + - [三方组件适配](/pages/0104010306) + - [XTS认证](/pages/0104010307) + - [常见问题](/pages/01040104) +- [小型系统芯片移植指导](/pages/extra/e6da35/) + - [移植准备](/pages/extra/e8757d/) + - [移植须知](/pages/0104020101) + - [编译构建](/pages/0104020102) + - [移植内核](/pages/extra/c5ccdb/) + - [LiteOS-A内核](/pages/0104020201) + - [Linux内核](/pages/0104020202) + - [驱动移植](/pages/extra/22f30e/) + - [移植概述](/pages/0104020301) + - [平台驱动移植](/pages/0104020302) + - [器件驱动移植](/pages/0104020303) +- [标准系统芯片移植指导](/pages/01040301) + - [标准系统移植指南](/pages/01040301) + - [一种快速移植OpenHarmony Linux内核的方法](/pages/01040302) + + - [概述](/pages/01040401) + - [CMake方式组织编译的库移植](/pages/01040402) + - [Makefile方式组织编译的库移植](/pages/01040403) + +## 芯片移植案例 + +- [轻量系统芯片移植案例](/pages/extra/3213c7/) + - [带屏解决方案之恒玄芯片移植案例](/pages/01040501) + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-board.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-board.md new file mode 100644 index 0000000000000000000000000000000000000000..120de4d61c971347762359fba722364bb4385d05 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-board.md @@ -0,0 +1,30 @@ +--- +title: porting-chip-board +permalink: /pages/extra/716a3b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 板级系统移植 + +- **[移植概述](/pages/0104010301)** + +- **[板级驱动适配](/pages/0104010302)** + +- **[HAL层实现](/pages/0104010303)** + +- **[系统组件调用](/pages/0104010304)** + +- **[lwip组件适配](/pages/0104010305)** + +- **[三方组件适配](/pages/0104010306)** + +- **[XTS认证](/pages/0104010307)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-kernel.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-kernel.md new file mode 100644 index 0000000000000000000000000000000000000000..5301360fe1c396df005fe0d853634274c4b1d420 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-kernel.md @@ -0,0 +1,22 @@ +--- +title: porting-chip-kernel +permalink: /pages/extra/71893e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 内核移植 + +- **[移植概述](/pages/0104010201)** + +- **[内核基础适配](/pages/0104010202)** + +- **[内核移植验证](/pages/0104010203)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-prepare.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-prepare.md new file mode 100644 index 0000000000000000000000000000000000000000..ba9c04e63e9954cd038423745e68d486ffd460d4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-chip-prepare.md @@ -0,0 +1,20 @@ +--- +title: porting-chip-prepare +permalink: /pages/extra/f8d4b1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 移植准备 + +- **[移植须知](/pages/0104010101)** + +- **[编译构建适配流程](/pages/0104010102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip-cases.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip-cases.md new file mode 100644 index 0000000000000000000000000000000000000000..a9ce23e307f99428c8a660f786af5cf9bec3cc49 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip-cases.md @@ -0,0 +1,17 @@ +--- +title: porting-minichip-cases +permalink: /pages/extra/3213c7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 轻量系统芯片移植案例 + +- **[轻量带屏解决方案之恒玄芯片移植案例](/pages/01040501)** + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip.md new file mode 100644 index 0000000000000000000000000000000000000000..ce03a8eda9c99627e6039f328bbc3fde1b0cf640 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-minichip.md @@ -0,0 +1,24 @@ +--- +title: porting-minichip +permalink: /pages/extra/8d1893/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 轻量系统芯片移植指导 + +- **[移植准备](/pages/extra/f8d4b1/)** + +- **[内核移植](/pages/extra/71893e/)** + +- **[板级系统移植](/pages/extra/716a3b/)** + +- **[常见问题](/pages/01040104)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-driver.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-driver.md new file mode 100644 index 0000000000000000000000000000000000000000..317012e55616e87262ed360ae999ad5e0e625ef4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-driver.md @@ -0,0 +1,22 @@ +--- +title: porting-smallchip-driver +permalink: /pages/extra/22f30e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 驱动移植 + +- **[移植概述](/pages/0104020301)** + +- **[平台驱动移植](/pages/0104020302)** + +- **[器件驱动移植](/pages/0104020303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-kernel.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-kernel.md new file mode 100644 index 0000000000000000000000000000000000000000..a2bea8a6e8e606f099740eb3cd5108f1d50eacce --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-kernel.md @@ -0,0 +1,20 @@ +--- +title: porting-smallchip-kernel +permalink: /pages/extra/c5ccdb/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 移植内核 + +- **[LiteOS-A内核](/pages/0104020201)** + +- **[Linux内核](/pages/0104020202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-prepare.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-prepare.md new file mode 100644 index 0000000000000000000000000000000000000000..342b7241d2d98c7c8b524f259015dbb09d82f743 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip-prepare.md @@ -0,0 +1,20 @@ +--- +title: porting-smallchip-prepare +permalink: /pages/extra/e8757d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 移植准备 + +- **[移植须知](/pages/0104020101)** + +- **[编译构建](/pages/0104020102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip.md new file mode 100644 index 0000000000000000000000000000000000000000..2470ee00cad75d8a6a42c08ad04772e33315fccf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-smallchip.md @@ -0,0 +1,22 @@ +--- +title: porting-smallchip +permalink: /pages/extra/e6da35/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 小型系统芯片移植指导 + +- **[移植准备](/pages/extra/e8757d/)** + +- **[移植内核](/pages/extra/c5ccdb/)** + +- **[驱动移植](/pages/extra/22f30e/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting-thirdparty.md b/website/docs/_posts/zh-cn/device-dev/porting/porting-thirdparty.md new file mode 100644 index 0000000000000000000000000000000000000000..531d415fc124370869fde4675e7fa17860292dd7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting-thirdparty.md @@ -0,0 +1,22 @@ +--- +title: porting-thirdparty +permalink: /pages/extra/261e32/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 轻量和小型系统三方库移植指导 + +- **[概述](/pages/01040401)** + +- **[CMake方式组织编译的库移植](/pages/01040402)** + +- **[Makefile方式组织编译的库移植](/pages/01040403)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/porting/porting.md b/website/docs/_posts/zh-cn/device-dev/porting/porting.md new file mode 100644 index 0000000000000000000000000000000000000000..14cb697cc07d832c73531cf55eee2c1359a39dbf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/porting/porting.md @@ -0,0 +1,24 @@ +--- +title: porting +permalink: /pages/extra/91d9b5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 移植 + +- **[三方库移植指导](/pages/extra/261e32/)** + +- **[轻量系统芯片移植指导](/pages/extra/8d1893/)** + +- **[小型系统芯片移植指导](/pages/extra/e6da35/)** + +- **[标准系统移植指导](/pages/01040301)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/quick-start/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..431ef90081d0dd9be5e71f59c014080655c89d0e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/Readme-CN.md @@ -0,0 +1,77 @@ +--- +title: Readme-CN +permalink: /pages/extra/cfc381/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 快速入门 + +- [轻量和小型系统入门](/pages/extra/997538/) + - [轻量与小型系统入门概述](/pages/01020101) + - [搭建轻量与小型系统环境](/pages/extra/9bd424/) + - [搭建系统环境概述](/pages/0102010201) + - [开发环境准备](/pages/0102010202) + - [获取源码](/pages/0102010203) + - [使用安装包方式搭建编译环境](/pages/0102010204) + - [使用Docker方式搭建编译环境](/pages/0102010205) + - [常见问题](/pages/0102010206) + + - [运行“Hello World”](/pages/extra/27b8ca/) + - [Hi3861开发板](/pages/extra/3fad23/) + - [安装开发板环境](/pages/010201030101) + - [新建应用程序](/pages/010201030102) + - [编译](/pages/010201030103) + - [烧录](/pages/010201030104) + - [调试验证](/pages/010201030105) + - [运行](/pages/010201030106) + - [常见问题](/pages/010201030107) + + - [Hi3516开发板](/pages/extra/67487a/) + - [安装开发板环境](/pages/010201030201) + - [新建应用程序](/pages/010201030202) + - [编译](/pages/010201030203) + - [烧录](/pages/010201030204) + - [运行](/pages/010201030205) + - [常见问题](/pages/010201030206) + + - [Hi3518开发板](/pages/extra/259012/) + - [安装开发板环境](/pages/010201030301) + - [新建应用程序](/pages/010201030302) + - [编译](/pages/010201030303) + - [烧录](/pages/010201030304) + - [运行](/pages/010201030305) + - [常见问题](/pages/010201030306) + + - [附录](/pages/extra/50fff7/) + - [Hi3861开发板介绍](/pages/0102010401) + - [Hi3516开发板介绍](/pages/0102010402) + - [Hi3518开发板介绍](/pages/0102010403) + +- [标准系统入门](/pages/extra/cdd62a/) + - [标准系统入门简介](/pages/01020201) + - [标准系统开发环境准备(仅Hi3516需要)](/pages/01020202) + - [获取源码](/pages/01020203) + - [运行“Hello World”](/pages/extra/d76d1d/) + - [Hi3516开发板](/pages/extra/c741c1/) + - [创建应用程序](/pages/010202040101) + - [编译](/pages/010202040102) + - [烧录](/pages/010202040103) + - [运行](/pages/010202040104) + + - [RK3568开发板](/pages/extra/c62d01/) + - [创建应用程序](/pages/010202040201) + - [编译](/pages/010202040202) + - [烧录](/pages/010202040203) + - [运行](/pages/010202040204) + + - [常见问题](/pages/01020205) + - [附录](/pages/extra/1de02d/) + - [Hi3516开发板介绍](/pages/0102020601) + - [RK3568开发板介绍](/pages/0102020602) \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md index df131aabb1c82938b06cf36965dc8b19d07068c7..63d47563a4e10c23d9e62027d7c3113af03bdc0c 100644 --- a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md @@ -1,24 +1,28 @@ --- -title: quickstart-lite-env-setup.md -permalink: /pages/extra/a5e1ee/ +title: quickstart-lite-env-setup +permalink: /pages/extra/9bd424/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:44 +date: 2022-02-12 09:01:58 --- -# 搭建系统环境 +# 搭建轻量与小型系统环境 -- **[概述](/pages/0001000200)** +- **[搭建系统环境概述](/pages/0102010201)** -- **[Windows开发环境准备](/pages/0001000201)** +- **[开发环境准备](/pages/0102010202)** -- **[获取源码及Ubuntu编译环境准备](/pages/0001000202)** +- **[获取源码](/pages/0102010203)** -- **[常见问题](/pages/0001000203)** +- **[使用安装包方式搭建编译环境](/pages/0102010204)** + +- **[使用Docker方式搭建编译环境](/pages/0102010205)** + +- **[常见问题](/pages/0102010206)** diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-introduction.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..7e7a03227209ab0f71711b8e5a7c4cdac50fe539 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-introduction.md @@ -0,0 +1,22 @@ +--- +title: quickstart-lite-introduction +permalink: /pages/extra/50fff7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 附录 + +- **[Hi3861开发板介绍](/pages/0102010401)** + +- **[Hi3516开发板介绍](/pages/0102010402)** + +- **[Hi3518开发板介绍](/pages/0102010403)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516.md new file mode 100644 index 0000000000000000000000000000000000000000..81bf5fbef946cd33866c25fc61670efed17a700c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516.md @@ -0,0 +1,28 @@ +--- +title: quickstart-lite-steps-hi3516 +permalink: /pages/extra/67487a/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Hi3516开发板 + +- **[安装开发板环境](/pages/010201030201)** + +- **[新建应用程序](/pages/010201030202)** + +- **[编译](/pages/010201030203)** + +- **[烧录](/pages/010201030204)** + +- **[运行](/pages/010201030205)** + +- **[常见问题](/pages/010201030206)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3518.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3518.md new file mode 100644 index 0000000000000000000000000000000000000000..4fbddc4341001f5b4ef0292678a576b39f8cbf52 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3518.md @@ -0,0 +1,28 @@ +--- +title: quickstart-lite-steps-hi3518 +permalink: /pages/extra/259012/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Hi3518开发板 + +- **[安装开发板环境](/pages/010201030301)** + +- **[新建应用程序](/pages/010201030302)** + +- **[编译](/pages/010201030303)** + +- **[烧录](/pages/010201030304)** + +- **[运行](/pages/010201030305)** + +- **[常见问题](/pages/010201030306)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861.md new file mode 100644 index 0000000000000000000000000000000000000000..0661e87a71eedfb14d7f6aa09aee3bb776d58244 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861.md @@ -0,0 +1,30 @@ +--- +title: quickstart-lite-steps-hi3861 +permalink: /pages/extra/3fad23/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Hi3861开发板 + +- **[安装开发板环境](/pages/010201030101)** + +- **[新建应用程序](/pages/010201030102)** + +- **[编译](/pages/010201030103)** + +- **[烧录](/pages/010201030104)** + +- **[调试验证](/pages/010201030105)** + +- **[运行](/pages/010201030106)** + +- **[常见问题](/pages/010201030107)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps.md new file mode 100644 index 0000000000000000000000000000000000000000..39473322316ea3e3af616630172590df953f372e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite-steps.md @@ -0,0 +1,22 @@ +--- +title: quickstart-lite-steps +permalink: /pages/extra/27b8ca/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 运行“Hello World” + +- **[Hi3861开发板](/pages/extra/3fad23/)** + +- **[Hi3516开发板](/pages/extra/67487a/)** + +- **[Hi3518开发板](/pages/extra/259012/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite.md new file mode 100644 index 0000000000000000000000000000000000000000..bf1b4551000e82ccdaae1573f2c90290591a14f6 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-lite.md @@ -0,0 +1,24 @@ +--- +title: quickstart-lite +permalink: /pages/extra/997538/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 轻量和小型系统入门 + +- **[轻量与小型系统入门概述](/pages/01020101)** + +- **[搭建轻量与小型系统环境](/pages/extra/9bd424/)** + +- **[运行“Hello World”](/pages/extra/27b8ca/)** + +- **[附录](/pages/extra/50fff7/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-appendix.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..0e867bbd980498ec5e3979e417fcfc3a7f078ca7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-appendix.md @@ -0,0 +1,20 @@ +--- +title: quickstart-standard-appendix +permalink: /pages/extra/1de02d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 附录 + +- **[Hi3516开发板介绍](/pages/0102020601)** + +- **[RK3568开发板介绍](/pages/0102020602)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516.md new file mode 100644 index 0000000000000000000000000000000000000000..8f924c2ba393cc5c77f30f96e476f27e47300ce6 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516.md @@ -0,0 +1,24 @@ +--- +title: quickstart-standard-running-hi3516 +permalink: /pages/extra/c741c1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# Hi3516开发板 + +- **[创建应用程序](/pages/010202040101)** + +- **[源码编译](/pages/010202040102)** + +- **[镜像烧录](/pages/010202040103)** + +- **[镜像运行](/pages/010202040104)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568.md new file mode 100644 index 0000000000000000000000000000000000000000..94615d2ce631998749fdb8262ca6c1eae7290301 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568.md @@ -0,0 +1,24 @@ +--- +title: quickstart-standard-running-rk3568 +permalink: /pages/extra/c62d01/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# RK3568开发板 + +- **[创建应用程序](/pages/010202040201)** + +- **[源码编译](/pages/010202040202)** + +- **[镜像烧录](/pages/010202040203)** + +- **[镜像运行](/pages/010202040204)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running.md new file mode 100644 index 0000000000000000000000000000000000000000..5ed773c21abb1149321e86b7d2716edaa037d22b --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard-running.md @@ -0,0 +1,20 @@ +--- +title: quickstart-standard-running +permalink: /pages/extra/d76d1d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 运行“Hello World” + +- **[Hi3516开发板](/pages/extra/c741c1/)** + +- **[RK3568开发板](/pages/extra/c62d01/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard.md index 38fcde58852b51f9141979d2c58cc4ac82b5875c..9e9f30c2bea368ee9dd633b0ed5edcfdfa04294d 100644 --- a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard.md +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart-standard.md @@ -1,30 +1,28 @@ --- -title: quickstart-standard.md -permalink: /pages/extra/4b9ca0/ +title: quickstart-standard +permalink: /pages/extra/cdd62a/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 12:57:45 +date: 2022-02-12 09:01:58 --- # 标准系统入门 -- **[入门介绍](/pages/00010100)** +- **[标准系统入门简介](/pages/01020201)** -- **[搭建Windows开发环境](/pages/00010101)** +- **[标准系统开发环境准备(仅Hi3516需要)](/pages/01020202)** -- **[搭建Ubuntu环境\(获取源码及编译,Docker方式\)](/pages/00010102)** +- **[获取源码](/pages/01020203)** -- **[搭建Ubuntu环境\(获取源码及编译,安装包方式\)](/pages/00010103)** +- **[运行“Hello World”](/pages/extra/d76d1d/)** -- **[镜像烧录](/pages/00010104)** +- **[常见问题](/pages/01020205)** -- **[镜像运行](/pages/00010105)** - -- **[常见问题](/pages/00010106)** +- **[附录](/pages/extra/1de02d/)** diff --git a/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart.md b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart.md new file mode 100644 index 0000000000000000000000000000000000000000..6892c5c00cbf3986224d8f2b69f50c7490adcfac --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/quick-start/quickstart.md @@ -0,0 +1,20 @@ +--- +title: quickstart +permalink: /pages/extra/97be3c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 快速入门 + +- **[轻量和小型系统入门](/pages/extra/997538/)** + +- **[标准系统入门](/pages/extra/cdd62a/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/security/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/security/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..b4624ec20a27392d502f9c5b0293279cfc338c87 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/security/Readme-CN.md @@ -0,0 +1,18 @@ +--- +title: Readme-CN +permalink: /pages/extra/6f893c/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 隐私与安全 + +- [隐私保护](/pages/01030101) +- [安全指南](/pages/01030102) + diff --git a/website/docs/_posts/zh-cn/device-dev/security/security.md b/website/docs/_posts/zh-cn/device-dev/security/security.md new file mode 100644 index 0000000000000000000000000000000000000000..acb508e3212b1b35218c353323f4b5b53ebd5922 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/security/security.md @@ -0,0 +1,20 @@ +--- +title: security +permalink: /pages/extra/cd1c35/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 隐私与安全 + +- **[隐私保护](/pages/01030101)** + +- **[安全指南](/pages/01030102)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/Readme-CN.md b/website/docs/_posts/zh-cn/device-dev/subsystems/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..413083d4fb0c395b18985d0990d850bf3731f802 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/Readme-CN.md @@ -0,0 +1,105 @@ +--- +title: Readme-CN +permalink: /pages/extra/c58432/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 子系统开发指南 + +- [编译构建](/pages/extra/8e49b3/) + - [轻量和小型系统编译构建指导](/pages/01050301) + - [标准系统编译构建指导](/pages/01050302) + - [构建系统编码规范和最佳实践指导](/pages/01050303) +- [分布式远程启动](/pages/010504) +- [图形图像](/pages/extra/9f8231/) + - [图形图像概述](/pages/01050501) + - [容器类组件开发指导](/pages/01050502) + - [布局容器类组件开发指导](/pages/01050503) + - [普通组件开发指导](/pages/01050504) + - [动画开发指导](/pages/01050505) +- [媒体](/pages/extra/b37923/) + - [相机](/pages/extra/45b3fc/) + - [相机开发概述](/pages/0105060101) + - [拍照开发指导](/pages/0105060102) + - [录像开发指导](/pages/0105060103) + - [预览开发指导](/pages/0105060104) + - [音视频](/pages/extra/b5d0b6/) + - [音视频开发概述](/pages/0105060201) + - [音视频播放开发指导](/pages/0105060202) + - [音视频录制开发指导](/pages/0105060203) +- [公共基础](/pages/extra/552ec9/) + - [公共基础库概述](/pages/01050701) + - [公共基础库开发指导](/pages/01050702) + - [公共基础库常见问题](/pages/01050703) +- [AI框架](/pages/extra/34bca9/) + - [AI引擎框架开发指南](/pages/01050801) + - [搭建环境](/pages/01050802) + - [技术规范](/pages/extra/cf90b5/) + - [代码管理规范](/pages/0105080301) + - [命名规范](/pages/0105080302) + - [接口开发规范](/pages/0105080303) + - [开发指导](/pages/extra/e26ebd/) + - [SDK开发过程](/pages/0105080401) + - [插件的开发过程](/pages/0105080402) + - [配置文件的开发过程](/pages/0105080403) + - [开发示例](/pages/extra/041152/) + - [唤醒词识别SDK的开发示例](/pages/0105080501) + - [唤醒词识别插件的开发示例](/pages/0105080502) + - [唤醒词识别配置文件的开发示例](/pages/0105080503) +- [数据管理](/pages/extra/9b24d7/) + - [关系型数据库](/pages/extra/4092ff/) + - [关系型数据库概述](/pages/extra/d8c9ed/) + - [关系型数据库开发指导](/pages/extra/041e6b/) + - [轻量级数据存储](/pages/extra/0577b6/) + - [轻量级数据存储概述](/pages/extra/c7b4d1/) + - [轻量级数据存储开发指导](/pages/extra/be62f0/) +- [Sensor服务](/pages/extra/332140/) + - [Sensor服务子系概述](/pages/01050901) + - [Sensor服务子系使用指导](/pages/01050902) + - [Sensor服务子系使用实例](/pages/01050903) +- [用户程序框架](/pages/extra/84143e/) + - [概述](/pages/01050a01) + - [搭建环境](/pages/01050a02) + - [开发指导](/pages/01050a03) + - [开发实例](/pages/01050a04) +- [OTA升级](/pages/01050b) +- [电话服务](/pages/extra/be8b4d/) + - [电话服务概述](/pages/01050c01) + - [电话服务开发指导](/pages/01050c02) +- [安全](/pages/extra/0fa2da/) + - [概述](/pages/01050d01) + - [应用验签开发指导](/pages/01050d02) + - [应用权限管理开发指导](/pages/01050d03) + - [IPC通信鉴权开发指导](/pages/01050d04) +- [启动恢复](/pages/extra/de37b5/) + - [启动恢复子系统概述](/pages/01050e01) + - [init启动引导组件](/pages/01050e02) + - [appspawn应用孵化组件](/pages/01050e03) + - [bootstrap服务启动组件](/pages/01050e04) + - [syspara系统属性组件](/pages/01050e05) + - [常见问题](/pages/01050e06) + - [参考](/pages/01050e07) +- [测试用例开发指导](/pages/010901) +- [DFX](/pages/extra/5878df/) + - [DFX概述](/pages/01051001) + - [HiLog开发指导](/pages/01051002) + - [HiLog\_Lite开发指导](/pages/01051003) + - [HiTrace开发指导](/pages/01051004) + - [HiCollie开发指导](/pages/01051005) + - [HiSysEvent开发指导](/pages/01050f04) + - [HiSysEvent打点指导](/pages/0105100601) + - [HiSysEvent订阅指导](/pages/0105100602) + - [HiSysEvent查询指导](/pages/0105100603) + - [HiSysEvent工具使用指导](/pages/0105100604) +- [研发工具链](/pages/extra/4754cf/) + - [bytrace使用指导](/pages/01090201) + - [hdc\_std 使用指导](/pages/01090202) + - [hiperf 使用指南](/pages/extra/036e00/) +- [XTS认证用例开发指导](/pages/010a01) diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-demo.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-demo.md new file mode 100644 index 0000000000000000000000000000000000000000..18a7c104b4ee3f7d951807f3158d407069ccd407 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-demo.md @@ -0,0 +1,26 @@ +--- +title: subsys-aiframework-demo +permalink: /pages/extra/041152/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 开发示例 + +以开发唤醒词识别为例,开发者可在Hi3516DV300开发板上,基于AI引擎框架开发唤醒词识别的sdk以及唤醒词识别的plugin,通过编译命令编出新的版本镜像并将其烧入版本。同时,开发者开发唤醒词识别的应用,该应用能够接收外部音频,将listen到的音频传入SDK中的接口,若音频中带有关键词,唤醒词识别的应用会识别出相应的词语,并打印在命令行中。 + +本示例中唤醒词识别的场景中唤醒词是固定的,当开发者传入的音频包含”Hi,小问“,启动的应用就会打印"\[Hi, xiaowen\]",当不包含时,会打印'\[UNKNOWN\]"。 + +- **[唤醒词识别SDK的开发示例](/pages/0105080501)** + +- **[唤醒词识别插件的开发示例](/pages/0105080502)** + +- **[唤醒词识别配置文件的开发示例](/pages/0105080503)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-devguide.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-devguide.md new file mode 100644 index 0000000000000000000000000000000000000000..7df6bc6d25759a388eb34addc0ee0fb0cf3f10e7 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-devguide.md @@ -0,0 +1,24 @@ +--- +title: subsys-aiframework-devguide +permalink: /pages/extra/e26ebd/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 开发指导 + +为实现AI 引擎框架的接入,开发者需开发上述[图1](/pages/01050801#fig143186187187)中的SDK模块和Plugin模块,通过调用sdk提供的接口,基于AI引擎框架实现调用plugin中算法的能力,从而实现AI能力的生命周期管理和按需部署功能。 + +- **[SDK开发过程](/pages/0105080401)** + +- **[插件的开发过程](/pages/0105080402)** + +- **[配置文件的开发过程](/pages/0105080403)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-tech.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-tech.md new file mode 100644 index 0000000000000000000000000000000000000000..f197247ad064ad93d3749497e6e4661781d85151 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework-tech.md @@ -0,0 +1,28 @@ +--- +title: subsys-aiframework-tech +permalink: /pages/extra/cf90b5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 技术规范 + +**用词约定:** + +**规则**:必须准守的约定 + +**建议**:需要加以考虑的约定 + +- **[代码管理规范](/pages/0105080301)** + +- **[命名规范](/pages/0105080302)** + +- **[接口开发规范](/pages/0105080303)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework.md new file mode 100644 index 0000000000000000000000000000000000000000..f23ad193b6532ce5cc2cdd7fc335f47fb1b5c658 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-aiframework.md @@ -0,0 +1,26 @@ +--- +title: subsys-aiframework +permalink: /pages/extra/34bca9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# AI框架 + +- **[AI引擎框架开发指南](/pages/01050801)** + +- **[搭建环境](/pages/01050802)** + +- **[技术规范](/pages/extra/cf90b5/)** + +- **[开发指导](/pages/extra/e26ebd/)** + +- **[开发示例](/pages/extra/041152/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-application-framework.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-application-framework.md new file mode 100644 index 0000000000000000000000000000000000000000..cfe1a72c7e9d85f6d4c18f6d5cc6eda2e0210476 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-application-framework.md @@ -0,0 +1,24 @@ +--- +title: subsys-application-framework +permalink: /pages/extra/84143e/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 用户程序框架 + +- **[概述](/pages/01050a01)** + +- **[搭建环境](/pages/01050a02)** + +- **[开发指导](/pages/01050a03)** + +- **[开发实例](/pages/01050a04)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-boot.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-boot.md new file mode 100644 index 0000000000000000000000000000000000000000..e0b150b1bc169809b74dc48330c1762aae9f1649 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-boot.md @@ -0,0 +1,30 @@ +--- +title: subsys-boot +permalink: /pages/extra/de37b5/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 启动恢复 + +- **[启动恢复子系统概述](/pages/01050e01)** + +- **[init启动引导组件](/pages/01050e02)** + +- **[appspawn应用孵化组件](/pages/01050e03)** + +- **[bootstrap服务启动组件](/pages/01050e04)** + +- **[syspara系统属性组件](/pages/01050e05)** + +- **[常见问题](/pages/01050e06)** + +- **[参考](/pages/01050e07)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-build.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-build.md new file mode 100644 index 0000000000000000000000000000000000000000..5b52f9dc9aa1afb3c93d205de2cd21bc92743870 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-build.md @@ -0,0 +1,20 @@ +--- +title: subsys-build +permalink: /pages/extra/8e49b3/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 编译构建 + +- **[轻量和小型系统编译构建指导](/pages/01050301)** + +- **[标准系统编译构建指导](/pages/01050302)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..f4f4357f70a99fcc9497455836b00e195187a5e9 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md @@ -0,0 +1,204 @@ +--- +title: subsys-data-relational-database-guide +permalink: /pages/extra/041e6b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 关系型数据库开发指导 + +## 场景介绍 + +关系型数据库是在SQLite基础上实现的本地数据操作机制,提供给用户无需编写原生SQL语句就能进行数据增删改查的方法,同时也支持原生SQL语句操作。 + +## 接口说明 +### 数据库的创建和删除 + +关系型数据库提供了数据库创建方式,以及对应的删除接口,涉及的API如下所示。 + +表1 数据库创建和删除API + +| 类名 | 接口名 | 描述 | +| ---- | ---- | ---- | +| RdbStoreConfig | RdbStoreConfig(const std::string &path,
StorageMode storageMode = StorageMode::MODE_DISK,
bool readOnly = false,
const std::vector &encryptKey = std::vector(),
const std::string &journalMode = "",
const std::string &syncMode = "",
const std::string &databaseFileType = "",
const std::string &databaseFileSecurityLevel = "") | 对数据库进行配置,包括设置数据库名、存储模式、日志模式、同步模式,是否为只读,及数据库加密。
  • path:数据库路径;
  • readOnly:是否只读;
  • storageMode:存储模式;
  • encryptKey:加密密钥;
  • journalMode:日志模式;
  • syncMode:同步模式;
  • databaseFileType:数据库类型;
  • databaseFileSecurityLevel:安全等级
| +| RdbOpenCallback | int OnCreate(RdbStore &rdbStore) | 数据库创建时被回调,开发者可以在该方法中初始化表结构,并添加一些应用使用到的初始化数据。 | +| RdbOpenCallback | int OnUpgrade(RdbStore &rdbStore, int currentVersion, int targetVersion) | 数据库升级时被回调。 | +| RdbOpenCallback | int OnDowngrade(RdbStore &rdbStore, int currentVersion, int targetVersion) | 数据库降级时被回调。 | +| RdbHelper | std::shared_ptr\ GetRdbStore(const RdbStoreConfig &config, int version, RdbOpenCallback &openCallback, int &errCode) | 根据配置创建或打开数据库。 | +| RdbHelper | int DeleteRdbStore(const std::string &path) | 删除指定的数据库。 | + +### 数据库的加密 + +关系型数据库提供数据库加密的能力,在创建数据库时若指定了密钥,则会创建为加密数据库。再次使用此数据库时,需要指定该密钥,才能正确打开数据库。 + +表2 数据库修改密钥API +| 类名 | 接口名 | 描述 | +| ---- | ---- | ---- | +| RdbStore | int ChangeEncryptKey(const std::vector &newKey) | 为数据库设置新的加密密钥。注:仅支持加密数据库更换加密密钥。 | + +### 数据库谓词的使用 + +关系型数据库提供了用于设置数据库操作条件的谓词AbsRdbPredicates,其中包括两个实现子类RdbPredicates和RawRdbPredicates: + +- RdbPredicates:开发者无需编写复杂的SQL语句,仅通过调用该类中条件相关的方法,如equalTo、notEqualTo、groupBy、orderByAsc、beginsWith等,就可自动完成SQL语句拼接,方便用户聚焦业务操作。 +- RawRdbPredicates:可满足复杂SQL语句的场景,支持开发者自己设置where条件子句和whereArgs参数。不支持equalTo等条件接口的使用。 + + 表7 数据库谓词API + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | RdbPredicates | AbsPredicates *EqualTo(std::string field, std::string value) | 设置谓词条件,满足field字段与value值相等。 | + | RdbPredicates | AbsPredicates *NotEqualTo(std::string field, std::string value) | 设置谓词条件,满足field字段与value值不相等。 | + | RdbPredicates | AbsPredicates *BeginsWith(std::string field, std::string value) | 设置谓词条件,满足field字段以value值开头。 | + | RdbPredicates | AbsPredicates *Between(std::string field, std::string low, std::string high) | 设置谓词条件,满足field字段在最小值low和最大值high之间。 | + | RdbPredicates | AbsPredicates *OrderByAsc(std::string field) | 设置谓词条件,根据field字段升序排列。 | + | RdbPredicates | void SetWhereClause(std::string whereClause) | 设置where条件子句。 | + | RdbPredicates | void SetWhereArgs(std::vector\ whereArgs) | 设置whereArgs参数,该值表示where子句中占位符的值。 | + +### 数据表的增删改查 + +关系型数据库提供对本地数据增删改查操作的能力,相关API如下所示。 + +- 新增 + + 关系型数据库提供了插入数据的接口,通过ValuesBucket输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败时则返回-1。 + + 表3 数据表插入API + + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | RdbStore | int Insert(int64_t &outRowId, const std::string &table, const ValuesBucket &initialValues) | 向数据库插入数据。
  • table:待添加数据的表名。
  • initialValues:以ValuesBucket存储的待插入的数据。它提供一系列put方法,如PutString(const std::string &columnName, const std::string &value),PutDouble(const std::string &columnName, double value),用于向ValuesBucket中添加数据。
| + +- 删除 + + 调用删除接口,通过AbsRdbPredicates指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回0。 + + 表5 数据表删除API + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | RdbStore | int Delete(int &deletedRows, const AbsRdbPredicates &predicates) | 删除数据。
  • deletedRows:删除的记录条数。
  • predicates:Rdb谓词,指定了删除操作的表名和条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
    • RdbPredicates:支持调用谓词提供的equalTo等接口,设置更新条件。
    • RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
| + +- 更新 + + 调用更新接口,传入要更新的数据,并通过AbsRdbPredicates指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。 + + 表4 数据表更新API + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | RdbStore | int Update(int &changedRows, const ValuesBucket &values, const AbsRdbPredicates &predicates) | 更新数据库表中符合谓词指定条件的数据。
  • changedRows:更新的记录条数。
  • values:以ValuesBucket存储的要更新的数据。
  • predicates:指定了更新操作的表名和条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
    • RdbPredicates:支持调用谓词提供的equalTo等接口,设置更新条件。
    • RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
| + +- 查询 + + 关系型数据库提供了两种查询数据的方式: + + - 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的SQL语句进行查询操作,无需用户传入原生的SQL语句。 + - 执行原生的SQL语句进行查询操作。 + + 表6 数据表查询API + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | RdbStore | std::unique_ptr Query(const AbsRdbPredicates &predicates, const std::vector\ columns) | 查询数据。
  • predicates:谓词,可以设置查询条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
    • RdbPredicates:支持调用谓词提供的equalTo等接口,设置更新条件。
    • RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
  • columns:规定查询返回的列。
| + | RdbStore | std::unique_ptr QuerySql(const std::string &sql, const std::vector\ &selectionArgs = std::vector\()) | 执行原生的用于查询操作的SQL语句。
  • sql:原生用于查询的sql语句。
  • selectionArgs:sql语句中占位符参数的值,若select语句中没有使用占位符,该参数可以设置为null。
| + +### 查询结果集的使用 + +关系型数据库提供了查询返回的结果集ResultSet,其指向查询结果中的一行数据,供用户对查询结果进行遍历和访问。ResultSet对外API如下所示。 + + 表8 结果集API + | 类名 | 接口名 | 描述 | + | ---- | ---- | ---- | + | ResultSet | int GoTo(int offset) | 从结果集当前位置移动指定偏移量。 | + | ResultSet | int GoToRow(int position) | 将结果集移动到指定位置。 | + | ResultSet | int GoToNextRow() | 将结果集向后移动一行。 | + | ResultSet | int GoToPreviousRow() | 将结果集向前移动一行。 | + | ResultSet | int IsStarted(bool &result) | 判断结果集是否被移动过。 | + | ResultSet | int IsEnded(bool &result) | 判断结果集是否被移动到最后一行之后。 | + | ResultSet | int IsAtFirstRow(bool &result) | 判断结果集当前位置是否在第一行。 | + | ResultSet | int IsAtLastRow(bool &result) | 判断结果集当前位置是否在最后一行。 | + | ResultSet | int GetRowCount(int &count) | 获取当前结果集中的记录条数。 | + | ResultSet | int GetColumnCount(int &count) | 获取结果集中的列数。 | + | ResultSet | int GetString(int columnIndex, std::string &value) | 获取当前行指定列的值,以String类型返回。 | + | ResultSet | int GetBlob(int columnIndex, std::vector\ &blob) | 获取当前行指定列的值,以字节数组形式返回。 | + | ResultSet | int GetDouble(int columnIndex, double &value) | 获取当前行指定列的值,以double型返回。 | + +## 约束与限制 + +无。 + +## 开发步骤 + +1. 创建数据库。 + + a. 配置数据库相关信息,包括数据库的名称、存储模式、是否为只读模式等。 + + b. 初始化数据库表结构和相关数据。 + + c. 创建数据库。 + + 示例代码如下: + ``` + const std::string DATABASE_NAME = RDB_TEST_PATH + "RdbStoreTest.db"; + const CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, salary REAL, blobType BLOB)"; + + class OpenCallback : public RdbOpenCallback { + public: + int OnCreate(RdbStore &rdbStore) override; + int OnUpgrade(RdbStore &rdbStore, int oldVersion, int newVersion) override; + }; + + int OpenCallback::OnCreate(RdbStore &store) + { + return store.ExecuteSql(CREATE_TABLE_TEST); + } + + RdbStoreConfig config(DATABASE_NAME); + OpenCallback callback; + + std::shared_ptr store = RdbHelper::GetRdbStore(config, 1, callback, 0); + ``` + +2. 插入数据。 + + a. 构造要插入的数据,以ValuesBucket形式存储。 + + b. 调用关系型数据库提供的插入接口。 + + c. 创建数据库。 + + 示例代码如下: + ``` + ValuesBucket values; + + values.PutInt("id", 1); + values.PutString("name", std::string("Tom")); + values.PutInt("age", 18); + values.PutDouble("salary", 100.5); + values.PutBlob("blobType", std::vector{ 1, 2, 3 }); + store->Insert(id, "test", values); + ``` + +3. 查询数据。 + + a. 构造用于查询的谓词对象,设置查询条件。 + + b. 指定查询返回的数据列。 + + c. 调用查询接口查询数据。 + + d. 调用结果集接口,遍历返回结果。 + + 示例代码如下: + ``` + std::vector columns = {"id", "name", "age", "salary"}; + + RdbPredicates predicates("test"); + predicates.EqualTo("age", "25")->OrderByAsc("salary"); + std::unique_ptr resultSet = store->Query(predicates, columns) + resultSet.goToNextRow(); + ``` + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..1e5b49e8bd180dc9bfd1ceaa43a86c89f002bd25 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md @@ -0,0 +1,52 @@ +--- +title: subsys-data-relational-database-overview +permalink: /pages/extra/d8c9ed/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 关系型数据库概述 + +关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。OpenHarmony关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。 + +## 基本概念 + +- 关系型数据库 + + 基于关系模型来管理数据的数据库,以行和列的形式存储数据。 + +- 谓词 + + 数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。 + +- 结果集 + + 指用户查询之后的结果集合,可以对数据进行访问。结果集提供了灵活的数据访问方式,可以更方便的拿到用户想要的数据。 + +- SQLite数据库 + + 一款遵守ACID的轻型开源关系型数据库管理系统。 + +## 运作机制 +OpenHarmony关系型数据库对外提供通用的操作接口(即Rdb Store接口),底层使用第三方开源组件SQLite作为持久化存储引擎,支持SQLite具有的所有数据库特性。 + +**图1** 关系型数据库运作机制 + +![](/images/device-dev/subsystems/figure/zh-cn_image_0000001115980740.png) + +## 默认配置 +- 如果不指定数据库的日志模式,那么系统默认日志方式是WAL(Write Ahead Log)模式。 +- 如果不指定数据库的落盘模式,那么系统默认落盘方式是FULL模式。 +- OpenHarmony数据库使用的共享内存默认大小是8MB,单次查询使用的共享内存默认大小是2MB。 + +## 约束与限制 +- 数据库中连接池的最大数量是4个,用以管理用户的读操作。 +- 为保证数据的准确性,数据库同一时间只能支持一个写操作。 + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database.md new file mode 100644 index 0000000000000000000000000000000000000000..5331f5bcbf7134929635c1ed540b9bbc8ce352b2 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-relational-database.md @@ -0,0 +1,18 @@ +--- +title: subsys-data-relational-database +permalink: /pages/extra/4092ff/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 关系型数据库 + +- **[关系型数据库概述](/pages/extra/d8c9ed/)** + +- **[关系型数据库开发指导](/pages/extra/041e6b/)** diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..36ba0fb298fb3861a468d650b7367802431b5251 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md @@ -0,0 +1,208 @@ +--- +title: subsys-data-storage-guide +permalink: /pages/extra/be62f0/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 轻量级数据存储开发指导 + +## 场景介绍 + +轻量级数据存储功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。需要注意的是,应用访问的实例包含文件所有数据,这些数据会一直加载在设备的内存中,直到应用主动从内存中将其移除前,应用可以通过Preferences的API进行数据操作。 + +## 接口说明 + +轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括字符串型、布尔型、整数型、长整型、浮点型、双精度类型和字符串数组。 + +**创建存储实例** + +读取指定文件,将数据加载到Preferences实例,即可创建一个存储实例,用于数据操作。 + +**表 1** 轻量级数据存储实例创建接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| PreferencesHelper | static std::shared_ptr GetPreferences(const std::string &path, int &errCode); | path:应用程序内部数据存储路径。
errCode:错误码。
返回值:轻量级存储实例。 | + +**存入数据** + +通过Put系列方法,可以增加或修改Preferences实例中的数据。 + +**表 2** 轻量级偏好数据库存入接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| Preferences | int PutInt(const std::string &key, int value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutString(const std::string &key, const std::string &value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutBool(const std::string &key, bool value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutLong(const std::string &key, int64_t value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutFloat(const std::string &key, float value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutDouble(const std::string &key, double value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 | +| Preferences | int PutStringSet(const std::string &key, const std::set\ &value); | key:将要存储的key名称,不能为空。
value:将要存储的。
返回值:错误码。 | + +**读取数据** + +通过调用Get系列方法,可以读取Preferences中的数据。 + +**表 3** 轻量级数据读取接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| Preferences | bool GetBool(const std::string &key, bool defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | std::string GetString(const std::string &key, const std::string &defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | bool GetBool(const std::string &key, bool defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | float GetFloat(const std::string &key, float defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | double GetDouble(const std::string &key, double defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | int64_t GetLong(const std::string &key, int64_t defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | +| Preferences | std::set\ GetStringSet(const std::string &key, std::set\ &defValue); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 | + +**数据持久化** + +通过执行flush或者flushSync方法,应用可以将缓存的数据再次写回文本文件中进行持久化存储。 + +**表 5** 轻量级数据数据持久化接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| Preferences | void Flush(); | 将Preferences实例通过异步线程回写入文件中。 | +| Preferences | int FlushSync(); | 将Preferences实例通过同步线程回写入文件中,并返回错误码。 | + +**订阅数据变化** + +订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被回调。 + +**表 5** 轻量级数据变化订阅接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| Preferences | void RegisterObserver(std::shared_ptr preferencesObserver); | preferencesObserver:需要订阅的回调对象实例。 | +| Preferences | void UnRegisterObserver(std::shared_ptr preferencesObserver); | preferencesObserver:需要注销订阅的回调对象实例。 | + +**删除数据文件** + +通过调用以下两种接口,可以删除数据实例或对应的文件。 + +**表 6** 轻量级数据存储删除接口 + +| 类名 | 方法名 | 描述 | +| --- | ----- | ----| +| PreferencesHelper | int DeletePreferences(const std::string &path); | 将Preferences实例从内存中移除,同时删除其在设备上的持久化文件。path:应用程序内部数据存储路径。
返回值:错误码。 | +| PreferencesHelper | int RemovePreferencesFromCache(const std::string &path); | 仅将Preferences实例从内存中移除。path:应用程序内部数据存储路径。
返回值:错误码。 | + +## 开发步骤 + +1. 准备工作,引入preferences以及相关的头文件到开发环境。 + + ``` C++ + 头文件路径://distributeddatamgr_appdatamgr/interfaces/innerkits/native_preferences/include + ``` + +2. 获取Preferences实例。 + + 读取指定文件,将数据加载到Preferences实例,用于数据操作。 + + ``` C++ + int errCode = E_OK; + Preferences pref = PreferencesHelper::GetPreferences(PREF_TEST_PATH + "test.xml", errCode); // PREF_TEST_PATH须为应用沙箱路径。 + EXPECT_EQ(errCode, E_OK); + ``` + + +3. 存入数据。 + + 使用Preferences put方法保存数据到缓存的实例中。 + + ```C++ + pref->PutString("test", "remove"); + ``` + +4. 读取数据。 + + 使用Preferences get方法读取数据。 + + ``` C++ + std::string ret = pref->GetString("test", "defaultValue"); + EXPECT_EQ(ret, "remove"); + ``` + + +5. 数据持久化。 + + 应用存入数据到Preferences实例后,可以通过flush或者flushSync方法将Preferences实例回写到文件中。 + + ```C++ + int err = pref->FlushSync(); + EXPECT_EQ(ret, E_OK); + ``` + + +6. 订阅数据变化。 + + 应用订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush或者flushSync方法时,PreferencesObserver被触发回调。不再需要PreferencesObserver时请注销。 + + 自定义类,实现PreferencesObserver接口: + ``` C++ + class PreferencesObserverCounter : public PreferencesObserver { + public: + virtual ~PreferencesObserverCounter(); + void OnChange(Preferences &preferences, const std::string &key) override; + + std::atomic_int notifyTimes; + static const std::vector NOTIFY_KEYS_VECTOR; + }; + + PreferencesObserverCounter::~PreferencesObserverCounter() {} + + void PreferencesObserverCounter::OnChange(Preferences &preferences, const std::string &key) + { + for (auto it = NOTIFY_KEYS_VECTOR.cbegin(); it != NOTIFY_KEYS_VECTOR.cend(); it++) { + if (key.compare(*it)) { + notifyTimes++; + break; + } + } + } + + const std::vector PreferencesObserverCounter::NOTIFY_KEYS_VECTOR = { PreferencesTest::KEY_TEST_INT_ELEMENT, + PreferencesTest::KEY_TEST_LONG_ELEMENT, PreferencesTest::KEY_TEST_FLOAT_ELEMENT, + PreferencesTest::KEY_TEST_BOOL_ELEMENT, PreferencesTest::KEY_TEST_STRING_ELEMENT }; + ``` + + 订阅数据变化,并触发执行回调方法: + ``` C++ + std::shared_ptr counter = + std::shared_ptr(new PreferencesObserverCounter()); + pref->RegisterObserver(counter); // 注册数据变化的回调。 + + pref->PutString(PreferencesTest::KEY_TEST_STRING_ELEMENT, "test"); + pref->Flush(); // 触发执行counter的onChanged回调方法。 + EXPECT_EQ(static_cast(counter.get())->notifyTimes, 1); + + /* same value */ + pref->PutInt(PreferencesTest::KEY_TEST_INT_ELEMENT, 2); + pref->PutString(PreferencesTest::KEY_TEST_STRING_ELEMENT, "test"); + pref->Flush(); + EXPECT_EQ(static_cast(counter.get())->notifyTimes, 2); + + pref->UnRegisterObserver(counter); // 注销注册数据变化的回调。 + ``` + + +7. 删除指定文件。 + + 从使用PreferencesHelper内存中移除指定文件对应的Preferences单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。删除后,数据及文件将不可恢复。 + + ``` C++ + pref = nullptr; + int ret = PreferencesHelper::DeletePreferences("/data/test/test"); + EXPECT_EQ(ret, E_OK); + ``` + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..4ade46e8c1eeae85c8e7eb8cbc84d4ba88020f8d --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md @@ -0,0 +1,44 @@ +--- +title: subsys-data-storage-overview +permalink: /pages/extra/c7b4d1/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 轻量级数据存储概述 + +轻量级数据存储适用于对Key-Value结构的数据进行存取和持久化操作。应用获取某个轻量级存储对象后,该存储对象中的数据将会被缓存在内存中,以便应用获得更快的数据存取速度。应用也可以将缓存的数据再次写回文本文件中进行持久化存储,由于文件读写将产生不可避免的系统资源开销,建议应用减少对持久化文件的读写频率。 + +## 基本概念 + +- **Key-Value数据结构** + + 一种键值结构数据类型。Key是不重复的关键字,Value是数据值。 + +- **非关系型数据库** + + 区别于关系数据库,不保证遵循ACID(Atomic、Consistency、Isolation及Durability)特性,不采用关系模型来组织数据,数据之间无关系。 + + +## 运作机制 + +1. 应用通过指定Preferences文件将其中的数据加载到Preferences实例,系统会通过静态容器将该实例存储在内存中,同一应用或进程中每个文件仅存在一个Preferences实例,直到应用主动从内存中移除该实例或者删除该Preferences文件。 +2. 应用获取到Preferences文件对应的实例后,可以从Preferences实例中读取数据,或者将数据存入Preferences实例中。通过调用flush或者flushSync方法可以将Preferences实例中的数据回写到文件里。 + +**图 1** 轻量级数据存储运作机制 + + +![](/images/device-dev/subsystems/figure/zh-cn_image_0000001192123772.png) + +## 约束与限制 + +- 因Preferences实例会加载到内存中,建议存储的数据不超过一万条,并及时清理不再使用的实例,以便减少非内存开销。 +- 数据中的key为string类型,要求非空且字符长度不超过80个。 +- 当数据中的value为string类型时,允许为空,字符长度不超过8192个。 + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage.md new file mode 100644 index 0000000000000000000000000000000000000000..5797ad7751f582f0fe70d2b640080507214b19f4 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data-storage.md @@ -0,0 +1,18 @@ +--- +title: subsys-data-storage +permalink: /pages/extra/0577b6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 轻量级数据存储 + +- **[轻量级数据存储概述](/pages/extra/c7b4d1/)** + +- **[轻量级数据存储开发指导](/pages/extra/be62f0/)** diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data.md new file mode 100644 index 0000000000000000000000000000000000000000..ddc6e57e793183698908b56502fc7c18b950bd39 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-data.md @@ -0,0 +1,19 @@ +--- +title: subsys-data +permalink: /pages/extra/9b24d7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 数据管理 + +- **[关系型数据库](/pages/extra/4092ff/)** +- **[轻量级数据存储](/pages/extra/0577b6/)** + + diff --git "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hilog-standard.md similarity index 51% rename from "website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" rename to website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hilog-standard.md index a3b7a29c19e0b49431033aeb62a72ca69bdb3e0c..ff9eeb800541197c21ed8bde778949dddf8fb401 100644 --- "a/website/docs/01.\346\226\207\346\241\243/05.\345\255\220\347\263\273\347\273\237\345\274\200\345\217\221/15.DFX/02.HiLog\345\274\200\345\217\221\346\214\207\345\257\274.md" +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hilog-standard.md @@ -1,17 +1,17 @@ --- -title: HiLog开发指导 -permalink: /pages/00040e01 +title: subsys-dfx-hilog-standard +permalink: /pages/extra/18d76e/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false -date: 2021-12-30 18:31:32 +date: 2022-02-12 09:01:57 --- -# HiLog开发指导 +# HiLog开发指导 - [概述](#section8154107175019) - [接口说明](#section6748124155012) @@ -31,61 +31,68 @@ HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用 **表 1** C++、C的函数接口 -

C++

+ - + - - - - - - - + - - + - - + - - + - - + - - + - - - - @@ -103,7 +110,7 @@ HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用 - @@ -114,33 +121,38 @@ HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用

返回值:大于等于0,成功;小于0,失败。

- + - - + - - + - - + - - + -

C++

C

+
  

C

+

方法

+

方法

方法/宏

+

方法/宏

HiLog

+

HiLog

int Debug(const HiLogLabel &label, const char *fmt, ...)

+

int Debug(const HiLogLabel &label, const char *fmt, ...)

HILOG_DEBUG(type, ...)

+

HILOG_DEBUG(type, ...)

int Info(const HiLogLabel &label, const char *fmt, ...)

+
  

int Info(const HiLogLabel &label, const char *fmt, ...)

HILOG_INFO(type, ...)

+

HILOG_INFO(type, ...)

int Warn(const HiLogLabel &label, const char *fmt, ...)

+
  

int Warn(const HiLogLabel &label, const char *fmt, ...)

HILOG_WARN(type, ...)

+

HILOG_WARN(type, ...)

int Error(const HiLogLabel &label, const char *fmt, ...)

+
  

int Error(const HiLogLabel &label, const char *fmt, ...)

HILOG_ERROR(type, ...)

+

HILOG_ERROR(type, ...)

int Fatal(const HiLogLabel &label, const char *fmt, ...)

+
  

int Fatal(const HiLogLabel &label, const char *fmt, ...)

HILOG_FATAL(type, ...)

+

HILOG_FATAL(type, ...)

NA

+
  

NA

int HiLogPrint(LogType type, LogLevel level, unsigned int domain, const char *tag, const char *fmt, ...)

+

int HiLogPrint(LogType type, LogLevel level, unsigned int domain, const char *tag, const char *fmt, ...)

boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)

+
  

boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)

bool HiLogIsLoggable(unsigned int domain, const char *tag, LogLevel level)

+

bool HiLogIsLoggable(unsigned int domain, const char *tag, LogLevel level)

HiLogLabel

+

HiLogLabel

struct HiLogLabel

+

struct HiLogLabel

LOG_DOMAIN

+

LOG_DOMAIN

LOG_TAG

HiLog

+

HiLog

int Debug(const HiLogLabel &label, const char *fmt, ...)

int Info(const HiLogLabel &label, const char *fmt, ...)

+
  

int Info(const HiLogLabel &label, const char *fmt, ...)

功能:输出 info 级别日志。

+

功能:输出 info 级别日志。

参数说明同 Debug 接口。

int Warn(const HiLogLabel &label, const char *fmt, ...)

+
  

int Warn(const HiLogLabel &label, const char *fmt, ...)

功能:输出 warn 级别日志。

+

功能:输出 warn 级别日志。

参数说明同 Debug 接口。

int Error(const HiLogLabel &label, const char *fmt, ...)

+
  

int Error(const HiLogLabel &label, const char *fmt, ...)

功能:输出 error 级别日志。

+

功能:输出 error 级别日志。

参数说明同 Debug 接口。

int Fatal(const HiLogLabel &label, const char *fmt, ...)

+
  

int Fatal(const HiLogLabel &label, const char *fmt, ...)

功能:输出 fatal 级别日志。

+

功能:输出 fatal 级别日志。

参数说明同 Debug 接口。

boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)

+
  

boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)

功能:检查指定业务领域、TAG、级别的日志是否可以打印。

+

功能:检查指定业务领域、TAG、级别的日志是否可以打印。

输入参数:

  • domain:指定日志业务领域。
  • tag: 指定日志TAG。
  • level: 指定日志level。

输出参数:无

diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md new file mode 100644 index 0000000000000000000000000000000000000000..91a4d3287e9d54f4e8bde756de8b46d15582cb74 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx-hisysevent-write-config.md @@ -0,0 +1,331 @@ +--- +title: subsys-dfx-hisysevent-write-config +permalink: /pages/extra/4e31c6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# HiSysEvent打点配置指导 + +- [概述](#section315316685115) + - [基本概念](#section123181432175143) + - [约束与限制](#section123181432175114) +- [编写yaml文件](#section123181432175113) + - [yaml文件编写规则](#section123181432175133) + - [yaml文件编写样例](#section123181432175123) +- [验证yaml文件](#section123181432175115) + - [配置yaml文件路径](#section123181432175135) + - [编译yaml文件](#section123181432175137) + - [打点及查询定义的事件](#section123181432175139) + +## 概述 + +组件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.js文件中[配置yaml文件的路径](#section123181432175135)。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.js文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.def的json文件。最后,将此json文件打包到系统指定路径下,用作HiSysEvent事件落盘的判断依据。 + +### 基本概念 + +在配置HiSysEvent打点之前,开发者应了解以下基本概念: + +- 事件领域 + 用于标识事件所属的领域,在yaml文件中以domain为键值指定,可参考yaml文件样例中的[domain](#section123181432175123)。 + +- 事件名称 + 用于指定事件领域包含的所有事件,可参考yaml文件样例中的[EVENT_NAMEA/EVENT_NAMEB](#section123181432175123)。 + +- 参数 + 用于定义某个事件名称包含的所有键值,可参考yaml文件样例中的[__BASE/NAME1/NAME2](#section123181432175123)。 + + +### 约束与限制 + +**定义事件领域、事件名称及参数的约束与限制:** + +- 每个yaml文件只能有一个事件领域,且不能与其他yaml文件中定义的事件领域重名。 + +- 每个事件领域可定义零个或多个事件名称,同一个事件领域内部的事件名称不能重名。 + +- 每个事件名称可定义多个参数,同一个事件名称内部的参数不能重名,每个事件名称**有且只有**一个名称为__BASE的参数,此参数字段组成如表1,他自定义参数,具体字段组成如表2。 + + **表 1** __BASE参数字段说明 + + + + + + + + + + + + + + + + + + + + + + + +

字段名称

+

描述

+
+

type

+
+

字段说明:
  必选字段,用来标识该事件名称的类型。

+

取值范围:

+ +
    +
  • FAULT:错误类型。
  • +
  • STATISTIC:统计类型。
  • +
  • SECURITY:安全性。
  • +
  • BEHAVIOR:用户行为。
  • +
+
+

level

+
+

字段作用:
  必选字段,用来标识该事件名称的级别。

+

取值范围:

+ +
    +
  • CRITICAL:严重。
  • +
  • MINOR:一般。
  • +
+
+

tag

+
+

字段作用:
  可选字段,用来标识该事件名称的标签。

+

定义规则:

+ +
    +
  • 最多可同时定义5个标签,标签之间使用空格来分隔。
  • +
  • 单个标签最多包含16个字符,字符范围[a-zA-Z0-9]。
  • +
+
+

desc

+
+

字段作用:
  必选字段,用来对该事件名称进行描述。

+

定义规则:

+ +
    +
  • 至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]
  • +
+
+ + **表 2** 自定义参数字段说明 + + + + + + + + + + + + + + + + + + + +

字段名称

+

描述

+
+

type

+
+

字段说明:
  必选字段,用来标识该参数的类型。

+

取值范围:

+ +
    +
  • BOOL
  • +
  • INT8
  • +
  • UINT8
  • +
  • INT16
  • +
  • UINT16
  • +
  • INT32
  • +
  • UINT32
  • +
  • INT64
  • +
  • UINT64
  • +
  • FLOAT
  • +
  • DOUBLE
  • +
  • STRING
  • +
+
+

arrsize

+
+

字段作用:
  可选字段,用来标识数组类型参数的长度。

+

取值范围:
   1~100

+ +
+

desc

+
+

字段作用:
  必选字段,用来对该参数进行描述。

+

定义规则:

+ +
    +
  • 至少包含3个字符,最多包含128个字符,字符范围[a-zA-Z0-9 _]
  • +
+
+ +## 编写yaml文件 + +### yaml文件编写规则 + +- 事件领域命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围为1~16。 +- 事件名称命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围1~32; + - 单个事件领域内部事件名称的不能超过4096个。 +- 参数命名规则: + - 字母开头,且只能由大写字母/数字/下划线组成; + - 字符串长度取值范围1~32; + - 单个事件名称内包含的参数的个数不能超过128个。 + +### yaml文件编写样例 + +- yaml文件样例指定的事件领域名称为MODULEA,该事件领域包含两个事件,名称分别是EVENT_NAMEA和EVENT_NAMEB。 +- EVENT_NAMEA被定义成错误类型的严重事件,该事件包含类型为字符串类型的NAME1参数、字符串类型的NAME2参数及无符号短整型类型的NAME3参数,可以通过事件领域MODULEA和事件名称EVENT_NAMEA对其进行[实时订阅](/pages/0105100602)。 +- EVENT_NAMEB被定义成统计类型的一般事件,EVENT_NAMEB包含类型为无符号短整型类型的NAME1参数及整型类型的NAME2参数。因为EVENT_NAMEB在__BASE参数中定义了名称为tag1和tag2的两个事件标签,所以不仅可以通过事件领域MODULEA和事件名称EVENT_NAMEB对其进行[实时订阅](/pages/0105100602),,所以还可以通过事件标签对该事件进行[实时订阅](/pages/0105100602)。 + + ``` + ########################################## + # the hisysevent definition for module a # + ########################################## + + domain: MODULEA + + EVENT_NAMEA: + __BASE: {type: FAULT, level: CRITICAL, desc: event name a} + NAME1: {type: STRING, desc: name1} + NAME2: {type: STRING, desc: name2} + NAME3: {type: UINT16, desc: name3} + + EVENT_NAMEB: + __BASE: {type: STATISTIC, level: MINOR, tag: tag1 tag2, desc: event name b} + NAME1: {type: UINT16, desc: name1} + NAME2: {type: INT32, desc: name2} + ``` + +## 验证yaml文件 + +### 配置yaml文件路径 + +在bundle.js文件中通过```hisysevent_config```属性完成yaml文件的路径指定: + +``` +{ + "name": "@ohos/moduel_a", + "description": "module a", + "version": "3.1", + "license": "Apache License 2.0", + "publishAs": "code-segment", + "segment": { + "destPath": "moduel_a_path" + }, + "dirs": {}, + "scripts": {}, + "component": { + "name": "hisysevent_native", + "subsystem": "hiviewdfx", + "adapted_system_type": [ + "standard" + ], + "rom": "", + "ram": "", + "hisysevent_config": [ + "//moduel_a_path/yaml_file1.yaml", + "//moduel_a_path/yaml_file2.yaml" + ], + "deps": { + "components": [ + "hilog_native", + "hitrace_native", + "ipc", + "safwk", + "samgr_standard", + "utils_base" + ], + "third_party": [] + }, + "build": { + } + } +} +``` + +>![](/images/device-dev/public_sys-resources/icon-note.gif) **说明:** +>yaml文件可根据实际需求置于组件工程的任意目录下,只要在bundle.js文件指定即可。 + +### 编译yaml文件 + +- 全量编译: + + - 全量编译整个系统,会将所有组件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.def文件。 + + ``` + cd 工程根目录的绝对路径 + ./build --product-name + ``` + + - 全量编译生成的hisysevent.def文件可以通过以下命令获取: + + ``` + cd 工程根目录的绝对路径 + find out -name hisysevent.def -type f + ``` + +- 单文件编译: + + 也可以只编译单个组件的yaml文件,命令如下: + + ``` + cd 工程根目录的绝对路径 + ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list --def-path + ``` + + **表 3** 单文件编译参数说明 + + + + + + + + + + + + + +

选项名称

+

描述

+
+

--yaml-list

+
+

指定需要编译的yaml文件路径列表,多个yaml文件路径之间用空格分隔。

+
+

--def-path

+
+

指定编译生成的hisysevent.def文件的生成路径。

+
+ +### 打点及查询定义的事件 + +1. 通过[hdc_std工具](/pages/01090202)将hisysevent.def文件推送到至设备的//system/etc/hiview/目录下; + +2. 触发yaml文件自定义的HiSysEvent事件完成打点,通过[hisysevent -l](/pages/0105100604)命令查询历史HiSysEvent事件,确认触发的自定义HiSysEvent事件是否打点成功。 diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx.md new file mode 100644 index 0000000000000000000000000000000000000000..1b4f88f0eaa05ecd946d726c3fa96746b63bcee3 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-dfx.md @@ -0,0 +1,32 @@ +--- +title: subsys-dfx +permalink: /pages/extra/5878df/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# DFX + +- **[DFX概述](/pages/01051001)** + +- **[HiLog开发指导](/pages/01051002)** + +- **[HiLog\_Lite开发指导](/pages/01051003)** + +- **[HiSysEvent开发指导](/pages/01050f04)** + + - [HiSysEvent打点指导](/pages/0105100601) + + - [HiSysEvent订阅指导](/pages/0105100602) + + - [HiSysEvent查询指导](/pages/0105100603) + + - [HiSysEvent工具使用指导](/pages/0105100604) + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-graphics.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-graphics.md new file mode 100644 index 0000000000000000000000000000000000000000..528cc6400924bd0f7a9ae9acb9f6dc03f8937602 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-graphics.md @@ -0,0 +1,26 @@ +--- +title: subsys-graphics +permalink: /pages/extra/9f8231/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 图形图像 + +- **[图形图像概述](/pages/01050501)** + +- **[容器类组件开发指导](/pages/01050502)** + +- **[布局容器类组件开发指导](/pages/01050503)** + +- **[普通组件开发指导](/pages/01050504)** + +- **[动画开发指导](/pages/01050505)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-camera.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-camera.md new file mode 100644 index 0000000000000000000000000000000000000000..ba7af904dcae40e62f977d11a0adde676860d3de --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-camera.md @@ -0,0 +1,24 @@ +--- +title: subsys-multimedia-camera +permalink: /pages/extra/45b3fc/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 相机 + +- **[相机开发概述](/pages/0105060101)** + +- **[拍照开发指导](/pages/0105060102)** + +- **[录像开发指导](/pages/0105060103)** + +- **[预览开发指导](/pages/0105060104)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-video.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-video.md new file mode 100644 index 0000000000000000000000000000000000000000..027d352c8c3627d4afad27977f1c59273aee8abf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia-video.md @@ -0,0 +1,22 @@ +--- +title: subsys-multimedia-video +permalink: /pages/extra/b5d0b6/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 音视频 + +- **[音视频开发概述](/pages/0105060201)** + +- **[音视频播放开发指导](/pages/0105060202)** + +- **[音视频录制开发指导](/pages/0105060203)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia.md new file mode 100644 index 0000000000000000000000000000000000000000..df3e2a4e5c07aebf8067717faab12cc1805f9e4c --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-multimedia.md @@ -0,0 +1,20 @@ +--- +title: subsys-multimedia +permalink: /pages/extra/b37923/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 媒体 + +- **[相机](/pages/extra/45b3fc/)** + +- **[音视频](/pages/extra/b5d0b6/)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-security.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-security.md new file mode 100644 index 0000000000000000000000000000000000000000..0e1a35e09f31c1a2d0fd510b33e065a711e157a3 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-security.md @@ -0,0 +1,24 @@ +--- +title: subsys-security +permalink: /pages/extra/0fa2da/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 安全 + +- **[概述](/pages/01050d01)** + +- **[应用验签开发指导](/pages/01050d02)** + +- **[应用权限管理开发指导](/pages/01050d03)** + +- **[IPC通信鉴权开发指导](/pages/01050d04)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-sensor.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-sensor.md new file mode 100644 index 0000000000000000000000000000000000000000..d1c41cb0be10df9b23b050923ee5a2bf51084d91 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-sensor.md @@ -0,0 +1,22 @@ +--- +title: subsys-sensor +permalink: /pages/extra/332140/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Sensor服务 + +- **[Sensor服务子系概述](/pages/01050901)** + +- **[Sensor服务子系使用指导](/pages/01050902)** + +- **[Sensor服务子系使用实例](/pages/01050903)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-tel.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-tel.md new file mode 100644 index 0000000000000000000000000000000000000000..10bef6399afbfa9c4abc6565dfc6ea16be0fa006 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-tel.md @@ -0,0 +1,20 @@ +--- +title: subsys-tel +permalink: /pages/extra/be8b4d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 电话服务 + +- **[电话服务概述](/pages/01050c01)** + +- **[电话服务开发指导](/pages/01050c02)** + + diff --git a/website/docs/_posts/device-dev/subsystems/subsys-testguide-envbuild.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-testguide-envbuild.md similarity index 96% rename from website/docs/_posts/device-dev/subsystems/subsys-testguide-envbuild.md rename to website/docs/_posts/zh-cn/device-dev/subsystems/subsys-testguide-envbuild.md index 74e65c5fdb5fb01ca06834bc6750ffb88b7d0876..0801ea2133e8b526cdf59debd3a13e9b84066683 100644 --- a/website/docs/_posts/device-dev/subsystems/subsys-testguide-envbuild.md +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-testguide-envbuild.md @@ -1,15 +1,15 @@ --- -title: subsys-testguide-envbuild.md -permalink: /pages/extra/294a0f/ +title: subsys-testguide-envbuild +permalink: /pages/extra/fa6494/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:33 +date: 2022-02-12 09:01:57 ---  diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain-hiperf.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain-hiperf.md new file mode 100644 index 0000000000000000000000000000000000000000..39f24614b01d159c66d628df46cf80b4417dd0c0 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain-hiperf.md @@ -0,0 +1,282 @@ +--- +title: subsys-toolchain-hiperf +permalink: /pages/extra/036e00/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# hiperf 使用指南 + +- [list 命令](#list-命令) + - [参数说明](#参数说明) + - [使用示例](#使用示例) +- [stat 命令](#stat-命令) + - [参数说明](#参数说明) + - [使用示例](#使用示例) + - [字段说明](#字段说明) +- [record 命令](#record-命令) + - [参数说明](#参数说明) + - [使用示例](#使用示例) +- [report 命令](#report-命令) +- [使用示例](#使用示例) + +hiperf是为开发人员提供性能采样分析的工具,基于内核perf机制进行的用户态能力的扩展,可以对指定的程序或者整个系统进行性能采样。 + + +hiperf支持的命令有:list、stat、record、report等,可以通过hiperf -h进行查看。 + + +下面对hiperf的常用命令进行详细说明: + + +## list 命令 + + +### 参数说明 + +列出设备上支持的所有perf事件名称,事件名称用于 stat 和 record命令的 -e 和 -g 参数。 + +``` +Usage: hiperf list [event type] +``` + +| 参数 | 功能说明 | +| -------- | -------- | +| hw | 列出支持的 hardware 事件(PMU支持) | +| sw | 列出支持的 software 事件 | +| tp | 列出支持 tracepotint 事件 | +| cache | 列出支持的 cache 事件(PMU支持) | +| raw | 列出支持的原始PMU事件 | + + +### 使用示例 + +下面列出了设备支持的 HW 事件,并且会提示哪些事件此设备不支持。 + +``` +hiperf list hw +event not support hw-stalled-cycles-backend +event not support hw-stalled-cycles-frontend +event not support hw-ref-cpu-cycles + +Supported events for hardware: + hw-cpu-cycles + hw-instructions + hw-cache-references + hw-cache-misses + hw-branch-instructions + hw-branch-misses + hw-bus-cycles +``` + + +## stat 命令 + + +### 参数说明 + +监听指定目标程序,周期性打印性能计数器的值。 +``` +Usage: hiperf stat [options] + Collect performance counter information. +``` + + +| 参数 | 功能说明 | +| -------- | -------- | +| -a | 采集监听整个系统的所有线程和默认的性能计数器的值。 | +| -c | 指定cpu id,可以是0,1,2用逗号分隔。 | +| -d <_sec_> | 指定监听的时间,单位为秒。 | +| -i <_ms_> | 指定监听事件的间隔打印时间,单位毫秒。 | +| -e | 指定监听的事件,可以通过list命令查看支持的所有事件,其中event:u 或者 :k 表示限制事件为用户空间或者内核空间。 | +| -g | 指定需要在同一组监听的事件,同一组事件会被放入同一个PMU监听。 | +| --no-inherit | 不监听目标线程/进程启动的子线程。 | +| -p | 指定需要监听的进程pid。 | +| -t | 指定需要监听的线程tid。 | +| --verbose | 显示详细的报告内容,包括一些原始的时间数据等等。 | + + +### 使用示例 + +下面是通过 stat 监听整个系统3秒的示例: + +``` +hiperf stat -d 3 -a +this is root mode, perfEventParanoid assume as -1 +Start Profiling... +Timeout exit (total 3009 ms) + count name | comment | coverage + 132523 hw-branch-instructions | 15.750 M/sec | (100%) + 62554 hw-branch-misses | 47.202372% miss rate | (100%) + 6994768 hw-cpu-cycles | 0.832068 GHz | (100%) + 1237627 hw-instructions | 5.651758 cycles per instruction | (100%) + 248 sw-context-switches | 29.959 K/sec | (100%) + 0 sw-page-faults | 0.000 /sec | (100%) + 9402580 sw-task-clock | 0.002758 cpus used | (100%) +``` + + +### 字段说明 + +| 字段名 | 含义 | +| -------- | -------- | +| count | 表示事件发生的次数 | +| name | 事件的名称,在 list 命令中可以看到所有支持的命令,hw 和 sw 的前缀分别代表是hardware事件还是software事件。 | +| comment | 一些经过计算的方便用户阅读的值。例如 CPU 的相对主频,千位进制换算等等。 | +| coverage | 该事件在PMU中的 enable 百分比,受限于PMU数量,每次装载的PMU监听事件是有限的。 | + + +## record 命令 + + +### 参数说明 + +采样指定目标程序,并且将采样数据保存到指定的文件中(默认为perf.data) + +``` +Usage: hiperf record [options] + Collect performance sampling information. +``` + +| 参数 | 功能说明 | +| -------- | -------- | +| -a | 对整个系统的所有进程和线程进行采样。 | +| --exclude-hiperf | 不采样hiperf自身进程。 | +| -c | 指定采样的cpu id。 | +| --cpu-limit <_percent_> | 限定采样过程占用的CPU最大百分比。 | +| -d <sec> | 指定采样时长,单位秒。 | +| -f <freq> | 设置采样事件的触发频率,默认为4000。
说明:该频率越高cpu负载会越高,但是数据采样会越多。 | +| --period <_num_> | 设置采样事件触发周期,以次数为单位,即发生指定的次数后采样一次。 | +| -e | 指定监听的事件,可以通过list命令查看支持的所有事件,其中event:u 或者 :k 可以表示限制事件为用户空间或者内核空间。 | +| -g | 指定需要在同一组监听的事件,同一组事件会被放入同一个PMU监听。 | +| --no-inherit | 不监听目标线程或者进程启动的子线程。 | +| -p | 指定需要监听的进程。 | +| -t | 指定需要监听的线程。 | +| --offcpu | 监听cpu调度事件,它等价于 --period 1 -e sched:sched_switch 事件。 | +| -j <_branch_filter1_>[,_branch_filter2_]... | 监听分支预测事件。分支预测就是指令存在多个if else判定的情况下,cpu去预测下一步即将执行哪一条指令。 | +| -s / --call-stack <_fp \\| dwarf[,size]_> | 设置用户栈的回栈方式,支持fp和dwarf两种方式。dwarf 后面可以指定采样的用户堆栈大小,默认是 65528。 | +| --delay-unwind | 延迟回栈,等到采样结束再进行回栈。 | +| --disable-unwind | 不进行回栈,用户的寄存器和堆栈数据会保存在perf.data中,供离线回栈使用。 | +| --disable-callstack-expend | 默认会对回栈的调用栈信息进行合并扩展,此选项会关闭该功能。 | +| --clockid <_clock type_> | 设置采样数据的时钟源,支持monotonic、boottime、realtime等。 | +| --symbol-dir <_dir_> | 指定符号表路径,如果指定了回栈时会优先使用该路径下的符号表。 | +| -m <_mmap pages_> | 指定缓存的大小,默认值为1024,以页为单位。参数需要为2的幂,范围为 [2 - 1024]。
说明:该值越高,事件丢失率会越低,但是内存占用会增大。 | +| --app <_package name_> | 指定采样的目标应用的包名,默认超时等待时间为10秒。 | +| --data-limit <_SIZE[K\|M|G]_> | 指定采样结果的最大容量,支持K/M/G(B)为单位,默认无大小限制。 | +| -o <_output file name_> | 指定采样数据结果文件名,默认为/data/local/tmp/perf.data。 | +| -z | 启动压缩模式,在保存到文件的时候,会用gzip进行压缩。 | +| --verbose | 采样的时候显示更详细的日志信息。 | + + +### 使用示例 + +- 对全系统所有进程采样3秒,并且显示详细的日志信息 + ``` + hiperf record -d 3 -a --verbose + ``` + +- 指定使用fp方式进行回栈 + ``` + hiperf record -s fp -d 3 -a + ``` + +- 指定使用dwarf方式进行回栈 + ``` + hiperf record -s dwarf -d 3 -a + ``` + +- 指定采样offcpu事件 + ``` + hiperf record --offcpu -s dwarf -d 3 -a + ``` + +- 指定延迟回栈 + ``` + hiperf record -d 3 -s dwarf --delay-unwind -a + ``` + +- 禁止回栈,此时会保存堆栈数据到perf.data文件 + ``` + hiperf record -d 3 -s dwarf --disable-unwind -a + ``` + +- 指定追踪的包名,如果指定的包名对应的进程不存在则会延时等待10秒,超时后进程退出 + ``` + hiperf record -d 3 -s dwarf --app com.ohos.launch + ``` + +- 指定对采样结果数据进行压缩保存 + ``` + hiperf record -z -s dwarf -d 3 -a + ``` + + +## report 命令 + +此命令主要用于展示record中抓取的采样数据 + +``` +Usage: hiperf report [option] + Report sampling information from perf.data. +``` + +| 参数 | 功能说明 | +| -------- | -------- | +| --symbol-dir <_dir_> | 指定符号表路径。 | +| --limit-percent <_number_> | 指定展示结果的最低百分比(低于的不显示)。 | +| -s / --call-stack | 指定该选项后结果数据中会包含详细的调用栈信息。 | +| --call-stack-limit-percent <_number_> | 调用栈的百分比最小值(低于的不显示)。 | +| --proto | 将输入的 perf.data 文件转换为 proto 格式,默认文件名为 perf.proto。 | +| --json | 将输入的 perf.data 文件转换为 json 格式,默认文件名为 perf.json。 | +| --branch | 按分支预测的结果地址来展示报告,而不是调用栈的IP地址。 | +| --<_keys_> <_keyname1_>[,_keyname2_][,...] | 按给出的关键字来过滤展示报告,keys支持:comms、pids、tids等 例如 --comms hiperf,hilog 表示仅显示进程/线程名称为 hiperf或者hilog的记录条目。 | +| --sort <_key1_>[,_key2_][,...] | 按照给出的关键字来排序和显示,支持:pid、tid、comm等,可以指定多个关键字。 | +| -i <_filename_> | 指定输入的采样数据(默认为perf.data)。 | +| -o <_filename_> | 指定输出的报告文件名。 | + + +## 使用示例 + +- 输出采样数据的报告,默认读取perf.data文件 + ``` + hiperf report + ``` + + 输出结果举例: + + ``` + Heating count comm pid tid dso func + 5.68% 15073949 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1 malloc + 2.57% 6834119 hiperf_example_ 1085 1091 [kernel.kallsyms] vector_swi + 2.27% 6013910 hiperf_example_ 1085 1087 /system/lib/ld-musl-arm.so.1 malloc + 2.19% 5805738 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1 vfprintf + 2.09% 5543362 hiperf_example_ 1085 1091 [kernel.kallsyms] ktime_get_ts64 + report done + ``` + +- 输出采集数据的调用栈报告 + ``` + hiperf report -s + ``` + +- 指定符号表路径 + ``` + hiperf report -s --symbol-dir /data/local/tmp + ``` + +- 指定结果过滤的关键字,指定后会只显示包含该关键字的信息。比如过滤libutils.z.so则命令如下: + ``` + hiperf report --dsos libuitls.z.so + ``` + +- 指定按照特定的关键字进行排序展示,比如按照dso进行排序: + ``` + hiperf report --sort dso + ``` + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain.md new file mode 100644 index 0000000000000000000000000000000000000000..b3615821b309079ddde89030c83e2605ab169677 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-toolchain.md @@ -0,0 +1,20 @@ +--- +title: subsys-toolchain +permalink: /pages/extra/4754cf/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 研发工具链 + +- **[bytrace使用指导](/pages/01090201)** + +- **[hdc\_std 使用指导](/pages/01090202)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md new file mode 100644 index 0000000000000000000000000000000000000000..c92ae0d114fa0a58c054a5ed877785ca7555f4c6 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md @@ -0,0 +1,200 @@ +--- +title: subsys-usbservice-demo +permalink: /pages/extra/88ddef/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# USB服务子系使用实例 + + +``` +#include +#include +#include +#include +#include +#include +#include "if_system_ability_manager.h" +#include "ipc_skeleton.h" +#include "iremote_object.h" +#include "iservice_registry.h" +#include "iusb_srv.h" +#include "string_ex.h" +#include "system_ability_definition.h" +#include "usb_common.h" +#include "usb_device.h" +#include "usb_errors.h" +#include "usb_request.h" +#include "usb_server_proxy.h" +#include "usb_srv_client.h" + +const int32_t REQUESTYPE = ((1 << 7) | (0 << 5) | (0 & 0x1f)); +const int32_t REQUESTCMD = 6; +const int32_t VALUE = (2 << 8) + 0; +const int32_t TIMEOUT = 5000; +const int32_t ITFCLASS = 10; +const int32_t PRAMATYPE = 2; +const int32_t BUFFERLENGTH = 21; + +void GetType(OHOS::USB::USBEndpoint &tep, OHOS::USB::USBEndpoint &outEp, bool &outEpFlg) +{ + if ((tep.GetType() == PRAMATYPE)) { + if (tep.GetDirection() == 0) { + outEp = tep; + outEpFlg = true; + } + } +} + +bool SelectEndpoint(OHOS::USB::USBConfig config, + std::vector interfaces, + OHOS::USB::UsbInterface &interface, + OHOS::USB::USBEndpoint &outEp, + bool &outEpFlg) +{ + for (int32_t i = 0; i < config.GetInterfaceCount(); ++i) { + OHOS::USB::UsbInterface tif = interfaces[i]; + std::vector mEndpoints = tif.GetEndpoints(); + for (int32_t j = 0; j < tif.GetEndpointCount(); ++j) { + OHOS::USB::USBEndpoint tep = mEndpoints[j]; + if ((tif.GetClass() == ITFCLASS) && (tif.GetSubClass() == 0) && (tif.GetProtocol() == PRAMATYPE)) { + GetType(tep, outEp, outEpFlg); + } + } + if (outEpFlg) { + interface = interfaces[i]; + return true; + } + std::cout << std::endl; + } + return false; +} + +int OpenDeviceTest(OHOS::USB::UsbSrvClient &Instran, OHOS::USB::UsbDevice device, OHOS::USB::USBDevicePipe &pip) +{ + int ret = Instran.RequestRight(device.GetName()); + std::cout << "device RequestRight ret = " << ret << std::endl; + if (0 != ret) { + std::cout << "device RequestRight failed = " << ret << std::endl; + } + ret = Instran.OpenDevice(device, pip); + return ret; +} + +int CtrTransferTest(OHOS::USB::UsbSrvClient &Instran, OHOS::USB::USBDevicePipe &pip) +{ + std::cout << "usb_device_test : << Control Transfer >> " << std::endl; + std::vector vData; + const OHOS::USB::UsbCtrlTransfer tctrl = {REQUESTYPE, REQUESTCMD, VALUE, 0, TIMEOUT}; + int ret = Instran.ControlTransfer(pip, tctrl, vData); + if (ret != 0) { + std::cout << "control message read failed width ret = " << ret << std::endl; + } else { + } + std::cout << "control message read success" << std::endl; + + return ret; +} + +int ClaimTest(OHOS::USB::UsbSrvClient &Instran, + OHOS::USB::USBDevicePipe &pip, + OHOS::USB::UsbInterface &interface, + bool interfaceFlg) +{ + if (interfaceFlg) { + std::cout << "ClaimInterface InterfaceInfo:" << interface.ToString() << std::endl; + int ret = Instran.ClaimInterface(pip, interface, true); + if (ret != 0) { + std::cout << "ClaimInterface failed width ret = " << ret << std::endl; + } else { + std::cout << "ClaimInterface success" << std::endl; + } + } + return 0; +} + +int BulkTransferTest(OHOS::USB::UsbSrvClient &Instran, + OHOS::USB::USBDevicePipe &pip, + OHOS::USB::USBEndpoint &outEp, + bool interfaceFlg, + bool outEpFlg) +{ + if (interfaceFlg) { + std::cout << "usb_device_test : << Bulk transfer start >> " << std::endl; + if (outEpFlg) { + uint8_t buffer[50] = "hello world 123456789"; + std::vector vData(buffer, buffer + BUFFERLENGTH); + int ret = Instran.BulkTransfer(pip, outEp, vData, TIMEOUT); + if (ret != 0) { + std::cout << "Bulk transfer write failed width ret = " << ret << std::endl; + } else { + std::cout << "Bulk transfer write success" << std::endl; + } + return ret; + } + } + return 0; +} + +int main(int argc, char **argv) +{ + std::cout << "usb_device_test " << std::endl; + static OHOS::USB::UsbSrvClient &Instran = OHOS::USB::UsbSrvClient::GetInstance(); + // GetDevices + std::vector deviceList; + int32_t ret = Instran.GetDevices(deviceList); + if (ret != 0) { + return OHOS::USB::UEC_SERVICE_INVALID_VALUE; + } + if (deviceList.empty()) { + return OHOS::USB::UEC_SERVICE_INVALID_VALUE; + } + + OHOS::USB::UsbDevice device = deviceList[0]; + std::vector configs = device.GetConfigs(); + OHOS::USB::USBConfig config = configs[0]; + std::vector interfaces = config.GetInterfaces(); + OHOS::USB::UsbInterface interface; + OHOS::USB::USBEndpoint outEp; + bool interfaceFlg = false; + bool outEpFlg = false; + interfaceFlg = SelectEndpoint(config, interfaces, interface, outEp, outEpFlg); + + // OpenDevice + std::cout << "usb_device_test : << OpenDevice >> test begin -> " << std::endl; + OHOS::USB::USBDevicePipe pip; + ret = OpenDeviceTest(Instran, device, pip); + if (ret != 0) { + return OHOS::USB::UEC_SERVICE_INVALID_VALUE; + } + + // ControlTransfer + CtrTransferTest(Instran, pip); + + // ClaimInterface + ClaimTest(Instran, pip, interface, interfaceFlg); + + // BulkTransferWrite + BulkTransferTest(Instran, pip, outEp, interfaceFlg, outEpFlg); + + // CloseDevice + std::cout << "usb_device_test : << Close Device >> " << std::endl; + ret = Instran.Close(pip); + if (ret == 0) { + std::cout << "Close device failed width ret = " << ret << std::endl; + return OHOS::USB::UEC_SERVICE_INVALID_VALUE; + } else { + std::cout << "Close Device success" << std::endl; + } + return 0; +} +``` + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..29efd88ca2316d19c118dd9b8331dedbf0cc0c2e --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md @@ -0,0 +1,66 @@ +--- +title: subsys-usbservice-guide +permalink: /pages/extra/854ace/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# USB服务子系统使用指导 + +- [使用步骤](#section18816105182315) + +下面使用步骤以bulktransfer为例。 + +## 使用步骤 + +1. 获取usb service实例 + +``` +static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::UsbSrvClient::GetInstance(); +``` + +2. 获取usb设备列表 + +``` +std::vector deviceList; +int32_t ret = g_usbClient.GetDevices(deviceList); +``` + +3. 申请设备权限 + +``` +int32_t ret = g_usbClient.RequestRight(device.GetName()); +``` + +4. 打开设备 + +``` +USBDevicePipe pip; +int32_t et = g_usbClient.OpenDevice(device, pip); +``` + +5. 配置设备接口 + +``` +ret = g_usbClient.ClaimInterface(pip, interface, true); +interface为deviceList中device的interface。 +``` + +6. 数据传输 + +``` +srvClient.BulkTransfer(pipe, endpoint, vdata, timeout); +``` +pipe为打开设备后的数据传输通道,endpoint为device中数据传输的端点,vdata是需要传输或读取的二进制数据块,timeout为传输超时时长. + +7. 关闭设备 + +``` +ret = g_usbClient.Close(pip); +``` diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-overview.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..689586c1eabb7316e539e4081e254c8bc985a11a --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice-overview.md @@ -0,0 +1,234 @@ +--- +title: subsys-usbservice-overview +permalink: /pages/extra/42967b/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# USB服务子系统概述 + +- [概述](#section175431838101617) +- [接口说明](#section83365421647) + - [Host部分](#section83365421658) + - [Device部分](#section83365421669) + - [Port部分](#section83365421670) + +## 概述 + + USB设备分为Host设备(主机设备)和Device设备(从设备)。用户可通过Port Service来根据实际业务把运行OpenHarmony的设备切换为Host设备或者Device设备。目前在Host模式下,支持获取USB设备列表,USB设备权限管理,控制传输、批量传输的同异步数据传输等,在Device模式下,支持HDC(调试)、ACM(串口)、ECM(网口)等功能的切换。 + +**图1** USB服务架构图 + +![](/images/device-dev/subsystems/figure/USB服务架构图.png) + +- USB FWK/API:基于USB Service服务,使用NAPI技术,向上提供JS接口。 +- USB Service:使用C++代码实现,包含Host、Device、Port三个模块。基于HDI的接口,主要实现USB设备的列表管理、Function 管理、Port管理、USB设备权限管理等功能。 +- USB HAL:使用C代码实现,基于Host SDK和Device SDK,封装了对USB设备的基本操作,向上提供C++接口,同时通过HDF框架接收内核上报的信息。 + +## 接口说明 + +- ### Host部分 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

头文件

+

接口名称

+

功能描述

+

usb_srv_client.h

+

+

+

int32_t OpenDevice(const UsbDevice &device, USBDevicePipe &pip);

+

打开USB设备,建立连接

+

int32_t HasRight(std::string deviceName);

+

判断是否有权访问设备

+

int32_t RequestRight(std::string deviceName);

+

请求给定软件包的临时权限以访问设备

+

int32_t GetDevices(std::vector &deviceList);

+

获取USB设备列表

+

int32_t ClaimInterface(USBDevicePipe &pip, const UsbInterface &interface, bool force);

+

打开接口,并申明独占接口,必须在数据传输前执行

+

int32_t ReleaseInterface(USBDevicePipe &pip, const UsbInterface &interface);

+

关闭接口,释放接口的占用,在停止数据传输后执行

+

int32_t BulkTransfer(USBDevicePipe &pip, const USBEndpoint &endpoint, std::vector &vdata, int32_t timeout);

+

在给定端点上执行批量数据传输, 返回读取或发送的数据长度,通过端点方向确定读取或发送数据

+

int32_t ControlTransfer(USBDevicePipe &pip, const UsbCtrlTransfer &ctrl, std::vector &vdata);

+

对此设备执行端点零的控制事务,传输方向由请求类型决定

+

int32_t SetConfiguration(USBDevicePipe &pip, const USBConfig &config);

+

设置设备当前使用的配置,通过配置值进行指定

+

int32_t SetInterface(USBDevicePipe &pipe, const UsbInterface &interface);

+

设置指定接口的备选设置,用于在具有相同ID但不同备用设置的两个接口之间进行选择

+

int32_t GetRawDescriptors(std::vector &vdata);

+

获取原始的USB描述符

+

int32_t GetFileDescriptor();

+

获取文件描述符

+

bool Close(const USBDevicePipe &pip);

+

关闭设备,释放与设备相关的所有系统资源

+

int32_t PipeRequestWait(USBDevicePipe &pip, int64_t timeout, UsbRequest &req);

+

获取异步传输结果

+

int32_t RequestInitialize(UsbRequest &request);

+

初始化异步数据传输request

+

int32_t RequestFree(UsbRequest &request);

+

释放异步数据传输request

+
+

int32_t RequestAbort(UsbRequest &request);

+

取消待处理的数据请求

+

int32_t RequestQueue(UsbRequest &request);

+

将指定的端点进行异步数据发送或者接收请求,数据传输方向由端点方向决定

+

int32_t BulkRequstDataSize(const UsbDev &dev, const UsbPipe &pipe, uint32_t &length);

+

异步批量读取数据,传输大量数据时使用

+

int32_t BulkReadData(const UsbDev &dev, const UsbPipe &pipe, std::vector &data);

+

与BulkReadData配合使用,获取读取结果

+

int32_t BulkWriteData(const UsbDev &dev, const UsbPipe &pipe, const std::vector &data);

+

异步批量写数据,传输大量数据时使用

+

int32_t BulkGetWriteCompleteLength(const UsbDev &dev, const UsbPipe &pipe, uint32_t &length);

+

与BulkWriteData配合使用,获取写入状态,由length描述

+
+ +- ### Device部分 + + + + + + + + + + + + + + + + + + + + + +

头文件

+

接口名称

+

功能描述

+

usb_srv_client.h

+

+

+

int32_t GetCurrentFunctions(int32_t &funcs);

+

获取设备模式下的当前USB功能列表的数字组合掩码

+

int32_t SetCurrentFunctions(int32_t funcs);

+

在设备模式下设置当前的USB功能列表

+

int32_t UsbFunctionsFromString(std::string funcs);

+

将给定的功能列表描述字符串转换为功能列表的数字组合掩码

+

std::string UsbFunctionsToString(int32_t funcs);

+

将给定的功能列表的数字组合掩码转换为功能列表描述字符串

+
+ +- ### Port部分 + + + + + + + + + + + + + + + + + + +

头文件

+

接口名称

+

功能描述

+

usb_srv_client.h

+

+

+

int32_t GetSupportedModes(int32_t portId, int32_t &supportedModes);

+

获取指定的端口支持的模式列表的组合掩码

+

int32_t SetPortRole(int32_t portId, int32_t powerRole, int32_t dataRole);

+

设置指定的端口支持的角色模式,包含充电角色、数据传输角色

+

int32_t GetPorts(std::vector &usbPorts);

+

获取物理USB端口描述信息列表

+
diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice.md new file mode 100644 index 0000000000000000000000000000000000000000..6d66eb99852e18f25095fd3ed501cbdb72df8dbf --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-usbservice.md @@ -0,0 +1,20 @@ +--- +title: subsys-usbservice +permalink: /pages/extra/82e155/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# USB + +- **[USB服务子系统概述](/pages/extra/42967b/)** + +- **[USB服务子系统使用指导](/pages/extra/854ace/)** + +- **[USB服务子系统使用实例](/pages/extra/88ddef/)** \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-utils.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-utils.md new file mode 100644 index 0000000000000000000000000000000000000000..c7867422e6ad2ae5319b09d2fc2112f1c88ab811 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys-utils.md @@ -0,0 +1,22 @@ +--- +title: subsys-utils +permalink: /pages/extra/552ec9/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# 公共基础 + +- **[公共基础库概述](/pages/01050701)** + +- **[公共基础库开发指导](/pages/01050702)** + +- **[公共基础库常见问题](/pages/01050703)** + + diff --git a/website/docs/_posts/zh-cn/device-dev/subsystems/subsys.md b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys.md new file mode 100644 index 0000000000000000000000000000000000000000..b257c55bb7a9982ddc7b4dc8d3bee5a281475764 --- /dev/null +++ b/website/docs/_posts/zh-cn/device-dev/subsystems/subsys.md @@ -0,0 +1,34 @@ +--- +title: subsys +permalink: /pages/extra/607fd2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 子系统 + +- **[编译构建](/pages/extra/8e49b3/)** +- **[分布式远程启动](/pages/010504)** +- **[图形图像](/pages/extra/9f8231/)** +- **[媒体](/pages/extra/b37923/)** +- **[数据管理](/pages/extra/9b24d7/)** +- **[公共基础](/pages/extra/552ec9/)** +- **[AI框架](/pages/extra/34bca9/)** +- **[Sensor服务](/pages/extra/332140/)** +- **[用户程序框架](/pages/extra/84143e/)** +- **[OTA升级](/pages/01050b)** +- **[电话服务](/pages/extra/be8b4d/)** +- **[安全](/pages/extra/0fa2da/)** +- **[启动恢复](/pages/extra/de37b5/)** +- **[测试用例开发指导](/pages/010901)** +- **[DFX](/pages/extra/5878df/)** +- **[研发工具链](/pages/extra/4754cf/)** +- **[XTS认证用例开发指导](/pages/010a01)** + + diff --git a/website/docs/_posts/zh-cn/readme.md b/website/docs/_posts/zh-cn/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..faca4bbe57597c7929c6cc72b31950ed9ceae3e9 --- /dev/null +++ b/website/docs/_posts/zh-cn/readme.md @@ -0,0 +1,103 @@ +--- +title: readme +permalink: /pages/extra/513c15/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 导读 + +此工程存放OpenHarmony提供的快速入门、开发指南、API参考等开发者文档,欢迎参与OpenHarmony开发者文档开源项目,与我们一起完善开发者文档。 + +## **文档目录结构** + + +- 设备开发 + - 轻量和小型系统开发指导(参考内存<128MB) + - overview:[设备开发导读](/pages/extra/ffeb4e/) + - quick-start:[快速入门](/pages/extra/cfc381/)(搭建环境、获取源码、编译、烧录等) + - Basic Capability:开发基础能力 + - Kernel:[轻量系统内核](/pages/extra/04851a/) + - Kernel:[小型系统内核](/pages/extra/6f0c9d/) + - Drivers:[驱动](/pages/extra/6e1f48/) + - Subsystems:[子系统](/pages/extra/c58432/)(编译构建、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](/pages/extra/6f893c/) + + - guide:开发示例 + - [WLAN连接类产品](/pages/extra/feefcc/)(LED外设控制、集成三方SDK) + - [无屏摄像头类产品](/pages/extra/e55ff3/)(摄像头控制) + - [带屏摄像头类产品](/pages/extra/238595/)(屏幕和摄像头控制、视觉应用开发) + + - porting:移植适配 + - [轻量和小型系统三方库移植指导](/pages/extra/261e32/) + - [轻量系统芯片移植指导](/pages/extra/8d1893/) + - [轻量系统芯片移植案例](/pages/extra/3213c7/) + - [小型系统芯片移植指导](/pages/extra/e6da35/) + + - bundles:HPM Bundle开发 + - [HPM Bundle开发规范](/pages/01060101) + - [HPM Bundle开发指南](/pages/extra/1fe808/) + - [HPM Bundle开发示例](/pages/extra/00c0e4/) + + - 标准系统开发指导(参考内存≥128MB) + - overview:[设备开发导读](/pages/extra/ffeb4e/) + - quick-start:[快速入门](/pages/extra/cdd62a/)(搭建环境、获取源码、编译、烧录等) + - Basic Capability:开发基础能力 + - Kernel:[标准系统内核](/pages/extra/34d397/) + - Drivers:[驱动](/pages/extra/6e1f48/) + - Subsystems:[子系统](/pages/extra/c58432/)(编译构建、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](/pages/extra/6f893c/) + + - guide:开发示例 + - [时钟应用](/pages/01070201) + - [平台驱动](/pages/01070202) + - [外设驱动](/pages/01070203) + + - porting:移植适配 + - [标准系统芯片移植指导](/pages/01040301) + - [一种快速移植OpenHarmony Linux内核的方法](/pages/01040302) + + - bundles:HPM Bundle开发 + - [HPM Bundle开发规范](/pages/01060101) + - [HPM Bundle开发指南](/pages/extra/1fe808/) + - [HPM Bundle开发示例](/pages/extra/00c0e4/) + - [常见问题](/pages/extra/3d816b/) + + +- 应用开发 + - overview:[应用开发导读](/pages/extra/d0fdd9/) + - quick-start:[入门](/pages/extra/348033/) + - ability:[Ability框架](/pages/extra/fdc4f8/) + - ui:[UI](/pages/extra/e9d6f1/) + - media:[媒体](/pages/extra/56b10d/) + - security:[安全](/pages/extra/a47051/) + - connectivity:[网络与连接](/pages/extra/8cc6cb/) + - database:[分布式数据服务](/pages/extra/ee7fed/) + - usb:[USB服务](/pages/extra/ea8df1/) + - dfx:[DFX](/pages/extra/047c71/) + - reference:[开发参考](/pages/extra/b87a8e/) +- 许可证及版权信息检查工具:[开源合规审查工具](https://gitee.com/openharmony-sig/tools_oat) +- glossary:[术语](/pages/010103) + +## **版本更新** + +参考[Release Notes](/pages/010104)。 + +## **第三方开源软件及许可说明** + +3rd-Party-License:[第三方开源软件及许可证说明](/pages/extra/924bcc/) + +## **贡献** + +非常欢迎您参与[贡献](/pages/010d01),我们鼓励开发者以各种方式参与文档反馈和贡献。 + +您可以对现有文档进行评价、简单更改、反馈文档质量问题、贡献您的原创内容,详细请参考[贡献文档](/pages/extra/20a162/)。 + +卓越贡献者将会在开发者社区文档贡献专栏表彰公示。 + diff --git "a/website/docs/_posts/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" "b/website/docs/_posts/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..98c648235886511885994c59c34ad0bf1f93166c --- /dev/null +++ "b/website/docs/_posts/zh-cn/readme/DeviceProfile\345\255\220\347\263\273\347\273\237.md" @@ -0,0 +1,208 @@ +--- +title: DeviceProfile子系统 +permalink: /pages/extra/934795/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# DeviceProfile子系统 + +- [简介](#section11660541593) +- [目录](#section1464106163817) +- [约束](#section1718733212019) +- [使用](#section10729231131110) +- [涉及仓](#section176111311166) + +## 简介 + +DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下: + +- 本地设备Profile的查询、插入、删除。 +- 远程设备Profile的查询。 +- 跨设备同步Profile。 +- 订阅远程Profile变化的通知。 + +DeviceProfile模块组成如下图所示: + +## 系统架构 + +**图 1** DeviceProfile组件架构图 + +![](/images/readme/figures/dp-architecture_zh.png) + +## 目录 + +DeviceProfile主要代码目录结构如下: + +``` +├── interfaces +│   └── innerkits +│   └── distributeddeviceprofile // 系统内部接口 +├── ohos.build +├── sa_profile // said声明文件 +│   ├── 6001.xml +│   └── BUILD.gn +├── services +│   └── distributeddeviceprofile +│   ├── BUILD.gn +│   ├── include +│   │   ├── contentsensor // CS数据采集头文件 +│   │   ├── dbstorage // 数据库操作头文件 +│   │   ├── devicemanager // 设备管理头文件 +│   │   └── subscribemanager // 订阅管理头文件 +│   ├── src +│   │   ├── contentsensor // CS数据采集实现 +│   │   ├── dbstorage // 数据库操作实现 +│   │   ├── devicemanager // 设备管理实现 +│   │   ├── subscribemanager // 订阅管理实现 +│   └── test // 测试用例 +└── tools + └── dp // 辅助测试工具 +``` + +## 约束 + +- 组网设备需在同一局域网中。 +- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。 + +## 使用 + +### 查询Profile信息 + +* GetDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| deviceId | std::string | 是 | 查询指定设备的profile,空值表示查询本地 | +| serviceId | std::string | 是 | 查询的service id(数据记录的ID标识) | +| profile | ServiceCharacteristicProfile | 是 | 返回值 | + +* 代码示例 + +```c++ +// 声明返回值 +ServiceCharacteristicProfile profile; +// 执行查询接口GetDeviceProfile +DistributedDeviceProfileClient::GetInstance().GetDeviceProfile(deviceId, serviceId, profile); +std::string jsonData = profile.GetCharacteristicProfileJson(); +result.append("jsonData:" + jsonData + "\n"); +``` + +### 插入Profile信息 + +* PutDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| profile | ServiceCharacteristicProfile | 是 | 需要插入的profile信息 | + +* 代码示例 + +```c++ +// 声明并填充插入数据 +ServiceCharacteristicProfile profile; +profile.SetServiceId(serviceId); +profile.SetServiceType(serviceType); +nlohmann::json j; +j["testVersion"] = "3.0.0"; +j["testApiLevel"] = API_LEVEL; +profile.SetCharacteristicProfileJson(j.dump()); +// 执行插入接口PutDeviceProfile +DistributedDeviceProfileClient::GetInstance().PutDeviceProfile(profile); +``` + +### 删除Profile信息 + +* DeleteDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| serviceId | std::string | 是 | 删除特定serviceid的记录 | + +* 代码示例 + +```c++ +// 声明并填充插入数据 +std::string serviceId = "test"; +// DeleteDeviceProfile +DistributedDeviceProfileClient::GetInstance().DeleteDeviceProfile(serviceId); +``` + +### 同步Profile信息 + +* SyncDeviceProfile参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| --------- | ---------------------------- | ---- | ----------------------------------- | +| syncOption| SyncOption | 是 | 指定同步范围和模式 | +| syncCb | IProfileEventCallback | 是 | 同步结果回调 | + +* 代码示例 + +```c++ +// 定义同步模式和范围 +SyncOptions syncOption; +syncOption.SetSyncMode((OHOS::DistributedKv::SyncMode)atoi(mode.c_str())); +for (const auto& deviceId : deviceIds) { + syncOption.AddDevice(deviceId); +} +// 执行同步接口 +DistributedDeviceProfileClient::GetInstance().SyncDeviceProfile(syncOption, + std::make_shared()); +``` + +### 订阅Profile事件(同步、变更事件) + +* SubscribeProfileEvents参数描述 + +| 名称 | 类型 | 必填 | 描述 | +| -------------- | ---------------------------- | ---- | ----------------------------------- | +| subscribeInfos | SubscribeInfo | 是 | 指定订阅的事件类型 | +| eventCb | IProfileEventCallback | 是 | 订阅事件回调 | +| failedEvents | ProfileEvent | 是 | 失败事件 | + +* 代码示例 + +```c++ +auto callback = std::make_shared(); +std::list subscribeInfos; +ExtraInfo extraInfo; +extraInfo["deviceId"] = deviceId; +extraInfo["serviceIds"] = serviceIds; + +// 订阅EVENT_PROFILE_CHANGED事件 +SubscribeInfo info1; +info1.profileEvent = ProfileEvent::EVENT_PROFILE_CHANGED; +info1.extraInfo = std::move(extraInfo); +subscribeInfos.emplace_back(info1); + +// 订阅EVENT_SYNC_COMPLETED事件 +SubscribeInfo info2; +info2.profileEvent = ProfileEvent::EVENT_SYNC_COMPLETED; +info2.extraInfo = std::move(extraInfo); +subscribeInfos.emplace_back(info2); + +std::list failedEvents; +// 执行订阅接口 +DistributedDeviceProfileClient::GetInstance().SubscribeProfileEvents(subscribeInfos, + callback, failedEvents); +sleep(SUBSCRIBE_SLEEP_TIME); +std::list profileEvents; +profileEvents.emplace_back(ProfileEvent::EVENT_PROFILE_CHANGED); +failedEvents.clear(); +// 解除订阅 +DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEvents, + callback, failedEvents); +``` + +## 涉及仓 + +**DeviceProfile子系统** + +[device\_profile\_core](https://gitee.com/openharmony/device_profile_core) \ No newline at end of file diff --git "a/website/docs/_posts/zh-cn/readme/\347\224\250\346\210\267IAM\345\255\220\347\263\273\347\273\237.md" "b/website/docs/_posts/zh-cn/readme/\347\224\250\346\210\267IAM\345\255\220\347\263\273\347\273\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..6e1c045f3bcc18e46628632fc42d8abb80fdd8ec --- /dev/null +++ "b/website/docs/_posts/zh-cn/readme/\347\224\250\346\210\267IAM\345\255\220\347\263\273\347\273\237.md" @@ -0,0 +1,77 @@ +--- +title: 用户IAM子系统 +permalink: /pages/extra/d6efd7/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 用户IAM子系统 + +- [简介](#简介) +- [目录](#目录) +- [约束](#约束) +- [说明](#说明) + - [使用说明](#使用说明) +- [相关仓](#相关仓) + + +## 简介 + +用户身份和访问管理子系统,下称用户IAM(Identity and Access Management),旨在为OpenHarmony提供的统一用户身份凭据信息管理和用户身份认证框架能力,支持多用户分别设置认证凭据信息,并根据用户设置的认证凭据信息提供用户身份认证功能,支撑锁屏等安全场景。同时,用户IAM子系统也提供API,支持三方开发者调用系统提供的身份认证能力来实现业务对用户的访问控制要求。 + +**图1** 子系统架构图 + +用户IAM子系统逻辑架构 + +用户IAM子系统分为统一用户认证框架和认证执行器两个部分,其中**统一用户认证框架**部分包含: + +- **统一用户认证:** 对外提供统一用户身份认证功能,并且开放生物特征认证相关功能给三方应用调用。 +- **用户身份凭据管理:** 向上提供系统内统一的用户身份凭据信息管理接口,向下通过认证执行器管理模块,调用系统内的认证资源,完成用户身份凭据的生命周期管理和安全存储。 +- **认证执行器管理:** 提供认证资源管理和认证会话管理功能,支持系统内身份认证相关**执行器**统一管理和协同调度,支持不同类型的身份认证执行器灵活对接。 + +基于统一用户认证框架,系统可以扩展支持多种认证能力。OpenHarmony框架当前已经支持的**认证执行器**包含口令认证和人脸认证,持开发者如果想实现新的认证执行器,只需要在新的部件内实现认证相关功能,并且按照执行器管理模块定义的接口与统一用户认证框架对接即可。 + +*注:在用户IAM子系统内,将一个用户身份认证操作的最小执行单元称为**执行器**,如一个口令认证模块,处理口令采集、口令处理和比对、口令安全存储的全过程,因此可以抽象为一个口令认证的全功能执行器。* + +## 目录 + + +```undefined +//base/user_iam +├── auth_executor_mgr # 认证执行器管理部件,支持系统内统一的认证资源管理和调度 +├── face_auth # 人脸认证部件,与认证执行器管理对接,支持人脸录入、删除和人脸认证功能 +├── pin_auth # 口令认证部件,与认证执行器管理对接,支持口令录入、删除和口令认证功能 +├── user_auth # 统一用户认证部件,提供统一用户身份认证功能 +└── user_idm # 用户身份凭据管理部件,提供系统内统一的用户身份凭据信息管理功能 + +``` + +## 约束 + +1. 用户身份凭据信息管理类操作,是系统内的关键操作,相关接口只支持系统基础应用调用。 +2. 用户身份认证执行器内真正完成用户身份认证凭据信息的处理,因此只支持系统服务实现执行器的功能,与认证执行器管理模块对接。 + +## 说明 + +### 使用说明 + +1. 统一用户认证框架必须配合一个认证执行器才可以使用。 +2. 系统内默认存在的第一个认证执行器应该是口令认证。 + +## 相关仓 + +[useriam_auth_executor_mgr](https://gitee.com/openharmony/useriam_auth_executor_mgr) + +[useriam_user_idm](https://gitee.com/openharmony/useriam_user_idm) + +[useriam_user_auth](https://gitee.com/openharmony/useriam_user_auth) + +[useriam_pin_auth](https://gitee.com/openharmony/useriam_pin_auth) + +[useriam_faceauth](https://gitee.com/openharmony/useriam_faceauth) diff --git a/website/docs/_posts/release-notes/OpenHarmony-1-0.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-0.md similarity index 98% rename from website/docs/_posts/release-notes/OpenHarmony-1-0.md rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-0.md index 8e12a1e37cb02c5ec76f2e7fc4dc816f8724c31f..ba13568ed2d0a46866c7437e8afb7d8055507255 100644 --- a/website/docs/_posts/release-notes/OpenHarmony-1-0.md +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-0.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-1-0.md -permalink: /pages/extra/0a1ae8/ +title: OpenHarmony-1-0 +permalink: /pages/extra/747819/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:34 +date: 2022-02-12 09:01:57 --- # OpenHarmony 1.0(2020-09-10) diff --git a/website/docs/_posts/release-notes/OpenHarmony-1-1-0-LTS.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-0-LTS.md similarity index 99% rename from website/docs/_posts/release-notes/OpenHarmony-1-1-0-LTS.md rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-0-LTS.md index a5278a5d252e382702271b729304c88137f06fd7..72fb4da74d8ef6fbaab42f0ea9973b77a60ac353 100644 --- a/website/docs/_posts/release-notes/OpenHarmony-1-1-0-LTS.md +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-0-LTS.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-1-1-0-LTS.md -permalink: /pages/extra/5e1674/ +title: OpenHarmony-1-1-0-LTS +permalink: /pages/extra/681d8d/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:34 +date: 2022-02-12 09:01:57 --- # OpenHarmony 1.1.0 LTS(2021-04-01) diff --git a/website/docs/_posts/release-notes/OpenHarmony-1-1-1-LTS.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-1-LTS.md similarity index 97% rename from website/docs/_posts/release-notes/OpenHarmony-1-1-1-LTS.md rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-1-LTS.md index d35b1956f1925c041d021fb45cfef5f3214990e4..ab0fc9855fd71711c33103303e95a0466a1a1b02 100644 --- a/website/docs/_posts/release-notes/OpenHarmony-1-1-1-LTS.md +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-1-1-1-LTS.md @@ -1,15 +1,15 @@ --- -title: OpenHarmony-1-1-1-LTS.md -permalink: /pages/extra/a70d2c/ +title: OpenHarmony-1-1-1-LTS +permalink: /pages/extra/4d1b76/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:34 +date: 2022-02-12 09:01:57 --- # OpenHarmony 1.1.1 LTS(2021-06-22) diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/03.OpenHarmonyv2.0Canary.md" b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-2-0-Canary.md similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/03.OpenHarmonyv2.0Canary.md" rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-2-0-Canary.md index efa239361a22a616d578f80783818b87763846cc..7f88acada44a79b08d115cc1b8629ed25ba10167 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/03.OpenHarmonyv2.0Canary.md" +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-2-0-Canary.md @@ -1,15 +1,16 @@ --- -title: OpenHarmonyv2.0Canary -permalink: /pages/00000302 +title: OpenHarmony-2-0-Canary +permalink: /pages/extra/a922d4/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false ---- +date: 2022-02-12 09:01:57 +--- # OpenHarmony 2.0 Canary(2021-06-01) - [版本概述](#section1677664815431) diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/04.OpenHarmonyv1.1.3LTS.md" b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1-1-3-LTS.md similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/04.OpenHarmonyv1.1.3LTS.md" rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1-1-3-LTS.md index fc548e491f1c846fa67b77b45e7b6e1175e3b1fa..7018e026a2041fc7d37e86dd3a00012ae4fc2d4f 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/04.OpenHarmonyv1.1.3LTS.md" +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1-1-3-LTS.md @@ -1,15 +1,16 @@ --- -title: OpenHarmonyv1.1.3LTS -permalink: /pages/00000303 +title: OpenHarmony-v1-1-3-LTS +permalink: /pages/extra/43b4af/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false ---- +date: 2022-02-12 09:01:57 +--- # OpenHarmony v1.1.3 LTS - [版本概述](#section1846294912228) diff --git a/website/docs/_posts/release-notes/OpenHarmony-v1.1.2-LTS.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1.1.2-LTS.md similarity index 99% rename from website/docs/_posts/release-notes/OpenHarmony-v1.1.2-LTS.md rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1.1.2-LTS.md index d08ff350fdab1156772a4f561878e0ee48c7ae09..cf3aef13dd337d2119a8dfae71df03b41b52ff9e 100644 --- a/website/docs/_posts/release-notes/OpenHarmony-v1.1.2-LTS.md +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v1.1.2-LTS.md @@ -1,12 +1,12 @@ --- -title: OpenHarmony-v1.1.2-LTS.md -permalink: /pages/extra/4f9c6b/ +title: OpenHarmony-v1.1.2-LTS +permalink: /pages/extra/73c1be/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false --- diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/02.OpenHarmonyv2.2beta2.md" b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v2.2-beta2.md similarity index 99% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/02.OpenHarmonyv2.2beta2.md" rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-v2.2-beta2.md index 5829c5d219c2c2000136f48dee061b91f306deee..9fbd7fca46ade6229559c3c09b1aeebb753c7ce2 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/02.OpenHarmonyv2.2beta2.md" +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v2.2-beta2.md @@ -1,15 +1,16 @@ --- -title: OpenHarmonyv2.2beta2 -permalink: /pages/00000301 +title: OpenHarmony-v2.2-beta2 +permalink: /pages/extra/a1e0f3/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false ---- +date: 2022-02-12 09:01:57 +--- # OpenHarmony v2.2 Beta2 - [版本概述](#section1677664815431) @@ -283,9 +284,9 @@ repo forall -c 'git lfs pull' API变更请参考: -[JS API 差异报告](/pages/extra/0612c5/) +[JS API 差异报告](/pages/extra/c54abf/) -[Native API 差异报告](/pages/extra/878ece/) +[Native API 差异报告](/pages/extra/9a40ca/) ## 修复缺陷列表 diff --git "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/01.OpenHarmonyv3.0LTS.md" b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md similarity index 98% rename from "website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/01.OpenHarmonyv3.0LTS.md" rename to website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md index 06daee71e6b0c712bd294876468b818bb1fbcc71..02b6bad808a3f1f9597a27e1e92d858d4bc7e29a 100644 --- "a/website/docs/01.\346\226\207\346\241\243/01.\346\226\207\346\241\243\345\257\274\350\257\273-\344\272\206\350\247\243OpenHarmony/04.\347\211\210\346\234\254\350\257\264\346\230\216/01.OpenHarmonyv3.0LTS.md" +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0-LTS.md @@ -1,15 +1,16 @@ --- -title: OpenHarmonyv3.0LTS -permalink: /pages/00000300 +title: OpenHarmony-v3.0-LTS +permalink: /pages/extra/73fe76/ navbar: true -sidebar: true -prev: true -next: true +sidebar: false +prev: false +next: false search: true article: true comment: false editLink: false ---- +date: 2022-02-12 09:01:57 +--- # OpenHarmony 3.0 LTS - [版本概述](#版本概述) @@ -149,7 +150,7 @@ repo forall -c 'git lfs pull' ### API变更 -API变更请参考:[JS API 差异报告](/pages/extra/d7f128/) +API变更请参考:[JS API 差异报告](/pages/extra/3362e1/) ### 芯片及开发板适配 diff --git a/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0.1-LTS.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0.1-LTS.md new file mode 100644 index 0000000000000000000000000000000000000000..9ebcf0ef52a53d2756861e04c7dde25dc6809435 --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.0.1-LTS.md @@ -0,0 +1,179 @@ +--- +title: OpenHarmony-v3.0.1-LTS +permalink: /pages/extra/cf5f01/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +--- +# OpenHarmony 3.0.1 LTS + +## 版本概述 + +此版本为OpenHarmony-3.0-LTS分支上的维护版本,基于OpenHarmony-v3.0-LTS版本修复一些缺陷及安全问题,通过集成验证后发布最新的稳定的tag版本。 + + +## 配套关系 + +**表1** 版本软件和工具配套关系 + +| 软件 | 版本 | 备注 | +| -------- | -------- | -------- | +| OpenHarmony | 3.0.1 LTS | NA | +| SDK | 3.0.0.0(API Version 7 release) | NA | +| HUAWEI DevEco Studio(可选) | 3.0 Beta1 | OpenHarmony应用开发推荐使用。 | +| HUAWEI DevEco Device Tool(可选) | 2.2 Beta2 | OpenHarmony智能设备集成开发环境推荐使用。 | + + +## 源码获取 + + +### 通过repo获取 + +**方式一(推荐)**:通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 + +``` +repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v3.0.1-LTS --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + +**方式二**:通过repo + https 下载。 + +``` +repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.0.1-LTS --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + + +### 从镜像站点获取 + +**表2** 获取源码路径 + +| **LTS版本源码** | **版本信息** | **下载站点** | **SHA256校验码** | +| -------- | -------- | -------- | -------- | +| 全量代码(标准、轻量和小型系统) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/code-v3.0.1-LTS.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/code-v3.0.1-LTS.tar.gz.sha256) | +| 标准系统解决方案(二进制) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/standard.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/standard.tar.gz.sha256) | +| Hi3861解决方案(二进制) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_pegasus.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_pegasus.tar.gz.sha256) | +| Hi3518解决方案(二进制) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_aries.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_aries.tar.gz.sha256) | +| Hi3516解决方案-LiteOS(二进制) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_taurus.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_taurus.tar.gz.sha256) | +| Hi3516解决方案-Linux(二进制) | 3.0.1 | [站点](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_taurus_linux.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.0.1/hispark_taurus_linux.tar.gz.sha256) | + + + +## 更新说明 + +本版本在OpenHarmony v3.0 LTS的基础上有如下变更。 + + +### 特性变更 + +当前维护版本不涉及新需求及新特性的接纳与变更。 + + +### API变更 + +此版本不涉及API变更。 + + +### 芯片及开发板适配 + +芯片及开发板适配状态请参考[SIG-Devboard](https://gitee.com/openharmony/community/blob/master/sig/sig-devboard/sig_devboard_cn.md)信息。 + + +## 修复缺陷列表 + +**表3** 轻量和小型系统解决的缺陷ISSUE列表 + +| ISSUE单号 | 问题描述 | +| -------- | -------- | +| [I4BJFU](https://gitee.com/openharmony/kernel_liteos_a/issues/I4BJFU) | dyload_posix模块在removefile的时候出现错误 | +| [I42N33](https://gitee.com/openharmony/third_party_mksh/issues/I42N33) | 集成测试直接执行cat后无法退出,需要重启设备恢复 | +| [I4C8BO](https://gitee.com/openharmony/docs/issues/I4C8BO?from=project-issue) | 3516DV300/3518EV300 使用官网烧写配置媒体子系统(轻量小型)基本功能异常 | +| [I4BWKC](https://gitee.com/openharmony/drivers_framework/issues/I4BWKC) | 3516DV300单板camera驱动压测问题 | +| [I4BW0G](https://gitee.com/openharmony/drivers_framework/issues/I4BW0G) | 3516DV300单板ResetDriver接口失败 | +| [I4C7ZK](https://gitee.com/openharmony/multimedia_camera_lite/issues/I4C7ZK) | HI3516DV300 小型系统常驻内存超基线 | +| [I434P1](https://gitee.com/openharmony/multimedia_camera_lite/issues/I434P1) | HI3518EV300常驻内存超基线 | +| [I48IM7](https://gitee.com/openharmony/hiviewdfx_hilog/issues/I48IM7) | 运行hilog的压测,hilogd异常重启,且hilog命令一直无法使用 | +| [I4EGMD](https://gitee.com/openharmony/aafwk_aafwk_lite/issues/I4EGMD) | 修改want的序列化和反序列化方法 | +| [I4CED3](https://gitee.com/openharmony/account_os_account/issues/I4CED3) | 修复JS API接口返回只有一个内容的问题 | +| [I4BXZ1](https://gitee.com/openharmony/app_samples/issues/I4BXZ1) | 修复[ Picker] 组件点击无响应问题 | +| [I4CMMH](https://gitee.com/openharmony/ace_ace_engine/issues/I4CMMH) | 解决toggle显示异常问题 | +| [I4CE7D](https://gitee.com/openharmony/miscservices_inputmethod/issues/I4CE7D) | 优化编辑框响应时间 | +| [I4HI4C](https://gitee.com/openharmony/ai_engine/issues/I4HI4C) | 解决小型系统TDD 用例失败问题,调整用例比较时间范围 | +| [I4EUOW](https://gitee.com/openharmony/ai_engine/issues/I4EUOW) | 更改用例执行线程数 | +| [I4HTFS](https://gitee.com/openharmony/appexecfwk_appexecfwk_lite/issues/I4HTFS) | 轻量系统bms适配 | +| [I4C3BE](https://gitee.com/openharmony/communication_dsoftbus/issues/I4C3BE) | 修复了BLE被动发现频繁更新蓝牙广播,导致蓝牙资源消耗完自动关闭的问题 | +| [I4I7QL](https://gitee.com/openharmony/developtools_packing_tool/issues/I4I7QL) | 修复一个ability有2张卡片的时候打包报错问题 | +| [I4BW0G](https://gitee.com/openharmony/drivers_framework/issues/I4BW0G) | 解决WiFi ResetDriver概率性失败问题 | +| [I4GBB6](https://gitee.com/openharmony/device_qemu/issues/I4GBB6) | 修复risc-v qemu模拟器运行系统异常问题 | +| [I4CE7E](https://gitee.com/openharmony/kernel_liteos_a/issues/I4CE7E) | liteos-a内核drivers/mtd/multi_partition/用到了device/hisilicon下的驱动函数实现 | +| [I4JBEH](https://gitee.com/openharmony/drivers_framework/issues/I4JBEH) | 修复了反复使用HDF的DMA传输接口,发生内存泄漏的问题 | +| [I4IGQ0](https://gitee.com/openharmony/drivers_framework/issues/I4IGQ0) | 解决器件探测失败后导致资源释放问题 | +| [I4JPCG](https://gitee.com/openharmony/drivers_framework/issues/I4JPCG) | 解决pwm背光无法设置0的问题 | +| [I4ERM4](https://gitee.com/openharmony/drivers_peripheral/issues/I4ERM4) | 解决显示用例失败的问题 | +| [I4CMUY](https://gitee.com/openharmony/drivers_adapter_khdf_linux/issues/I4CMUY) | hdf_peripheral_wlan_test_performance.bin测试套执行失败 | +| [I4FIP2](https://gitee.com/openharmony/kernel_liteos_a/issues/I4FIP2) | a核ioctl支持SIOCGIFBRDADDR选项 | +| [I4GVF7](https://gitee.com/openharmony/kernel_liteos_a/issues/I4GVF7) | 修改blackbox生成的文件和文件夹权限 | +| [I4EV8U](https://gitee.com/openharmony/kernel_liteos_a/issues/I4EV8U) | liteos_a_io_unittest.bin\#IoTest模块失败3条用例:IO_TEST_PPOLL_001等 | +| [I4EV3X](https://gitee.com/openharmony/kernel_liteos_a/issues/I4EV3X) | liteos_a_sys_unittest.bin\#SysTest模块失败7条用例:ItTestSys018等 | +| [I4EVG0](https://gitee.com/openharmony/kernel_liteos_a/issues/I4EVG0) | liteos_a_misc_unittest.bin\#MiscTest模块失败1条用例ItTestMisc009 | +| [I4JYAX](https://gitee.com/openharmony/kernel_liteos_a/issues/I4JYAX) | jffs2适配层错误释放锁 | +| [I4FIQW](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FIQW) | liteos_m核ioctl支持SIOCGIFBRDADDR选项 | +| [I4ELVA](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ELVA) | 修复文件系统VFS层read接口未正确判空g_fs的问题 | +| [I4C6P2](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C6P2) | LOS_QueueInfoGet函数统计等待读写任务有误 | +| [I4C5RW](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C5RW) | 开启MPU保护任务栈时,遇到OS_TASK_STACK_PROTECT_SIZE宏未定义的错误 | +| [I4G4VK](https://gitee.com/openharmony/kernel_liteos_m/issues/I4G4VK) | 修改inet_addr等宏为函数,外层调用可不包含lwip头文件 | +| [I4FVGV](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FVGV) | liteos_m核优化lwip默认配置 | +| [I4CE7D](https://gitee.com/openharmony/miscservices_inputmethod/issues/I4CE7D) | 删除延迟3秒拉起输入法 | +| [I4CFOO](https://gitee.com/openharmony/multimedia_media_lite/issues/I4CFOO) | linux多次录像后,不退出应用,重启最后一个录像文件大小为0 | +| [I4CLGW](https://gitee.com/openharmony/kernel_liteos_a/issues/I4CLGW) | pagecache优化 | +| [I4HKQ2](https://gitee.com/openharmony/vendor_hisilicon/issues/I4HKQ2) | 测试轻量系统liteOs 获取udid | +| [I4FVJN](https://gitee.com/openharmony/startup_syspara_lite/issues/I4FVJN) | 轻量系统编译依赖mbedtls,却没有加依赖,导致编译不过 | +| [I4CE7E](https://gitee.com/openharmony/kernel_liteos_a/issues/I4CE7E) | liteos-a内核drivers/mtd/multi_partition/用到了device/hisilicon下的驱动函数实现 | + +**表4** 标准系统解决的缺陷ISSUE列表 + +| ISSUE单号 | 问题描述 | +| -------- | -------- | +| [I4BX4J](https://gitee.com/openharmony/hiviewdfx_hicollie/issues/I4BX4J?from=project-issue) | 3516DV300单板调用hicollie接口失败 | +| [I4BX1X](https://gitee.com/openharmony/hiviewdfx_hitrace/issues/I4BX1X?from=project-issue) | 3516DV300单板调用hitrace接口失败 | +| [I4BVUL](https://gitee.com/openharmony/communication_wifi/issues/I4BVUL?from=project-issue) | 标准系统与手机切换AP场景发现组网成功率低(91%),不达98% | +| [I4BW6E](https://gitee.com/openharmony/security_deviceauth/issues/I4BW6E) | 标准系统与手机_手机侧循环开关网络_30次左右开始组网失败不再成功 | +| [I4BVVW](https://gitee.com/openharmony/communication_dsoftbus/issues/I4BVVW) | 标准系统与手机_L2开关网络自组网成功率97%_失败3次_需分析失败原因 | +| [I48YPH](https://gitee.com/openharmony/security_deviceauth/issues/I48YPH?from=project-issue) | 测试发现和组网性能(循环离网-发现-组网)_110次组网失败3次 | +| [I4492M](https://gitee.com/openharmony/communication_dsoftbus/issues/I4492M) | 组网10分钟自动下线规格,实际测试不准确,耗时多了30s左右 | +| [I44W7U](https://gitee.com/openharmony/graphic_standard/issues/I44W7U?from=project-issue) | SubWindow窗口大小不支持缩放,导致播放Video过程中会盖住进度条 | +| [I480Z1](https://gitee.com/openharmony/communication_dsoftbus/issues/I480Z1?from=project-issue) | Softbus_server在执行socketfuzz时,出现crash | +| [I4BGLS](https://gitee.com/openharmony/security_deviceauth/issues/I4BGLS?from=project-issue) | import_signed_auth_info_hilink导入的key用于HiChain连接时的身份标志,导入后加密存储在文件中,属于敏感数据,在返回后没有从堆中清除 | +| [I4A10Q](https://gitee.com/openharmony/startup_appspawn/issues/I4A10Q?from=project-issue) | 性能测试3516 3.0.0.6静态KPI劣化严重 | +| [I4BXYT](https://gitee.com/openharmony/developtools_hdc_standard/issues/I4BXYT) | hdc_std在设备重启之后,需要hdc_std kill才能重新发现设备 | +| [I4KUTY](https://gitee.com/openharmony/ace_engine_lite/issues/I4KUTY) | 删除无效的结果返回 | +| [I4DMFV](https://gitee.com/openharmony/ark_js_runtime/issues/I4DMFV) | 修复utf16到utf8的转换 | +| [I4HGVM](https://gitee.com/openharmony/communication_dsoftbus/issues/I4HGVM) | 增加标准系统对mbedtls的依赖 | +| [I4DLV2](https://gitee.com/openharmony/drivers_framework/issues/I4DLV2) | 修复HidInfo\*类型导致非法内存访问错误的问题 | +| [I4CIJJ](https://gitee.com/openharmony/third_party_flutter/issues/I4CIJJ) | ArkUI支持GPU渲染 | +| [I4G31Z](https://gitee.com/openharmony/third_party_freetype/issues/I4G31Z) | 字体引擎版本从2.10.1升级到2.10.4 | +| [I4H06M](https://gitee.com/openharmony/third_party_harfbuzz/issues/I4H06M) | OpenType 文本整形引擎版本从2.6.1升级到2.8.1 | +| [I4FS7V](https://gitee.com/openharmony/third_party_lwip/issues/I4FS7V) | 使用LWIP_NETCONN_FULLDUPLEX宏来管控conn->mbox_threads_waiting的初始化 | +| [I43KL7](https://gitee.com/openharmony/graphic_standard/issues/I43KL7) | 修改了合成器支持GPU合成 | + + +## 遗留缺陷列表 + +**表5** 遗留缺陷列表 + +| ISSUE | 问题描述 | 影响 | 计划解决日期 | +| -------- | -------- | -------- | -------- | +| [I4NMXQ](https://gitee.com/openharmony/xts_acts/issues/I4NMXQ?from=project-issue) | 标准系统XTS执行storagefileioperformancejstest和storagefilestabilityjstest测试套无法自动执行 | XTS测试套框架问题,分布式文件子系统自动化x-device无法执行测试套,可以手动执行,对功能无影响 | 2022/1/30 | +| [I4NU92](https://gitee.com/openharmony/communication_wifi/issues/I4NU92) | 轻量系统3516_Linux ActsLwipTest.bin测试套测试存在一条失败项 | 自动化测试用例调用内核读取time_out失败,对通信功能无影响 | 2022/1/15 | +| [I4NTKG](https://gitee.com/openharmony/xts_acts/issues/I4NTKG) | 执行XTS测试套WeekPluralNumberTest出现两条失败项 | 测试套用例问题,不影响实际功能 | 2022/1/15 | +| [I4OWWM](https://gitee.com/openharmony/xts_acts/issues/I4OWWM) | WeekPluralNumbertest模块对应json文件配置的有问题,执行用例时报"required device does not exist"导致UN | json文件配置问题,不影响功能 | 2022/1/15 | +| [I4MSVV](https://gitee.com/openharmony/xts_acts/issues/I4MSVV?from=project-issue) | 标准系统XTS测试执行测试ActsHiCollieCppTest模块HiCollieCppTest用例3条失败项 | 测试套名称变更导致存在文本校验功能的测试用例不通过,对功能无影响 | 2022/1/15 | +| [I4MSWM](https://gitee.com/openharmony/xts_acts/issues/I4MSWM?from=project-issue) | 标准系统XTS测试执行测试ActsFaultLoggerTest模块faultloggertest用例1条失败项 | 测试套名称变更导致存在文本校验功能的测试用例不通过,对功能无影响 | 2022/1/15 | +| [I4NODO](https://gitee.com/openharmony/device_manager/issues/I4NODO) | 标准系统3516分布式业务流转端到端测试失败,无法完成流转 | DM组件_重复创建群组失败,影响使用流转功能(按照isuue中提到的操作步骤)的业务,对其他应用无影响 | 2022/1/30 | diff --git a/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.1-beta.md b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.1-beta.md new file mode 100644 index 0000000000000000000000000000000000000000..7ee9604ced596ca213c123703b83705384a593a0 --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/OpenHarmony-v3.1-beta.md @@ -0,0 +1,228 @@ +--- +title: OpenHarmony-v3.1-beta +permalink: /pages/extra/c4cfbf/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# OpenHarmony 3.1 Beta + +- [版本概述](#版本概述) +- [配套关系](#配套关系) +- [源码获取](#源码获取) + - [通过repo获取](#通过repo获取) + - [从镜像站点获取](#从镜像站点获取) +- [更新说明](#更新说明) + - [特性变更](#特性变更) + - [API变更](#api变更) + - [芯片及开发板适配](#芯片及开发板适配) + - [Samples & Codelabs](#samples-amp-codelabs) + - [新增Samples](#新增samples) + - [新增Codelabs](#新增codelabs) +- [修复缺陷列表](#修复缺陷列表) +- [遗留缺陷列表](#遗留缺陷列表) + + +## 版本概述 + +当前版本在OpenHarmony 3.0 LTS的基础上,更新支持了以下能力: + +- 标准系统OS基础能力增强:内核提升CMA利用率特性、图形新增支持RenderService渲染后端引擎、短距离通信支持STA(Station)和SoftAP基础特性、支持地磁场的算法接口、传感器驱动模型能力增强、支持应用帐号信息查询和订阅等、全球化特性支持、编译构建支持统一的构建模板、编译运行时提供Windows/MacOS/Linux的前端编译工具链、JS运行时支持预览器、新增支持JSON处理、Eventbus、Vcard、Protobuf、RxJS、LibphoneNumber等6个JS三方库、新增时间时区管理、DFX新增支持HiSysEvent部件提供查询和订阅接口。 + +- 标准系统分布式能力增强:包括新增支持分布式DeviceProfile特性、分布式数据管理支持跨设备同步和订阅、分布式软总线支持网络切换组网、分布式文件系统支持Statfs API能力等。 + +- 标准系统应用程序框架能力增强:新增ArkUI自定义绘制能力和Lottie动画能力、新增包管理探秘隐式查询和多hap包安装、事件通知支持权限管理、设置通知振动、通知声音设置和查询、通知免打扰、会话类通知等。 + +- 标准系统应用能力增强:输入法应用支持文本输入和横屏下布局显示、短信应用信息管理、联系人应用通话记录和拨号盘显示、设置应用更多设置项。 + +- 轻量系统能力增强:HiStreamer轻量级支持可定制的媒体管线框架、Linux版本init支持热插拔、OS轻内核&驱动启动优化、快速启动能力支持。 + + +## 配套关系 + +**表1** 版本软件和工具配套关系 + +| 软件 | 版本 | 备注 | +| -------- | -------- | -------- | +| OpenHarmony | 3.1 Beta | NA | +| SDK | Ohos_sdk 3.1 Beta  (API Version 8 Beta) | NA | +| HUAWEI DevEco Studio(可选) | 3.0 Beta2 | OpenHarmony应用开发推荐使用。 | +| HUAWEI DevEco Device Tool(可选) | 3.0 Beta2 | OpenHarmony智能设备集成开发环境推荐使用。 | + + +## 源码获取 + + +### 通过repo获取 + +**方式一(推荐)** + +通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 + +``` +repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Beta --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + +**方式二** + +通过repo + https 下载。 + +``` +repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Beta --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + +### 从镜像站点获取 + +**表2** 获取源码路径 + +| 版本源码 | **版本信息** | **下载站点** | **SHA256校验码** | +| -------------------------------- | ------------ | ------------ | ---------------- | +| 全量代码(标准、轻量和小型系统) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/code-v3.1-Beta.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/code-v3.1-Beta.tar.gz.sha256) | +| Hi3516标准系统解决方案(二进制) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_hi3516.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_hi3516.tar.gz.sha256) | +| RK3568标准系统解决方案(二进制) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_rk3568.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_rk3568.tar.gz.sha256) | +| Hi3861轻量系统解决方案(二进制) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_pegasus.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_pegasus.tar.gz.sha256) | +| Hi3516轻量系统解决方案-LiteOS(二进制) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus.tar.gz.sha256) | +| Hi3516轻量系统解决方案-Linux(二进制) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus_linux.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus_linux.tar.gz.sha256) | +| 标准系统SDK包(Mac) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk-mac.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk-mac.tar.gz.sha256) | +| 标准系统SDK包(Windows\Linux) | 3.1 Beta | [站点](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk.tar.gz) | [SHA256校验码](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk.tar.gz.sha256) | +| 编译工具链获取清单 | - | [站点](https://repo.huaweicloud.com/harmonyos/os/2.0/tool_chain/) | | + + +## 更新说明 + +本版本在OpenHarmony 3.0 LTS的基础上有如下变更。 + + +### 特性变更 + +**表3** 版本新增特性表 + +| 子系统名称 | 标准系统 | 轻量、小型系统 | +| -------- | -------- | -------- | +| 包管理子系统 | - I4MBSE:提供桌面包管理客户端
- I4MBSF:支持缓存清除能力
- I4MBSG:支持安装包信息查询
- I4MBSD:支持多hap包安装
- I4MBSH:支持多hap安装的签名校验
- I4MBSC:支持Module和Ability的srcPath字段 | NA | +| 分布式任务调度子系统 | -I4MBRW:SAMGR新增服务进程内的System Ability名单管控
-I4MBRV:SAMGR新增系统服务状态列表维护
-I4MBRZ:SAMGR新增全量服务列表初始化
-I4MBRY:SAMGR新增系统服务进程状态列表维护
-I4MBRX:SAMGR新增加载指定系统服务 | NA | +| DeviceProfile子系统 | -I4NY23:本地设备Profile的插入、删除、查询
-I4NY1X:远程设备Profile的查询
-I4NY1T:订阅远程Profile变化的通知
-I4NY1W:跨设备同步Profile | NA | +| 帐号子系统 | -I4MBQW:支持应用帐号的新增和删除
-I4MBQV:应用帐号基础信息约束
-I4MBQU:支持应用帐号订阅及取消订阅
-I4MBQT:支持应用帐号功能设置与内容修改
-I4MBQS:支持应用帐号信息查询
-I4IT3U:支持应用帐号基础信息管理 | NA | +| 泛sensor服务子系统 | -I3NJ96:加速度传感器数据上报
-I3NJ8H:陀螺仪传感器数据上报
-I3NJ7J:环境光传感器数据上报
-I3NJ76:磁力计传感器数据上报
-I4MBRP:地磁场偏角和倾角
-I4MBRQ:地磁场水平强度、总强度 | NA | +| USB服务子系统 | I410OZ:
- 查询已连接的USB设备列表
- 获取USB设备临时访问权限
- 设置USB设备配置、接口
- 与USB设备进行数据传输 | NA | +| 语言编译器运行时子系统 | - I4MBUK:JavaScript/TypeScript默认运行时从quickjs替换为方舟运行时。
- I4MBUJ:方舟运行时内存回收功能增强,支持并发标记算法以及并发压缩算法,支持选择部分region进行压缩GC(Partial CompressionGC),优化GC pause time减少30%。 | NA | +| 全球化子系统 | - 支持国际化特性:单复数规则、字符串排序、电话号码处理、日历&本地历法、度量衡体系和格式化、区域表示和属性、时间段格式化、字母表检索、unicode字符属性、断词换行
- 支持系统资源、rawfile资源 | NA | +| 分布式软总线子系统 | -I4FZ29:软总线提供传输ExtAPI接口
-I4FZ25:软总线支持网络切换组网 | -I4FZ29:软总线提供传输ExtAPI接口
-I4FZ25:软总线支持网络切换组网 | +| 启动子系统 | NA | -I3XGJH:init基础环境构建
-I3XGKV:system parameter管理
-I3XGLN:init 脚本管理
-I3XGMQ:基础权限管理
-I3XGN8:bootimage构建和加载
-I3XGKV:uevent 管理
-I3XGNM:烧写模式支持 | +| 媒体子系统 | NA | -I4BX5Z:HiStreamer支持音频播放和控制
-I4BX8A:HiStreamer支持常见音频格式mp3/wav的播放
-I4BX9E:HiStreamer播放引擎框架需求
-I4DK89:HiStreamer插件框架需求
-I4DK8D:HiStreamer性能和DFX需求 | +| 图形子系统 | 全新设计OpenHarmony 图形栈:
新增UI框架渲染后端特性支持
新增ArkUI控件接入RenderService渲染后端 | NA | +| 内核子系统 | 内核(Linux 5.10)
-I4LUG4 CMA内存区域复用(目前仅支持Hi3516DV300,暂不支持RK平台)
-I4LX4G 支持anonymous vma命名(目前仅支持Hi3516DV300,暂不支持RK平台) | -I3ND6Y:【性能】OS内核&驱动启动优化 | +| 启动恢复子系统 | NA | -I3NTCT:Linux版本init支持热插拔 | +| 分布式数据对象管理子系统 | NA | -I4H3JJ:分布式对象支持小型系统设备 | +| 电话子系统 | NA | -I4JQ2N:提供Http JS API
-I4JQ3G:提供Http 2.0协议 | +| Misc软件服务子系统 | I4MBQE:
支持应用读取时间
支持应用读取时区
支持时间修改通知
支持时区修改通知
支持分钟变化通知 | NA | +| 编译构建子系统 | I4K7E3:支持使用统一的编译命令作为编译入口
- I4KCNB:支持使用统一的gn模板 | -I4MBQN:支持统一的编译入口、支持使用build.sh编译轻量、小型系统
-I4MBQP:支持统一的编译流程
-I4MBQR:支持统一的产品配置 | +| 文件存储子系统 | -I4MBS2:statfs获取设备总空间与剩余空间JS接口 | NA | +| 驱动子系统 | -I4L3KK:传感器器件驱动能力增强,支持传感器采样率动态配置,三轴方向静态可配置,环境光增益调节。
-I4L3LF:传感器驱动模型能力增强,支持传感器HDI跨进程服务获取和调用。
-I4MBTS:HDF-Input设备能力丰富,支持摇杆设备数据上报。
-I4MBTR:Display HDI接口针对标准系统的参考实现,针对DRM显示架构,提供针对标准系统的Display HDI默认参考实现,有助于厂商参考适配HDI。
-I4HPR7:提供hcs宏式解析机制,编译时使用hc-gen工具把驱动的配置参数解析为宏定义参数,驱动通过hcs宏格式的接口访问宏定义参数。
-I4KVJQ:支持linux/liteos内核系统级休眠唤醒。
-I4L3ZZF:支持同步/异步电源管理调用,提供同步/异步的管理HDF设备进入休眠或者被唤醒的机制。 | -I4L3KK:传感器器件驱动能力增强,支持传感器采样率动态配置,三轴方向静态可配置,环境光增益调节。
-HDF-Input设备能力丰富(linux系统),支持摇杆设备数据上报。
-I4HPR7:提供hcs宏式解析机制,编译时使用hc-gen工具把驱动的配置参数解析为宏定义参数,驱动通过hcs宏格式的接口访问宏定义参数。
-I4KVJQ:支持linux/liteos内核系统级休眠唤醒。
-I4L3ZZF:支持同步/异步电源管理调用,提供同步/异步的管理HDF设备进入休眠或者被唤醒的机制。 | +| ArkUI子系统 | - I4MBUY:事件中增加Target获取尺寸
- I4MBUZ:Swiper组件支持设置缓存cache
- I4MBV1:Image组件支持同步、异步渲染设置
- I4MBV3:样式设置特性增加组件多态样式设置
- I4MBV5:字母索引条组件增加提示菜单内容扩展
- I4MBV6:组件自定义特性增加自定义容器组件规格
- I4MBV7:滚动条样式自定义能力
- I4MBV8:Swiper组件新增切换禁用规格
- I4MBV9:Tabs组件新增TabBar内容自定义规格
- I4MBVA:Navigation组件新增标题栏设置规格
- I4MBVB:工具栏组件增加工具栏显隐控制规格
- I4MBVC:工具栏组件增加内容自定义能力规格
- I4MBVD:新增SysCap声明编译特性
- I4MBVE:新增JSSDK编译特性
- I4MBVF:新增Config.json编译特性
- I4MBVG:新增断点调试特性支持单实例调试
- I4MBVH:新增attach调试特性支持单实例调试
- I4MBVI:新增声明式范式编译特性支持编译和校验规格
- I4MBVJ:新增JS模块共享编译特性
- I4MBVK:新增HAR引用和编译特性
- I4MBVL:新增NPM引用和编译特性、
- I4MBVN:纵向显示滑动条组件特性
- I4MBVO:Popup组件增加内容自定义规格
- I4MBVP:Canvas绘制能力支持
- I4MBVQ:Canvas能力增强
- I4MBVR:触摸响应热区设置
- I4MBVS:Lottie动画支持
- I4MBVT:组件尺寸获取特性
- I4MBVU:Menu组件增加内容自定义规格
- I4MBVV:Swipe手势特性
- I4MBVW:UI预览支持Inspector能力
- I4MBVX:新增非路由文件预览特性
- I4MBVY:新增NAPI预览特性
- I4MBVZ:新增声明式范式预览特性。支持基础预览规格
- I4MBW2:新增声明式范式热加载特性,支持已有节点修改规格
- I4MBW3:新增声明式范式热加载特性,支持新增节点规格
- I4MBW4:新增声明式范式热加载特性,支持删除节点规格
- I4MBW5:新增组件预览特性,支持页面组件预览规格
通用属性新增点击控制 touchable:设置组件是否可以被触摸。
基础组件新增Marquee:跑马灯组件。
基础组件新增Gauge:数据量规图表组件。
基础组件新增TextArea:多行文本输入组件。
基础组件新增TextInput:单行文本输入组件。
基础组件新增Toggle:状态组件。
容器组件新增Stepper:步骤导航器组件。
容器组件新增StepperItem:步骤导航器导航项组件。
新增全局UI方法ActionSheet:列表选择弹窗。 | NA | +| DFX子系统 | -I4MBQH:支持HiSysEvent部件,提供查询、订阅接口
-I4MBQJ:提供工具查询或者订阅系统事件
-I4MBQL:支持Hiappevent部件的C接口 | NA | +| 应用子系统 | -I4MBU1:支持Settings数据管理API
-I4MBU3:支持时间设置
- I4MBU5:支持声音管理
-I4MBU6:支持Settings数据管理
-I4MBU7:支持Settings数据默认值管理
-I4MBU8:支持Settings多设备形态差异化构建
-I4MBU9:通知组件化 | NA | + + +### API变更 + +API变更请参考: + +_[JS API 差异报告](/pages/extra/47c197/)_ + +_[Native API差异报告](/pages/extra/e3a527/)_ + +_[Changelog](/pages/extra/3204f2/)_ + + +### 芯片及开发板适配 + +芯片及开发板适配状态请参考[SIG-Devboard](https://gitee.com/openharmony/community/blob/master/sig/sig-devboard/sig_devboard_cn.md)信息。 + + +### Samples & Codelabs + + +#### 新增Samples + +**表4** Samples列表 + +| 名称 | 简介 | 开发语言 | +| -------- | -------- | -------- | +| [Ets公共事件](https://gitee.com/openharmony/app_samples/tree/master/ability/EtsCommonEvent) | 本示例展示了在eTS中如何使用CommonEvent的接口完成创建订阅者、订阅公共事件、发布公共事件、取消订阅的功能。 | eTS | +| [空气质量](https://gitee.com/openharmony/app_samples/tree/master/common/AirQuality) | 本示例使用JS实现了一个简单空气质量应用,使用折行显示能力显示空气质量信息,使用柱形图展示历史记录。 | JS | +| [分布式计算器](https://gitee.com/openharmony/app_samples/tree/master/common/DistributeCalc) | 本示例使用JS分布式能力实现了一个简单的计算器应用,可以进行简单的数值计算,支持远程拉起另一个计算器FA,两个FA进行协同计算。 | JS | +| [EtsNotification](https://gitee.com/openharmony/app_samples/tree/master/common/EtsNotification) | 本示例展示了在eTS中如何创建和删除Slot通道,如何发布和取消通知。 | eTS | +| [Ets资源管理](https://gitee.com/openharmony/app_samples/tree/master/common/EtsResourceManager) | 本示例展示了在eTS中如何调用资源管理的API接口实现字符串和图片资源信息的获取。 | eTS | +| [kikainput](https://gitee.com/openharmony/app_samples/tree/master/CompleteApps/KikaInput) | kikainput是一个轻量级的输入法应用,支持在运行OpenHarmony OS的智能终端上。 | JS | +| [eTS分布式数据管理](https://gitee.com/openharmony/app_samples/tree/master/data/eTSKvStore) | 本示例展示了在eTS中分布式数据管理的使用,包括KVManager对象实例的创建和KVStore数据流转的使用。 | eTS | +| [轻量级数据存储](https://gitee.com/openharmony/app_samples/tree/master/data/eTSLiteStorage) | 轻量级数据存储主要提供轻量级Key-Value操作,支持本地应用存储少量数据。本示例通过对购物车商品的添加和删除并保存退出的操作,使得再次打开应用时依然可以保留退出前的购物车信息,体现了轻量级存储在保存轻量级数据时的作用。 | eTS | +| [Ets进程信息](https://gitee.com/openharmony/app_samples/tree/master/ETSUI/EtsProcess) | 本示例展示了在eTS中如何获取进程信息和启动一个子进程运行一段shell,包括当前系统运行时间、获取进程当前工作目录、更改进程当前工作目录、发送signal到指定的进程、启动一个子进程、关闭子进程、退出当前系统的功能。 | eTS | +| [Ets运行锁](https://gitee.com/openharmony/app_samples/tree/master/ETSUI/eTSRunninglock) | 本示例展示了阻止系统休眠的运行锁功能,通过黑白色壁纸模拟息屏、亮屏状态,来展示系统的休眠状态,从而对运行锁的功能进行测试,使得该运行锁在打开后可以阻止系统休眠。 | eTS | +| [字符串编解码](https://gitee.com/openharmony/app_samples/tree/master/ETSUI/StringCodec) | 本示例对字符串进行了特定格式的输出,对错误码的内容进行了文本输出,对字符串的编码和解码做了演示结果。 | eTS | +| [Js音频播放和管理](https://gitee.com/openharmony/app_samples/tree/master/media/JsAudioPlayer) | 本示例展示了JS音频播放的使用方法,以及音频的音量大小设置。 | JS | +| [JsVideo](https://gitee.com/openharmony/app_samples/tree/master/media/JsVideo) | 本示例使用JS UI中的<video/>组件,实现视频播放。可以通过video自带的控制栏进行播放、暂停等操作。 | JS | +| [测试打点](https://gitee.com/openharmony/app_samples/tree/master/security/JsDotTest) | 本示例展示了测试打点功能,包括应用打点与性能打点两部分。 | JS | +| [JsWorker](https://gitee.com/openharmony/app_samples/tree/master/thread/JsWorker) | 本示例展示了在JS中如何启动一个worker线程,并实现worker线程和宿主线程的通信。 | JS | +| [画布组件](https://gitee.com/openharmony/app_samples/tree/master/UI/JsCanvas) | <canvas/>组件可以自定义绘制图形,本示例展示了<canvas\>组件的使用方法 | JS | +| [JS页面弹窗](https://gitee.com/openharmony/app_samples/tree/master/UI/JsDialog) | JS中支持用户自定义弹窗,<dialog/>组件作为容器组件,用户可以自定义弹窗的样式和布局。本示例完成了添加和删除联系人功能,在添加和删除时使用自定义弹窗来实现。 | JS | +| [JSList商品列表](https://gitee.com/openharmony/app_samples/tree/master/UI/JsList) | 本示例展示了list控件在商品分类列表中的应用,在listGroup里采用两个list-item分别展示了Group收缩和Group展开的两种列表形态,点击后会弹出相应的list列表。 | JS | +| [JSPanel](https://gitee.com/openharmony/app_samples/tree/master/UI/JsPanel) | JS提供一种轻量级的内容展示面板,此面板可滑动,可自定义触发方式、弹出高度等属性。本示例通过可滑动面板展示了商品详细信息与平台保障。 | JS | +| [JsSvg](https://gitee.com/openharmony/app_samples/tree/master/UI/JsSvg) | 本示例展示了JS中组件及其子组件的使用,包括 。 | JS | +| [JS自定义组件](https://gitee.com/openharmony/app_samples/tree/master/UI/JSUICustomComponent) | 自定义组件是用户根据业务需求,将已有的组件组合,封装成的新组件,可以在工程中多次调用,提高代码的可读性。本示例展示了JS中自定义组件的使用,包括基本用法、自定义事件、Props和事件参数。 | JS | + + +#### 新增Codelabs + +**表5** Codelabs列表 + +| 名称 | 简介 | 开发语言 | +| -------- | -------- | -------- | +| [分布式手写板(eTS)](https://gitee.com/openharmony/codelabs/tree/master/Distributed/DistributeDatabaseDrawEts) | 基于分布式能力,实现多设备同步书写互动。 | eTS | +| [分布式数据库](https://gitee.com/openharmony/codelabs/tree/master/Data/JsDistributedData) | 基于分布式数据接口,实现多种设备上一致的数据访问体验。 | JS | +| [关系型数据库](https://gitee.com/openharmony/codelabs/tree/master/Data/JSRelationshipData) | 基于关系型数据库和数据管理能力,实现数据库相关应用服务的快速开发。 | JS | +| [极简声明式UI范式(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SimpleGalleryEts) | 基于OpenHarmony eTS UI,实现一个图库应用。 | eTS | +| [一次开发多端部署(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/MultiDeploymentEts) | 基于OpenHarmony eTS UI,实现一次布局,多端部署。 | eTS | +| [购物应用(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/ShoppingEts) | 基于OpenHarmony eTS UI丰富的组件实现购物商城应用。 | eTS | +| [Page内和Page间导航跳转](https://gitee.com/openharmony/codelabs/tree/master/Ability/PageAbility) | 入门教程,学习如何完成Page内和Page间的页面导航跳转。 | eTS | +| [转场动画的使用(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/TransitionAnimtaionEts) | 基于OpenHarmony eTS UI转场动画,实现了页面间转场、组件内转场以及共享元素转场。 | eTS | +| [基础组件Slider的使用(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SliderApplicationEts) | 基于OpenHarmony eTS UI,使用slider组件,实现可调节风车大小和转速的动画效果。 | eTS | +| [流式布局(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/FlowLayoutEts) | 基于OpenHarmony eTS UI,实现流式布局效果。 | eTS | +| [弹窗(eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/CustomDialogEts) | 基于OpenHarmony eTS UI,实现警告弹窗和自定义弹窗。 | eTS | + + +## 修复缺陷列表 + +**表6** 修复缺陷ISSUE列表 + +| ISSUE单号 | 问题描述 | +| -------- | -------- | +| [I48IM7](https://gitee.com/openharmony/hiviewdfx_hilog/issues/I48IM7) | 运行hilog压力测试,hilogd异常重启,且hilog命令一直无法使用。 | +| [I48YPH](https://gitee.com/openharmony/security_deviceauth/issues/I48YPH) | 【软总线-组网】测试发现和组网性能(循环离网-发现-组网)110次组网失败3次。 | +| [I4BVVW](https://gitee.com/openharmony/communication_dsoftbus/issues/I4BVVW) | 【软总线-组网】标准系统与手机开关网络自组网成功率97%失败3次需分析失败原因。 | +| [I4BXY1](https://gitee.com/openharmony/multimedia_camera_standard/issues/I4BXY1) | 视频录制后前几秒没声音,播放声画不同步,在板子播放会卡顿,音源较远时,有杂音。 | +| [3ZJ1D](https://gitee.com/openharmony/kernel_liteos_a/issues/I3ZJ1D) | XTS权限用例压测用户态概率失败。 | + + +## 遗留缺陷列表 + +**表7** 遗留缺陷列表 + +| ISSUE | 问题描述 | 影响 | 计划解决日期 | +| -------- | -------- | -------- | -------- | +| [I4NRS5](https://gitee.com/openharmony/kernel_linux_5.10/issues/I4NRS5) | 【内核子系统】存在cve漏洞 | Linux内核还未发布补丁,暂时挂起,待社区发布补丁后升级同步。 | 待社区发布补丁 | +| [I4MGJM](https://gitee.com/openharmony/drivers_peripheral/issues/I4MGJM) | 【hdf/camera】RK3568单板跑camera HDI用例失败 | 拍照和预览正常,可以正常录像,点击结束按钮,不能结束。 | 2021/12/31 | +| [I4OECR](https://gitee.com/openharmony/ark_js_runtime/issues/I4OECR) | XTS运行报ark异常栈(低概率问题) | XTS压力测试低概率偶现(48小时出现1次),仅Log中上报异常栈,对功能无影响。 | 2022/1/5 | +| [I4OBTW](https://gitee.com/openharmony/aafwk_standard/issues/I4OBTW) | 全量执行XTS用例,安装应用后出现批量aa start 失败,影响社区流水线稳定性测试 | XTS压力测试,短时间内批量安装100个应用包,低概率(2个/100个)出现应用无法启动。用户使用无影响。 | 2022/1/5 | +| [I4OLHF](https://gitee.com/openharmony/ark_js_runtime/issues/I4OLHF?from=project-issue) | 【Ark子系统】 由进程com.amsst.amsMissionSnapshotTest导致测试进程异常 | 低概率、偶现,高压力测试偶现问题。 | 2022/1/5 | +| [I4OLUK](https://gitee.com/openharmony/ark_js_runtime/issues/I4OLUK) | 【Ark子系统】 由进程com.ohos.systemui导致进程栈异常 | 低概率、偶现,高压力测试偶现问题。 | 2022/1/5 | diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/template/changelog-x-x.md b/website/docs/_posts/zh-cn/release-notes/api-change/template/changelog-x-x.md new file mode 100644 index 0000000000000000000000000000000000000000..a58c2679603844c236e6ae822d9fe410c0d32e4b --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/template/changelog-x-x.md @@ -0,0 +1,43 @@ +--- +title: changelog-x-x +permalink: /pages/extra/ae9f48/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# ChangeLog +## xxx子系统(该段落为示例,请不要修改或删除) +已经release的版本发生了影响契约兼容性(契约兼容:也称语义兼容,指版本演进后,开发者原有程序行为不发生变化)的变更(包括不限于接口名、参数、返回值、所需要的权限、调用顺序、枚举值、配置参数、路径等),则需要在ChangeLog中对变更进行阐述。 +### cl.subsystemname.x xxx功能变更, 例:DeviceType属性变更、相机权限变更(尽量概括,不要超过15个字) +每个变更标题前需要附加编号:cl.subsystemname.x。cl为ChangeLog首字母缩写,subsystemname请填写子系统英文标准名称,x表示变更序号(从低到高逐位增加)。 +以功能维度对变更点进行概括描述。例如:xxx功能的xxx、xxx等发生了xxx变化,开发者需要根据以下说明对应用进行适配。 +如果有此变更有对应的需求或设计文档,可以在描述中附上对应的设计文档编号。 + +**变更影响** + +是否影响已release的接口或者接口行为发生变更等;影响的是JS接口、Java接口还是Native接口。 + +**关键的接口/组件变更** + +列举此功能变更涉及的接口/组件变更。 + +**适配指导(可选,不涉及则可以删除)** + +(前面空一行)提供指导,帮助开发者针对相关变更进行适配,使应用可以与新版本兼容。例: +在xxx文件中将xxx参数修改为xxx。 +``` +sample code +``` +### cl.subsystemname.x xxx功能变更 +每个功能变更点在自己的子系统章节内新增一个功能变更章节。 + +## xxx子系统 +每个子系统有且只能有一个子系统章节。 + + diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/template/js-apidiff-x-x.md b/website/docs/_posts/zh-cn/release-notes/api-change/template/js-apidiff-x-x.md new file mode 100644 index 0000000000000000000000000000000000000000..f43b93543660e82f1be918c35b3d9288048ea149 --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/template/js-apidiff-x-x.md @@ -0,0 +1,26 @@ +--- +title: js-apidiff-x-x +permalink: /pages/extra/4e9749/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# JS API Diff +## 组件 + +| 组件类型 | 组件名称 | 变更类型 | 变更类型 | +| -------- | -------- | -------- | -------- | +| 描述组件的类型,例如:容器组件、基础组件、媒体组件等 | 描述组件名称,例如:div、button等 | 描述变更的类型,包含新增、删除、废弃、修改 | 如果为废弃,则需要描述替换的组件;如果为修改,则需要描述变化点,例如:新增xxx参数、xxx参数的默认值由xxx变更为xxx;其他情况可以使用 - 符号 | + +## 接口变更 + +| 模块名称 | 接口名称 | 变更类型 | 变更说明 | +| -------- | -------- | -------- | -------- | +| 描述接口所属的模块,例如:数据存储、文件存储等 | 描述接口名称,例如:storage.get(OBJECT)。如果整个模块新增,则可以使用 - 符号 | 描述变更的类型,包含新增、删除、废弃、修改 | 如果为废弃,则需要描述替换的接口;如果为修改,则需要描述变化点,例如:新增xxx参数、xxx参数的默认值由xxx变更为xxx;其他情况可以使用 - 符号 | + diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/template/native-apidiff-x-x.md b/website/docs/_posts/zh-cn/release-notes/api-change/template/native-apidiff-x-x.md new file mode 100644 index 0000000000000000000000000000000000000000..f9da39e9091326e92eff647dcda84fa1f1c97a2b --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/template/native-apidiff-x-x.md @@ -0,0 +1,18 @@ +--- +title: native-apidiff-x-x +permalink: /pages/extra/cd1543/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Native API Diff + +| 模块名称 | 接口名称 | 变更类型 | 变更类型 | +| -------- | -------- | -------- | -------- | +| 描述模块的名称,例如:Native_layer、Image、Media等 | 描述变更元素的名称,包含结构体、类型定义、枚举、函数等,例如:结构体NativeLayerBuffer、类型定义NativeLayer、函数GetNativeLayer (JNIEnv *env, jobject surface)等。如果整个模块新增,则可以使用 - 符号 | 描述变更的类型,包含新增、删除、废弃、修改 | 如果为废弃,则需要描述替换的组件;如果为修改,则需要描述变化点,例如:新增xxx参数、xxx参数的默认值由xxx变更为xxx;其他情况可以使用 - 符号 | \ No newline at end of file diff --git a/website/docs/_posts/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md b/website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md similarity index 99% rename from website/docs/_posts/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md rename to website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md index 64d22e17c4021ad21e2744350562c52cc64d92c4..773b602293fd95a082c2c41844b66f3cabfdb719 100644 --- a/website/docs/_posts/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/js-apidiff-v2.2-beta2.md @@ -1,15 +1,15 @@ --- -title: js-apidiff-v2.2-beta2.md -permalink: /pages/extra/b0ae7b/ +title: js-apidiff-v2.2-beta2 +permalink: /pages/extra/c54abf/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:33 +date: 2022-02-12 09:01:57 --- # JS API 差异报告 OpenHarmony 2.2 Beta2相较于OpenHarmony 2.0 Canary版本的API变更如下: diff --git a/website/docs/_posts/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md b/website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md similarity index 96% rename from website/docs/_posts/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md rename to website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md index c94eed18b5f22d9de657d520dd8ba77a12e8ca23..54dfbbb0ee929a99f11138e4e7e2e1b0be244d39 100644 --- a/website/docs/_posts/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v2.2-beta2/native-apidiff-v2.2-beta2.md @@ -1,15 +1,15 @@ --- -title: native-apidiff-v2.2-beta2.md -permalink: /pages/extra/0d34cb/ +title: native-apidiff-v2.2-beta2 +permalink: /pages/extra/9a40ca/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:33 +date: 2022-02-12 09:01:57 --- # Native API 差异报告 OpenHarmony 2.2 Beta2相较于OpenHarmony 2.0 Canary版本的API变更如下: diff --git a/website/docs/_posts/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md b/website/docs/_posts/zh-cn/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md similarity index 99% rename from website/docs/_posts/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md rename to website/docs/_posts/zh-cn/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md index 0dd15a7b690c3f2a6ec294efb6e20e2b1b39b454..8a86610bff5a55fe445f14c51e9d8a468363aaec 100644 --- a/website/docs/_posts/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v3.0-LTS/js-apidiff-v3.0-lts.md @@ -1,15 +1,15 @@ --- -title: js-apidiff-v3.0-lts.md -permalink: /pages/extra/624df1/ +title: js-apidiff-v3.0-lts +permalink: /pages/extra/3362e1/ navbar: true sidebar: false prev: false next: false -search: false -article: false +search: true +article: true comment: false editLink: false -date: 2021-12-30 18:17:33 +date: 2022-02-12 09:01:57 --- # JS API 差异报告 OpenHarmony 3.0 LTS相较于OpenHarmony 2.2 Beta2版本的API变更如下: diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-LTS/js-apidiff-v3.1-LTS.md b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-LTS/js-apidiff-v3.1-LTS.md new file mode 100644 index 0000000000000000000000000000000000000000..1165b016a162ef8ac4767f47331e26c213f84799 --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-LTS/js-apidiff-v3.1-LTS.md @@ -0,0 +1,27 @@ +--- +title: js-apidiff-v3.1-LTS +permalink: /pages/extra/d1889f/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# JS API Diff + +OpenHarmony 3.1 LTS版本相较于OpenHarmony 3.1 Beta版本的API变更如下: + +## 接口变更 + +| 模块名称 | 接口名称 | 变更类型 | 变更说明 | +| -------- | -------- | -------- | -------- | +| 分布式硬件子系统-DeviceManager | release(): void | 删除 | 为了降低安全风险,删除设备管理JS API | +| 分布式硬件子系统-DeviceManager | getTrustedDeviceListSync(): Array | 删除 | 为了降低安全风险,删除设备管理JS API | +| 分布式硬件子系统-DeviceManager | on(type: 'deviceStateChange', callback: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void | 删除 | 为了降低安全风险,删除设备管理JS API | +| 分布式硬件子系统-DeviceManager | off(type: 'deviceStateChange', callback?: Call back<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void | 删除 | 为了降低安全风险,删除设备管理JS API | +| 分布式硬件子系统-DeviceManager | on(type: 'serviceDie', callback: () => void): void | 删除 | 为了降低安全风险,删除设备管理JS API | +| 分布式硬件子系统-DeviceManager | off(type: 'serviceDie', callback?: () => void): void | 删除 | 为了降低安全风险,删除设备管理JS API | \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/changelog-v3.1-beta.md b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/changelog-v3.1-beta.md new file mode 100644 index 0000000000000000000000000000000000000000..bea54918e24957be48ba17053f4a662cfe43237e --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/changelog-v3.1-beta.md @@ -0,0 +1,56 @@ +--- +title: changelog-v3.1-beta +permalink: /pages/extra/3204f2/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# ChangeLog +##### 关键的接口/组件变更 +## 进程间通信子系统 +#### cl.rpc.1 sendRequest返回值类型变更 + +##### 变更影响 + +js的RemoteProxy和RemoteObject的sendRequest变更为异步接口,返回Promise,兑现值是SendRequestResult的实例。原有应用需要适配。 + +##### 关键的接口/组件变更 + +``` +模块:ohos.rpc.IRemoteObject, ohos.rpc.RemoteProxy和ohos.rpc.RemoteObject +接口:sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean + +变更后接口: +sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise +``` + +**适配指导** + +``` +import rpc from "@ohos.rpc" + +let option = new rpc.MessageOption() +let data = rpc.MessageParcel.create() +let reply = rpc.MessageParcel.create() +proxy.sendRequest(1, data, reply, option) + .then(function(result) { + console.info("send request done") + if (result.errCode === 0) { + // read result from result.reply + } + }) + .catch(function(e) { + console.error("send request failed: " + e) + }) + .finally(() => { + data.reclaim() + reply.reclaim() + }) +``` + diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/js-apidiff-v3.1-beta.md b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/js-apidiff-v3.1-beta.md new file mode 100644 index 0000000000000000000000000000000000000000..a55add2e0cfd4e8bddf510a30fcd84870314d36b --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/js-apidiff-v3.1-beta.md @@ -0,0 +1,440 @@ +--- +title: js-apidiff-v3.1-beta +permalink: /pages/extra/47c197/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# JS API 差异报告 + +OpenHarmony 3.1 Beta相较于OpenHarmony 3.0 LTS版本的API变更如下: + +## 标准系统接口变更 + +| 模块名称 | 接口名称 | 变更类型 | 变更说明 | +| -------- | -------- | -------- | -------- | +| 系统应用-settings | getUri(name: string): string | 新增 | 新增获取设置数据URI | +| 系统应用-settings | getValue(dataAbilityHelper: DataAbilityHelper, name: string, defValue: string): string | 新增 | 新增获取设置数据库值 | +| 系统应用-settings | setValue(dataAbilityHelper: DataAbilityHelper, name: string, value: string): boolean | 新增 | 新增设置设置数据库值 | +| 杂散软件服务-systemTime | getCurrentTime(callback: AsyncCallback): void | 新增 | 获取自 Unix 纪元以来经过的毫秒数。 | +| 杂散软件服务-systemTime | getCurrentTime(): Promise | 新增 | 获取自 Unix 纪元以来经过的毫秒数。 | +| 杂散软件服务-systemTime | getCurrentTimeNs(callback: AsyncCallback): void | 新增 | 获取自 Unix 纪元以来经过的纳秒数。 | +| 杂散软件服务-systemTime | getCurrentTimeNs(): Promise | 新增 | 获取自 Unix 纪元以来经过的纳秒数。 | +| 杂散软件服务-systemTime | getRealActiveTime(callback: AsyncCallback): void | 新增 | 获取自系统启动以来经过的毫秒数,不包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealActiveTime(): Promise | 新增 | 获取自系统启动以来经过的毫秒数,不包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealActiveTimeNs(callback: AsyncCallback): void | 新增 | 获取自系统启动以来经过的纳秒数,不包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealActiveTimeNs(): Promise | 新增 | 获取自系统启动以来经过的纳秒数,不包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealTime(callback: AsyncCallback): void | 新增 | 获取自系统启动以来经过的毫秒数,包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealTime(): Promise | 新增 | 获取自系统启动以来经过的毫秒数,包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealTimeNs(callback: AsyncCallback): void | 新增 | 获取自系统启动以来经过的纳秒数,包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getRealTimeNs(): Promise | 新增 | 获取自系统启动以来经过的纳秒数,包括深度睡眠时间。 | +| 杂散软件服务-systemTime | getDate(callback: AsyncCallback): void | 新增 | 获取当前时间。 | +| 杂散软件服务-systemTime | getDate(): Promise | 新增 | 获取当前时间。 | +| 杂散软件服务-systemTime | getTimeZone(callback: AsyncCallback): void | 新增 | 获取系统时区。 | +| 杂散软件服务-systemTime | getTimeZone(): Promise | 新增 | 获取系统时区。 | +| Ark UI框架-通用事件 | 组件区域变化事件 onAreaChange | 新增 | 新增组件区域(包括大小和位置)变化事件。 | +| Ark UI框架-通用属性 | 触摸热区设置 responseRegion | 新增 | 新增组件触摸热区设置。 | +| Ark UI框架-通用属性 | 点击控制 touchable | 新增 | 新增设置组件是否可以被触摸。 | +| Ark UI框架-通用属性 | 多态样式 stateStyle | 新增 | 新增设置组件按压态和禁用态的样式。 | +| Ark UI框架-通用手势 | SwipeGesture | 新增 | 新增滑动手势。 | +| Ark UI框架-基础组件 | Marquee | 新增 | 新增跑马灯组件。 | +| Ark UI框架-基础组件 | PluginComponent | 新增 | 新增插件组件。 | +| Ark UI框架-基础组件 | TextArea | 新增 | 新增输入区域组件。 | +| Ark UI框架-基础组件 | TextInput | 新增 | 新增输入框组件。 | +| Ark UI框架-基础组件 | Toggle | 新增 | 新增状态组件。 | +| Ark UI框架-容器组件 | ScrollBar | 新增 | 新增滚动条组件。 | +| Ark UI框架-容器组件 | Navigation | 新增 | 新增页面导航组件。 | +| Ark UI框架-容器组件 | Stepper | 新增 | 新增步骤导航器组件。 | +| Ark UI框架-容器组件 | StepperItem | 新增 | 新增步骤导航器导航项组件。 | +| Ark UI框架-画布组件 | Canvas | 新增 | 新增画布组件。 | +| Ark UI框架-画布组件 | Lottie | 新增 | 新增Lottie库的支持。 | +| Ark UI框架-全局UI方法 | ActionSheet | 新增 | 新增列表选择弹窗。 | +| USB服务-usb | getDevices(): Array> | 新增 | 新增获取USB设备列表的接口 | +| USB服务-usb | connectDevice(device: USBDevice): Readonly | 新增 | 新增根据**getDevices()**返回的设备信息打开USB设备的接口 | +| USB服务-usb | hasRight(deviceName: string): boolean | 新增 | 新增判断是否有权访问设备的接口 | +| USB服务-usb | requestRight(deviceName: string): Promise | 新增 | 新增请求给定软件包的临时权限以访问设备的接口 | +| USB服务-usb | claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number | 新增 | 新增获取接口的接口 | +| USB服务-usb | releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number | 新增 | 新增释放接口的接口 | +| USB服务-usb | setConfiguration(pipe: USBDevicePipe, config: USBConfig): number | 新增 | 新增设置设备配置的接口 | +| USB服务-usb | setInterface(pipe: USBDevicePipe, iface: USBInterface): number | 新增 | 新增设置设备接口的接口 | +| USB服务-usb | getRawDescriptor(pipe: USBDevicePipe): Uint8Array | 新增 | 新增获取原始的USB描述符的接口 | +| USB服务-usb | getFileDescriptor(pipe: USBDevicePipe): number | 新增 | 新增获取文件描述符的接口 | +| USB服务-usb | controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise | 新增 | 新增控制传输的接口 | +| USB服务-usb | bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise | 新增 | 新增批量传输的接口 | +| USB服务-usb | closePipe(pipe: USBDevicePipe): number | 新增 | 新增关闭USBDevicePipe的接口 | +| 用户程序框架-bundle | function cleanBundleCacheFiles(bundleName: string, callback: AsyncCallback): void;
function cleanBundleCacheFiles(bundleName: string): Promise; | 新增 | 新增清理应用缓存接口 | +| 用户程序框架-bundle | function setApplicationEnabled(bundleName: string, isEnable: boolean, callback: AsyncCallback): void;
function setApplicationEnabled(bundleName: string, isEnable: boolean): Promise; | 新增 | 新增设置应用使能接口 | +| 用户程序框架-bundle | function setAbilityEnabled(info: AbilityInfo, isEnable: boolean, callback: AsyncCallback): void;
function setAbilityEnabled(info: AbilityInfo, isEnable: boolean): Promise; | 新增 | 新增设置ability使能接口 | +| 用户程序框架-bundle.innerBundleManager | function getLauncherAbilityInfos(bundleName: string, userId: number, callback: AsyncCallback>) : void;
function getLauncherAbilityInfos(bundleName: string, userId: number) : Promise>; | 新增 | 新增通过包名获取应用LauncherAbility接口 | +| 用户程序框架-bundle.innerBundleManager | function on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback, callback: AsyncCallback) : void;
function on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback): Proimise; | 新增 | 新增注册监听包状态变化接口 | +| 用户程序框架-bundle.innerBundleManager | function off(type:"BundleStatusChange", callback: AsyncCallback) : void;
function off(type:"BundleStatusChange"): Proimise; | 新增 | 新增注销监听包状态变化接口 | +| 用户程序框架-bundle.innerBundleManager | function getAllLauncherAbilityInfos(userId: number, callback: AsyncCallback>) : void;
function getAllLauncherAbilityInfos(userId: number) : Promise>; | 新增 | 新增通过userId获取所有launcher上应用的ability接口 | +| 用户程序框架-bundle.innerBundleManager | function getShortcutInfos(bundleName :string, callback: AsyncCallback>) : void;
function getShortcutInfos(bundleName : string) : Promise>; | 新增 | 新增通过bundleName获取应用的shortcutInfo接口 | +| 分布式软总线-rpc.MessageParcel | writeNoException(): void | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readException(): void | 新增 | - | +| 分布式软总线-rpc.MessageParcel | writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readSequenceableArray(sequenceableArray Sequenceable[]): void | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readRemoteObjectArray(objects: IRemoteObject[]): void | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readRemoteObjectArray(): IRemoteObject[] | 新增 | - | +| 分布式软总线-rpc.MessageParcel | static closeFileDescriptor(fd: number): void | 新增 | - | +| 分布式软总线-rpc.MessageParcel | static dupFileDescriptor(fd: number) :number | 新增 | - | +| 分布式软总线-rpc.MessageParcel | containFileDescriptors(): boolean | 新增 | - | +| 分布式软总线-rpc.MessageParcel | writeFileDescriptor(fd: number): boolean | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readFileDescriptor(): number | 新增 | - | +| 分布式软总线-rpc.MessageParcel | writeAshmem(ashmem: Ashmem): boolean | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readAshmem(): Ashmem | 新增 | - | +| 分布式软总线-rpc.MessageParcel | getRawDataCapacity(): number | 新增 | - | +| 分布式软总线-rpc.MessageParcel | writeRawData(rawData: number[], size: number): boolean | 新增 | - | +| 分布式软总线-rpc.MessageParcel | readRawData(size: number): number[] | 新增 | - | +| 分布式软总线-rpc | interface SendRequestResult {
errCode: number;

code: number;

data: MessageParcel;

reply: MessageParcel;
} | 新增 | - | +| 分布式软总线-rpc.Ashmem | PROT_EXEC = 4 | 新增 | - | +| 分布式软总线-rpc.Ashmem | PROT_NONE = 0 | 新增 | - | +| 分布式软总线-rpc.Ashmem | PROT_READ = 1 | 新增 | - | +| 分布式软总线-rpc.Ashmem | PROT_WRITE = 2 | 新增 | - | +| 分布式软总线-rpc.Ashmem | static createAshmem(name: string, size: number): Ashmem | 新增 | - | +| 分布式软总线-rpc.Ashmem | static createAshmemFromExisting(ashmem: Ashmem): Ashmem | 新增 | - | +| 分布式软总线-rpc.Ashmem | closeAshmem(): void | 新增 | - | +| 分布式软总线-rpc.Ashmem | unmapAshmem(): void | 新增 | - | +| 分布式软总线-rpc.Ashmem | getAshmemSize(): number | 新增 | - | +| 分布式软总线-rpc.Ashmem | mapAshmem(mapType: number): boolean | 新增 | - | +| 分布式软总线-rpc.Ashmem | mapReadAndWriteAshmem(): boolean | 新增 | - | +| 分布式软总线-rpc.Ashmem | mapReadOnlyAshmem(): boolean | 新增 | - | +| 分布式软总线-rpc.Ashmem | setProtection(protectionType: number): boolean | 新增 | - | +| 分布式软总线-rpc.Ashmem | writeToAshmem(buf: number[], size: number, offset: number): boolean | 新增 | - | +| 分布式软总线-rpc.Ashmem | readFromAshmem(size: number, offset: number): number[] | 新增 | - | +| 分布式软总线-rpc.IRemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean | 废弃 | 替换为异步接口,使用返回Promise或者回调的接口 | +| 分布式软总线-rpc.IRemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise | 新增 | - | +| 分布式软总线-rpc.IRemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback): void | 新增 | - | +| 分布式软总线-rpc.RemoteProxy | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean | 废弃 | 替换为异步接口,使用返回Promise或者回调的接口 | +| 分布式软总线-rpc.RemoteProxy | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise | 新增 | - | +| 分布式软总线-rpc.RemoteProxy | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback): void | 新增 | - | +| 分布式软总线-rpc.RemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean | 废弃 | 替换为异步接口,使用返回Promise或者回调的接口 | +| 分布式软总线-rpc.RemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise | 新增 | - | +| 分布式软总线-rpc.RemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback): void | 新增 | - | +| 分布式软总线-rpc.IRemoteObject | PING_TRANSACTION | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.IRemoteObject | DUMP_TRANSACTION | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.IRemoteObject | INTERFACE_TRANSACTION | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.IRemoteObject | MIN_TRANSACTION_ID | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.IRemoteObject | MAX_TRANSACTION_ID | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.Sequenceable | hasFileDescriptor(): boolean | 删除 | API 7可序列化对象定义的方法,rpc框架不会调用,不影响已有应用 | +| 分布式软总线-rpc.MessageOption | constructor(syncFlags?: number, waitTime = TF_WAIT_TIME) | 新增 | - | +| 分布式软总线-rpc.MessageOption | getFlags(): number | 新增 | - | +| 分布式软总线-rpc.MessageOption | setFlags(flags: number): void | 新增 | - | +| 分布式软总线-rpc.MessageOption | getWaitTime(): number | 新增 | - | +| 分布式软总线-rpc.MessageOption | setWaitTime(waitTime: number): void | 新增 | - | +| 分布式软总线-rpc.MessageOption | MAX_WAIT_TIME = 3000 | 删除 | API 7没有实现,不影响已有应用 | +| 分布式软总线-rpc.RemoteObject | constructor(descriptor: string) | 新增 | - | +| 分布式软总线-rpc.RemoteObject | queryLocalInterface(descriptor: string): IRemoteBroker | 修改 | API 7有误,返回类型更正为IRemoteBroker,不影响已有应用 | +| 分布式软总线-rpc.Proxy | PING_TRANSACTION | 新增 | - | +| 分布式软总线-rpc.Proxy | DUMP_TRANSACTION | 新增 | - | +| 分布式软总线-rpc.Proxy | INTERFACE_TRANSACTION | 新增 | - | +| 分布式软总线-rpc.Proxy | MIN_TRANSACTION_ID = 0x1 | 新增 | - | +| 分布式软总线-rpc.Proxy | MAX_TRANSACTION_ID = 0x00FFFFFF | 新增 | - | +| 分布式软总线-rpc.Proxy | queryLocalInterface(interface: string): IRemoteBroker | 修改 | API 7有误,返回类型更正为IRemoteBroker,不影响已有应用 | +| 分布式软总线-wifi | function getLinkedInfo(): Promise;
function getLinkedInfo(callback: AsyncCallback): void;| 新增 | - | +| 分布式软总线-wifi | function isConnected(): boolean;| 新增 | - | +| 分布式软总线-wifi | function getSupportedFeatures(): number;| 新增 | - | +| 分布式软总线-wifi | function isFeatureSupported(featureId: number): boolean;| 新增 | - | +| 分布式软总线-wifi | function getDeviceMacAddress(): string[];| 新增 | - | +| 分布式软总线-wifi | function getIpInfo(): IpInfo;| 新增 | - | +| 分布式软总线-wifi | function getCountryCode(): string;| 新增 | - | +| 分布式软总线-wifi | function reassociate(): boolean;| 新增 | - | +| 分布式软总线-wifi | function reconnect(): boolean;| 新增 | - | +| 分布式软总线-wifi | function getDeviceConfigs(): Array;| 新增 | - | +| 分布式软总线-wifi | function updateNetwork(config: WifiDeviceConfig): number;| 新增 | - | +| 分布式软总线-wifi | function disableNetwork(netId: number): boolean;| 新增 | - | +| 分布式软总线-wifi | function removeAllNetwork(): boolean;| 新增 | - | +| 分布式软总线-wifi | function removeDevice(id: number): boolean;| 新增 | - | +| 分布式软总线-wifi | function enableHotspot(): boolean;| 新增 | - | +| 分布式软总线-wifi | function disableHotspot(): boolean;| 新增 | - | +| 分布式软总线-wifi | function isHotspotActive(): boolean;| 新增 | - | +| 分布式软总线-wifi | function setHotspotConfig(config: HotspotConfig): boolean;| 新增 | - | +| 分布式软总线-wifi | function getHotspotConfig(): HotspotConfig;| 新增 | - | +| 分布式软总线-wifi | function getStations(): Array;| 新增 | - | +| 分布式软总线-wifi | function on(type: "wifiStateChange", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "wifiStateChange", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "wifiConnectionChange", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "wifiConnectionChange", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "wifiScanStateChange", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "wifiScanStateChange", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "wifiRssiChange", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "wifiRssiChange", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "hotspotStateChange", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "hotspotStateChange", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "hotspotStaJoin", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "hotspotStaJoin", callback?: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function on(type: "hotspotStaLeave", callback: Callback): void;| 新增 | - | +| 分布式软总线-wifi | function off(type: "hotspotStaLeave", callback?: Callback): void;| 新增 | - | +| 全球化-resourceManager | getRawFile(path: string, callback: AsyncCallback);
getRawFile(path: string): Promise;| 新增 | - | +| 全球化-Intl | RelativeTimeFormat.constructor(); | 新增 | 构造函数 | +| 全球化-Intl | RelativeTimeFormat.constructor(locale: string \| Array, options?: RelativeTimeFormatInputOptions); | 新增 | 构造函数 | +| 全球化-Intl | RelativeTimeFormat.format(value: number, unit: string): string; | 新增 | 相对时间格式化 | +| 全球化-Intl | RelativeTimeFormat.formatToParts(value: number, unit: string): Array; | 新增 | 相对时间格式化,结果分为多部份分别存储 | +| 全球化-Intl | RelativeTimeFormat.formatToParts(value: number, unit: string): Array; | 新增 | 相对时间格式化,结果分为多部份分别存储 | +| 全球化-Intl | PluralRules.constructor(); | 新增 | 构造函数 | +| 全球化-Intl | PluralRules.constructor(locale: string \| Array, options?: PluralRulesOptions); | 新增 | 构造函数 | +| 全球化-Intl | PluralRules.select(n: number): string; | 新增 | 计算一个数字的单复数类别 | +| 全球化-Intl | Collator.constructor(); | 新增 | 构造函数 | +| 全球化-Intl | Collator.constructor(locale: string \| Array, options?: CollatorOptions); | 新增 | 构造函数 | +| 全球化-Intl | Collator.compare(first: string, second: string): number; | 新增 | 比较两个字符串 | +| 全球化-Intl | Collator.resolvedOptions(): CollatorOptions; | 新增 | 获取排序对象相关属性 | +| 全球化-I18N | function unitConvert(fromUnit: UnitInfo, toUnit: UnitInfo, value: **number**, locale: **string**, style?: **string**): **string**; | 新增 | 新增转换单位接口 | +| 全球化-I18N | function **constructor**(country: **string**, options?: PhoneNumberFormatOptions);
function isValidNumber(**number**: **string**): boolean;
function format(**number**: **string**): **string**; | 新增 | 新增电话号码格式化接口 | +| 全球化-I18N | function setTime(date: Date);
function setTime(time: **number**);
function **set**(year: **number**, month: **number**, date:**number**, hour?: **number**, minute?: **number**, second?: **number**);
function setTimeZone(timezone: **string**);
function getTimeZone(): **string**;
function getFirstDayOfWeek(): **number**;
function setFirstDayOfWeek(value: **number**);
function getMinimalDaysInFirstWeek(): **number**;
function setMinimalDaysInFirstWeek(value: **number**);
function **get**(field: **string**): **number**;
function getDisplayName(locale: **string**): **string**;
function isWeekend(date?: Date): boolean;
function **export** **function** getCalendar(locale: **string**, **type**?: **string**): Calendar; | 新增 | 新增日历接口 | +| 全球化-I18N | **function** isRTL(locale: **string**): boolean; | 新增 | 判断区域语言是否是从右到左语言 | +| 全球化-I18N | **function** getLineInstance(locale: **string**): BreakIterator;
function current(): **number**;
function first(): **number**;
function last(): **number**;
function next(index?: **number**): **number**;
function previous(): **number**;
function setLineBreakText(text: **string**): **void**;
function following(offset: **number**): **number**;
function getLineBreakText(): **string**;
function isBoundary(offset: **number**): boolean; | 新增 | 新增断词换行接口 | +| 全球化-I18N | function getInstance(locale?:**string**): IndexUtil;
function getIndexList(): Array<**string**>; | 新增 | 新增获取字母表索引接口 | +| 全球化-I18N | function addLocale(locale: **string**);
function getIndex(text: **string**): **string**;
function isDigit(char: **string**): boolean;
function isSpaceChar(char: **string**): boolean;
function isWhitespace(char: **string**): boolean;
function isRTL(char: **string**): boolean;
function isIdeograph(char: **string**): boolean;
function isLetter(char: **string**): boolean;
function isLowerCase(char: **string**): boolean;
function isUpperCase(char: **string**): boolean;
function getType(char: **string**): **string**; | 新增 | 新增获取字符属性接口 | +| 事件通知-DoNotDisturbDate | type: notification.DoNotDisturbType | 新增 | 免打扰设置的时间类型 | +| 事件通知-DoNotDisturbDate | begin: Date | 新增 | 免打扰设置的起点时间 | +| 事件通知-DoNotDisturbDate | end: Date | 新增 | 免打扰设置的终点时间 | +| 事件通知-DoNotDisturbDate | export enum DoNotDisturbType {
TYPE_NONE = 0, // 非通知勿扰类型
TYPE_ONCE = 1, // 以设置时间段一次执行勿扰
TYPE_DAILY = 2, // 以设置时间段(只看小时和分钟)每天执行勿扰
TYPE_CLEARLY = 3, // 以设置时间段(明确年月日时分)执行勿扰
} | 新增 | 免打扰时间类型 | +| 事件通知-notification | function setDoNotDisturbDate(date DoNotDisturbDate, callback: AsyncCallback): void | 新增 | 设置免打扰时间接口 | +| 事件通知-notification | function setDoNotDisturbDate(date DoNotDisturbDate): Promise | 新增 | 设置免打扰时间接口 | +| 事件通知-notification | function getDoNotDisturbDate(callback: AsyncCallback): void | 新增 | 查询免打扰时间接口 | +| 事件通知-notification | function getDoNotDisturbDate(): Promise | 新增 | 查询免打扰时间接口 | +| 事件通知-notification | function supportDoNotDisturbMode(callback: AsyncCallback): void | 新增 | 是否支持勿扰模式功能 | +| 事件通知-notification | function supportDoNotDisturbMode(): Promise | 新增 | 是否支持勿扰模式功能 | +| 事件通知-notification | function cancelGroup(groupName: string, callback: AsyncCallback): void | 新增 | 取消本应用指定组通知 | +| 事件通知-notification | function cancelGroup(groupName: string): Promise | 新增 | 取消本应用指定组通知 | +| 事件通知-notification | function removeGroupByBundle(bundle: BundleOption, groupName: string, callback: AsyncCallback): void | 新增 | 删除指定应用指定组通知 | +| 事件通知-notification | function removeGroupByBundle(bundle: BundleOption, groupName: string): Promise | 新增 | 删除指定应用指定组通知 | +| 事件通知-NotificationSubscriber | onDoNotDisturbDateChange?:(mode: notification.DoNotDisturbDate) => void | 新增 | 免打扰设置信息变更后的通知给订阅者 | +| 事件通知-NotificationRequest | smallIcon?: image.PixelMap | 新增 | 小图标 | +| 事件通知-NotificationRequest | largeIcon?: image.PixelMap; | 新增 | 大图标 | +| 事件通知-NotificationRequest | groupName?: string; | 新增 | 通知分组名称 | +| 事件通知-NotificationUserInput | | 新增 | 用户输入对象 | +| 事件通知-NotificationUserInput | inputKey: string | 新增 | 用户输入时用于标识此输入的key | +| 事件通知-NotificationActionButton | userInput?: NotificationUserInput | 新增 | 用户输入对象实例 | +| 事件通知-emitter | function on(event: InnerEvent, callback: Callback): void | 新增 | 持续订阅某个事件以及接收事件的回调处理 | +| 事件通知-emitter | function once(event: InnerEvent, callback: Callback): void | 新增 | 单次订阅某个事件以及接收事件的回调处理,接收到回调处理后自动取消订阅 | +| 事件通知-emitter | function off(eventId: number): void | 新增 | 取消订阅某个事件 | +| 事件通知-emitter | function emit(event: InnerEvent, data?: EventData): void | 新增 | 发送一个事件到事件队列 | +| 分布式文件-statfs | function getFreeBytes(path: string, callback: AsyncCallback): void | 新增 | 以callback形式异步获取设备剩余空间,单位为字节 | +| 分布式文件-statfs | function getFreeBytes(path: string): Promise | 新增 | 以promise形式异步获取设备剩余空间,单位为字节 | +| 分布式文件-statfs | function getTotalBytes(path: string, callback: AsyncCallback): void | 新增 | 以callback形式异步获取设备总空间,单位为字节 | +| 分布式文件-statfs | function getTotalBytes(path: string): Promise | 新增 | 以promise形式异步获取设备总空间,单位为字节 | +| 分布式任务调度-featureAbility | function continueAbility(options: ContinueAbilityOptions, callback: AsyncCallback): void;
function continueAbility(options: ContinueAbilityOptions): Promise; | 新增 | - | +| 语言编译运行时-URI | constructor(uri: string); | 新增 | | +| 语言编译运行时-URI | toString(): string | 新增 | | +| 语言编译运行时-URI | equals(other: URI): boolean; | 新增 | | +| 语言编译运行时-URI | checkIsAbsolute(): boolean; | 新增 | | +| 语言编译运行时-URI | normalize(): URI; | 新增 | | +| 语言编译运行时-URI | scheme: string; | 新增 | | +| 语言编译运行时-URI | userinfo: string; | 新增 | | +| 语言编译运行时-URI | host: string; | 新增 | | +| 语言编译运行时-URI | port: string; | 新增 | | +| 语言编译运行时-URI | path: string; | 新增 | | +| 语言编译运行时-URI | query: string; | 新增 | | +| 语言编译运行时-URI | query: string; | 新增 | | +| 语言编译运行时-URI | authority: string; | 新增 | | +| 语言编译运行时-URI | ssp: string; | 新增 | | +| 语言编译运行时-RationalNumber | constructor(numerator: number, denominator: number); | 新增 | | +| 语言编译运行时-RationalNumber | static createRationalFromString(rationalString: string): RationalNumber; | 新增 | | +| 语言编译运行时-RationalNumber | compareTo(another :RationalNumber): number; | 新增 | | +| 语言编译运行时-RationalNumber | equals(obj: Object): boolean; | 新增 | | +| 语言编译运行时-RationalNumber | valueOf(): number; | 新增 | | +| 语言编译运行时-RationalNumber | static getCommonDivisor(number1: number, number2: number): number; | 新增 | | +| 语言编译运行时-RationalNumber | getDenominator(): number; | 新增 | | +| 语言编译运行时-RationalNumber | getNumerator(): number; | 新增 | | +| 语言编译运行时-RationalNumber | isFinite() : boolean; | 新增 | | +| 语言编译运行时-RationalNumber | isNaN(): boolean; | 新增 | | +| 语言编译运行时-RationalNumber | isZero(): boolean; | 新增 | | +| 语言编译运行时-RationalNumber | toString(): string; | 新增 | | +| 语言编译运行时-LruBuffer | constructor(capacity?:number); | 新增 | | +| 语言编译运行时-LruBuffer | updateCapacity(newCapacity: number):void | 新增 | | +| 语言编译运行时-LruBuffer | toString():string | 新增 | | +| 语言编译运行时-LruBuffer | length:number | 新增 | | +| 语言编译运行时-LruBuffer | getCapacity(): number; | 新增 | | +| 语言编译运行时-LruBuffer | clear(): void; | 新增 | | +| 语言编译运行时-LruBuffer | getCreateCount(): number; | 新增 | | +| 语言编译运行时-LruBuffer | getMissCount(): number; | 新增 | | +| 语言编译运行时-LruBuffer | getRemovalCount(): number; | 新增 | | +| 语言编译运行时-LruBuffer | getMatchCount(): number; | 新增 | | +| 语言编译运行时-LruBuffer | getPutCount(): number; | 新增 | | +| 语言编译运行时-LruBuffer | isEmpty(): boolean; | 新增 | | +| 语言编译运行时-LruBuffer | get(key: K): V \| undefined; | 新增 | | +| 语言编译运行时-LruBuffer | put(key: K, value: V): V; | 新增 | | +| 语言编译运行时-LruBuffer | values(): V[]; | 新增 | | +| 语言编译运行时-LruBuffer | keys(): K[]; | 新增 | | +| 语言编译运行时-LruBuffer | remove(key: K): V \| undefined; | 新增 | | +| 语言编译运行时-LruBuffer | afterRemoval(isEvict: boolean, key: K, value: V, newValue: V): void; | 新增 | | +| 语言编译运行时-LruBuffer | contains(key: K): boolean; | 新增 | | +| 语言编译运行时-LruBuffer | createDefault(key: K): V; | 新增 | | +| 语言编译运行时-LruBuffer | entries(): IterableIterator<[K, V]>; | 新增 | | +| 语言编译运行时-LruBuffer | [Symbol.iterator](): IterableIterator<[K, V]>; | 新增 | | +| 语言编译运行时-Scope | constructor(lowerObj: ScopeType, upperObj: ScopeType); | 新增 | | +| 语言编译运行时-Scope | toString(): string; | 新增 | | +| 语言编译运行时-Scope | intersect(range: Scope): Scope; | 新增 | | +| 语言编译运行时-Scope | intersect(lowerObj: ScopeType, upperObj: ScopeType): Scope; | 新增 | | +| 语言编译运行时-Scope | getUpper(): ScopeType; | 新增 | | +| 语言编译运行时-Scope | getLower(): ScopeType; | 新增 | | +| 语言编译运行时-Scope | expand(lowerObj: ScopeType, upperObj: ScopeType): Scope; | 新增 | | +| 语言编译运行时-Scope | expand(range: Scope): Scope; | 新增 | | +| 语言编译运行时-Scope | expand(value: ScopeType): Scope; | 新增 | | +| 语言编译运行时-Scope | contains(value: ScopeType): boolean; | 新增 | | +| 语言编译运行时-Scope | contains(range: Scope): boolean; | 新增 | | +| 语言编译运行时-Scope | clamp(value: ScopeType): ScopeType; | 新增 | | +| 语言编译运行时-Base64 | constructor(); | 新增 | | +| 语言编译运行时-Base64 | encodeSync(src: Uint8Array): Uint8Array; | 新增 | | +| 语言编译运行时-Base64 | encodeToStringSync(src: Uint8Array): string; | 新增 | | +| 语言编译运行时-Base64 | decodeSync(src: Uint8Array \| string): Uint8Array; | 新增 | | +| 语言编译运行时-Base64 | encode(src: Uint8Array): Promise; | 新增 | | +| 语言编译运行时-Base64 | encodeToString(src: Uint8Array): Promise; | 新增 | | +| 语言编译运行时-Base64 | decode(src: Uint8Array \| string): Promise; | 新增 | | +| 语言编译运行时-types | constructor(); | 新增 | | +| 语言编译运行时-types | isAnyArrayBuffer(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isArrayBufferView(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isArgumentsObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isArrayBuffer(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isAsyncFunction(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isBigInt64Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isBigUint64Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isBooleanObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isBoxedPrimitive(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isDataView(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isDate(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isExternal(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isFloat32Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isFloat64Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isGeneratorFunction(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isGeneratorObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isInt8Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isInt16Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isInt32Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isMap(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isMapIterator(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isModuleNamespaceObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isNativeError(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isNumberObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isPromise(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isProxy(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isRegExp(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isSet(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isSetIterator(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isSharedArrayBuffer(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isStringObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isSymbolObject(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isTypedArray(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isUint8Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isUint8ClampedArray(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isUint16Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isUint32Array(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isWeakMap(value: Object): boolean; | 新增 | | +| 语言编译运行时-types | isWeakSet(value: Object): boolean; | 新增 | | +| 语言编译运行时-process | const tid: number; | 新增 | | +| 语言编译运行时-process | function isIsolatedProcess(): boolean; | 新增 | | +| 语言编译运行时-process | function isAppUid(v: number): boolean; | 新增 | | +| 语言编译运行时-process | function is64Bit(): boolean; | 新增 | | +| 语言编译运行时-process | function getUidForName(v: string): number; | 新增 | | +| 语言编译运行时-process | function getThreadPriority(v: number): number; | 新增 | | +| 语言编译运行时-process | function getStartRealtime(): number; | 新增 | | +| 语言编译运行时-process | function getAvailableCores(): number[]; | 新增 | | +| 语言编译运行时-process | function getPastCpuTime(): number; | 新增 | | +| 语言编译运行时-process | function getSystemConfig(name: number): number; | 新增 | | +| 语言编译运行时-process | function getEnvironmentVar(name: string): string; | 新增 | | +| 语言编译运行时-ConvertOptions | trim: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreDeclaration?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreInstruction?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreAttributes?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreComment?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreCdata?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreDoctype?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | ignoreText?: boolean; | 新增 | | +| 语言编译运行时-ConvertOptions | declarationKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | instructionKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | attributesKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | textKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | cdataKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | doctypeKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | commentKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | parentKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | typeKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | nameKey: string; | 新增 | | +| 语言编译运行时-ConvertOptions | elementsKey: string; | 新增 | | +| 语言编译运行时-ConvertXML | convert(xml: string, options?: ConvertOptions) : Object; | 新增 | | +| 语言编译运行时-XmlSerializer | constructor(buffer: ArrayBuffer \| DataView, encoding?: string); | 新增 | | +| 语言编译运行时-XmlSerializer | setAttributes(name: string, value: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | addEmptyElement(name: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setDeclaration(): void; | 新增 | | +| 语言编译运行时-XmlSerializer | startElement(name: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | endElement(): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setNamespace(prefix: string, namespace: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setCommnet(text: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setCData(text: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setText(text: string): void; | 新增 | | +| 语言编译运行时-XmlSerializer | setDocType(text: string): void; | 新增 | | +| 语言编译运行时-ParseOptions | supportDoctype?: boolean; | 新增 | | +| 语言编译运行时-ParseOptions | ignoreNameSpace?: boolean; | 新增 | | +| 语言编译运行时-ParseOptions | tagValueCallbackFunction?: (name: string, value: string) => boolean; | 新增 | | +| 语言编译运行时-ParseOptions | attributeValueCallbackFunction?: (name: string, value: string) => boolean; | 新增 | | +| 语言编译运行时-ParseOptions | tokenValueCallbackFunction?: (eventType: EventType, value: ParseInfo) => boolean; | 新增 | | +| 帐号-account.appAccount | createAppAccountManager | 新增 | 获取实例 | +| 帐号-account.appAccount | addAccount(name: string, callback: AsyncCallback): void;
addAccount(name: string, extraInfo: string, callback: AsyncCallback): void;
addAccount(name: string, extraInfo?: string): Promise; | 新增 | 添加应用帐户 | +| 帐号-account.appAccount | deleteAccount(name: string, callback: AsyncCallback): void;
deleteAccount(name: string): Promise; | 新增 | 删除应用帐户 | +| 帐号-account.appAccount | disableAppAccess(name: string, bundleName: string, callback: AsyncCallback): void;
disableAppAccess(name: string, bundleName: string): Promise; | 新增 | 使指定的package拒绝访问给定的应用帐号 | +| 帐号-account.appAccount | enableAppAccess(name: string, bundleName: string, callback: AsyncCallback): void;
enableAppAccess(name: string, bundleName: string): Promise; | 新增 | 使指定的package允许访问给定的应用帐号 | +| 帐号-account.appAccount | checkAppAccountSyncEnable(name: string, callback: AsyncCallback): void;
checkAppAccountSyncEnable(name: string): Promise; | 新增 | 检查指定的应用帐号是否允许应用程序同步数据 | +| 帐号-account.appAccount | setAccountCredential(name: string, credentialType: string, credential: string,
callback: AsyncCallback): void;
setAccountCredential(name: string, credentialType: string, credential: string): Promise; | 新增 | 设置指定应用程序帐号的认证凭据 | +| 帐号-account.appAccount | setAccountExtraInfo(name: string, extraInfo: string, callback: AsyncCallback): void;
setAccountExtraInfo(name: string, extraInfo: string): Promise; | 新增 | 设置指定应用帐号的附加信息 | +| 帐号-account.appAccount | setAppAccountSyncEnable(name: string, isEnable: boolean, callback: AsyncCallback): void;
setAppAccountSyncEnable(name: string, isEnable: boolean): Promise; | 新增 | 设置指定的应用程序帐号是否允许应用程序同步数据 | +| 帐号-account.appAccount | setAssociatedData(name: string, key: string, value: string, callback: AsyncCallback): void;
setAssociatedData(name: string, key: string, value: string): Promise; | 新增 | 设置应用帐号关联信息 | +| 帐号-account.appAccount | getAllAccessibleAccounts(callback: AsyncCallback>): void;
getAllAccessibleAccounts(): Promise>; | 新增 | 获取本应用帐号信息和已授权给本应用的第三方应用帐号的信息 | +| 帐号-account.appAccount | getAllAccounts(owner: string, callback: AsyncCallback>): void;
getAllAccounts(owner: string): Promise>; | 新增 | 获取执行应用下全部帐号信息 | +| 帐号-account.appAccount | getAccountCredential(name: string, credentialType: string, callback: AsyncCallback): void;
getAccountCredential(name: string, credentialType: string): Promise; | 新增 | 获取指定应用程序帐号的认证凭据 | +| 帐号-account.appAccount | getAccountExtraInfo(name: string, callback: AsyncCallback): void;
getAccountExtraInfo(name: string): Promise; | 新增 | 获取应用帐号附加信息 | +| 帐号-account.appAccount | getAssociatedData(name: string, key: string, callback: AsyncCallback): void;
getAssociatedData(name: string, key: string): Promise; | 新增 | 获取应用帐号关联信息 | +| 帐号-account.appAccount| on(type: 'change', owners: Array, callback: Callback>): void; | 新增 | 订阅指定应用帐号的更改事件 | +| 帐号-account.appAccount | off(type: 'change', callback?: Callback): void; | 新增 | 取消订阅应用帐号的更改事件 | +| 帐号-account.appAccount | interface AppAccountInfo | 新增 | 应用帐号信息 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback,options?: Options): void | 新增 | 监听加速度传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback, options?: Options): void | 新增 | 监听线性加速度传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback, options?: Options): void | 新增 | 监听未校准加速度计传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback,options?: Options): void | 新增 | 监听重力传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback, options?: Options): void | 新增 | 监听陀螺仪传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback, options?: Options): void | 新增 | 监听未校准陀螺仪传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback, options?: Options): void | 新增 | 监听大幅动作传感器数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback, options?: Options): void | 新增 | 监听计步检测传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback, options?: Options): void | 新增 | 监听计步传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback, options?: Options): void | 新增 | 监听环境温度传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback,options?: Options): void | 新增 | 监听磁场传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback, options: Options): void | 新增 | 监听未校准磁场传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback,options?: Options): void | 新增 | 监听接近光传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback,options?: Options): void | 新增 | 监听湿度传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback,options?: Options): void | 新增 | 监听气压计传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback, options?: Options): void | 新增 | 监听霍尔传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback, options?: Options): void | 新增 | 监听环境光传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback, options?: Options): void | 新增 | 监听方向传感器的数据变化 | +| 泛Sensor服务-sensor | on(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback,options?: Options): void | 新增 | 监听旋转矢量传感器的数据变化 | +| 泛Sensor服务-sensor | on(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback,options?: Options): void | 新增 | 监听佩戴检测传感器的数据变化 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback): void | 新增 | 监听加速度传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback): void | 新增 | 监听线性加速度传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback): void | 新增 | 监听未校准加速度计传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback): void | 新增 | 监听重力传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback): void | 新增 | 监听陀螺仪传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback, options?: Options): void | 新增 | 监听未校准陀螺仪传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback): void | 新增 | 监听大幅动作传感器数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback): void | 新增 | 监听计步检测传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback): void | 新增 | 监听计步传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback): void | 新增 | 监听环境温度传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback): void | 新增 | 监听磁场传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback): void | 新增 | 监听未校准磁场传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback): void | 新增 | 监听接近光传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback): void | 新增 | 监听湿度传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback): void | 新增 | 监听气压计传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback): void | 新增 | 监听霍尔传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback): void | 新增 | 监听环境光传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback): void | 新增 | 监听方向传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback): void | 新增 | 监听旋转矢量传感器的数据变化一次 | +| 泛Sensor服务-sensor | once(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback): void | 新增 | 监听佩戴检测传感器的数据变化一次 | +| 泛Sensor服务-sensor | off(type: SensorType, callback?: AsyncCallback): void | 新增 | 取消订阅传感器数据 | +| 泛Sensor服务-sensor | getGeomagneticField(locationOptions: LocationOptions, timeMillis: number, callback: AsyncCallback): void
getGeomagneticField(locationOptions: LocationOptions, timeMillis: number): Promise | 新增 | 获取地球上特定位置的地磁场 | +| 泛Sensor服务-vibrator | vibrate(duration: number): Promise
vibrate(duration: number, callback?: AsyncCallback): void | 新增 | 按照指定持续时间触发马达振动 | +| 泛Sensor服务-vibrator | vibrate(effectId: EffectId): Promise
vibrate(effectId: EffectId, callback?: AsyncCallback): void | 新增 | 按照指定振动效果触发马达振动 | +| 泛Sensor服务-vibrator | stop(stopMode: VibratorStopMode): Promise
stop(stopMode: VibratorStopMode, callback?: AsyncCallback): void | 新增 | 停止马达振动 | diff --git a/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/native-apidiff-v3.1-beta.md b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/native-apidiff-v3.1-beta.md new file mode 100644 index 0000000000000000000000000000000000000000..b535bfbe486d4365ba15cd22cf013d6da9f7ca25 --- /dev/null +++ b/website/docs/_posts/zh-cn/release-notes/api-change/v3.1-beta/native-apidiff-v3.1-beta.md @@ -0,0 +1,29 @@ +--- +title: native-apidiff-v3.1-beta +permalink: /pages/extra/e3a527/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# Native API 差异报告 + +OpenHarmony 3.1 Beta相较于OpenHarmony 3.0 LTS版本的API变更如下: + +## 标准系统接口变更 + +| 模块名称 | 接口名称 | 变更类型 | 变更说明 | +| ------------------ | ------------------------------------------------------------ | -------- | ------------------------------------------------- | +| bundle | napi_value ClearBundleCache(napi_env env, napi_callback_info info) | 新增 | 新增清理应用缓存接口 | +| bundle | napi_value SetApplicationEnabled(napi_env env, napi_callback_info info) | 新增 | 新增设置应用使能接口 | +| bundle | napi_value SetAbilityEnabled(napi_env env, napi_callback_info info) | 新增 | 新增设置ability使能接口 | +| innerbundlemanager | napi_value JSGetLauncherAbilityInfos(napi_env env, napi_callback_info info) | 新增 | 新增通过包名获取应用LauncherAbility接口 | +| innerbundlemanager | napi_value JSLauncherServiceOn(napi_env env, napi_callback_info info) | 新增 | 新增注册监听包状态变化接口 | +| innerbundlemanager | napi_value JSLauncherServiceOff(napi_env env, napi_callback_info info) | 新增 | 新增注销监听包状态变化接口 | +| innerbundlemanager | napi_value JSGetAllLauncherAbilityInfos(napi_env env, napi_callback_info info) | 新增 | 新增通过userId获取所有launcher上应用的ability接口 | +| innerbundlemanager | napi_value JSGetShortcutInfos(napi_env env, napi_callback_info info) | 新增 | 新增通过bundleName获取应用的shortcutInfo接口 | \ No newline at end of file diff --git a/website/docs/_posts/zh-cn/resources/external-resources.md b/website/docs/_posts/zh-cn/resources/external-resources.md new file mode 100644 index 0000000000000000000000000000000000000000..39efae49053e56e49772900fb2e793ff41c455ee --- /dev/null +++ b/website/docs/_posts/zh-cn/resources/external-resources.md @@ -0,0 +1,30 @@ +--- +title: external-resources +permalink: /pages/extra/606f5d/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:57 +--- +# 社区资源推荐--持续更新中 + +本专刊旨在为您提供OpenHarmony学习资源、知识内容园地,帮助您快速学习。小编在这里汇聚了许多来自社区及开发者的精选资源,希望能把优质的内容分享给每一位热爱技术的你。 + +您可以通过行业大咖、资深开发者的分享与实践,高效学习相关知识。 +您也可以通过技术专家们的官方解读,了解相关设计理念、技术架构、关键能力,让您的产品拥有更好的体验。 +我们也将持续更新本专刊,为您提供最新资源。 + +当您学习某课程或功能时,功能可能会发生变化,请参考官方文档获取最新信息。 + +**备注**: + +此专刊内容来自于OpenHarmony/HarmonyOS合作社区、生态伙伴,汇聚广受开发者喜爱的网络课程等资源。 + +如需转载,请标注课程的来源、链接,课程讲师等基本信息。 +如涉及版权问题,请联系我们,经核实后会尽快予以处理。 + diff --git a/website/docs/_posts/zh-cn/website-directory.md b/website/docs/_posts/zh-cn/website-directory.md new file mode 100644 index 0000000000000000000000000000000000000000..e74cee708cf7764966adfe01289a30b80ea9d684 --- /dev/null +++ b/website/docs/_posts/zh-cn/website-directory.md @@ -0,0 +1,1980 @@ +--- +title: website-directory +permalink: /pages/extra/c082bb/ +navbar: true +sidebar: false +prev: false +next: false +search: true +article: true +comment: false +editLink: false +date: 2022-02-12 09:01:58 +--- +# OpenHarmony + +——>——> 了解OpenHarmony + + + +——>——>——> 了解OpenHarmony系统 + +——>——>——>——>[内核子系统](/pages/01010201) + +——>——>——>——>[驱动子系统](/pages/01010202) + +——>——>——>——>[方舟运行时子系统](/pages/01010203) + +——>——>——>——>[DFX子系统](/pages/01010204) + +——>——>——>——>[JS-UI框架子系统](/pages/01010205) + +——>——>——>——>[Misc软件服务子系统](/pages/01010206) + +——>——>——>——>[XTS子系统](/pages/01010207) + +——>——>——>——>[事件通知子系统](/pages/01010208) + +——>——>——>——>[元能力子系统](/pages/01010209) + +——>——>——>——>[全球化子系统](/pages/0101020a) + +——>——>——>——>[公共基础库](/pages/0101020b) + +——>——>——>——>[分布式任务调度子系统](/pages/0101020c) + +——>——>——>——>[分布式数据管理子系统](/pages/0101020d) + +——>——>——>——>[分布式文件子系统](/pages/0101020e) + +——>——>——>——>[分布式软总线子系统](/pages/0101020f) + +——>——>——>——>[升级子系统](/pages/01010210) + +——>——>——>——>[启动恢复子系统](/pages/01010211) + +——>——>——>——>[图形子系统](/pages/01010212) + +——>——>——>——>[多模输入子系统](/pages/01010213) + +——>——>——>——>[媒体子系统](/pages/01010214) + +——>——>——>——>[安全子系统](/pages/01010215) + +——>——>——>——>[帐号子系统](/pages/01010216) + +——>——>——>——>[泛Sensor子系统](/pages/01010217) + +——>——>——>——>[测试子系统](/pages/01010218) + +——>——>——>——>[用户程序框架子系统](/pages/01010219) + +——>——>——>——>[电源管理子系统](/pages/0101021a) + +——>——>——>——>[电话服务子系统](/pages/0101021b) + +——>——>——>——>[研发工具链子系统](/pages/0101021c) + +——>——>——>——>[系统应用](/pages/0101021d) + +——>——>——>——>[编译构建子系统](/pages/0101021e) + +——>——>——>——>[语言运行时子系统](/pages/0101021f) + +——>——>——>——>[AI业务子系统](/pages/01010220) + +——>——>——> [术语](/pages/010103) + +——>——>——> [版本说明](/pages/010104) + +——>——> 快速开始 + +——>——>——>[轻量和小型系统入门](/pages/extra/997538/) + +——>——>——>——>[轻量与小型系统入门概述](/pages/01020101) + +——>——>——>——>[搭建轻量与小型系统环境](/pages/extra/9bd424/) + +——>——>——>——>——>[搭建系统环境概述](/pages/0102010201) + +——>——>——>——>——>[开发环境准备](/pages/0102010202) + +——>——>——>——>——>[获取源码](/pages/0102010203) + +——>——>——>——>——>[使用安装包方式搭建编译环境](/pages/0102010204) + +——>——>——>——>——>[使用Docker方式搭建编译环境](/pages/0102010205) + +——>——>——>——>——>[常见问题](/pages/0102010206) + +——>——>——>——>[运行“Hello World”](/pages/extra/27b8ca/) + +——>——>——>——>——>[Hi3861开发板](/pages/extra/3fad23/) + +——>——>——>——>——>——>[安装开发板环境](/pages/010201030101) + +——>——>——>——>——>——>[新建应用程序](/pages/010201030102) + +——>——>——>——>——>——>[编译](/pages/010201030103) + +——>——>——>——>——>——>[烧录](/pages/010201030104) + +——>——>——>——>——>——>[调试验证](/pages/010201030105) + +——>——>——>——>——>——>[运行](/pages/010201030106) + +——>——>——>——>——>——>[常见问题](/pages/010201030107) + +——>——>——>——>——>[Hi3516开发板](/pages/extra/67487a/) + +——>——>——>——>——>——>[安装开发板环境](/pages/010201030201) + +——>——>——>——>——>——>[新建应用程序](/pages/010201030202) + +——>——>——>——>——>——>[编译](/pages/010201030203) + +——>——>——>——>——>——>[烧录](/pages/010201030204) + +——>——>——>——>——>——>[运行](/pages/010201030205) + +——>——>——>——>——>——>[常见问题](/pages/010201030206) + +——>——>——>——>——>[Hi3518开发板](/pages/extra/259012/) + +——>——>——>——>——>——>[安装开发板环境](/pages/010201030301) + +——>——>——>——>——>——>[新建应用程序](/pages/010201030302) + +——>——>——>——>——>——>[编译](/pages/010201030303) + +——>——>——>——>——>——>[烧录](/pages/010201030304) + +——>——>——>——>——>——>[运行](/pages/010201030305) + +——>——>——>——>——>——>[常见问题](/pages/010201030306) + +——>——>——>——>[附录](/pages/extra/50fff7/) + +——>——>——>——>——>[Hi3861开发板介绍](/pages/0102010401) + +——>——>——>——>——>[Hi3516开发板介绍](/pages/0102010402) + +——>——>——>——>——>[Hi3518开发板介绍](/pages/0102010403) + +——>——>——>[标准系统入门](/pages/extra/cdd62a/) + +——>——>——>——>[标准系统入门简介](/pages/01020201) + +——>——>——>——>[标准系统开发环境准备(仅Hi3516需要)](/pages/01020202) + +——>——>——>——>[获取源码](/pages/01020203) + +——>——>——>——>[运行“Hello World”](/pages/extra/d76d1d/) + +——>——>——>——>——>[Hi3516开发板](/pages/extra/c741c1/) + +——>——>——>——>——>——>[创建应用程序](/pages/010202040101) + +——>——>——>——>——>——>[编译](/pages/010202040102) + +——>——>——>——>——>——>[烧录](/pages/010202040103) + +——>——>——>——>——>——>[运行](/pages/010202040104) + +——>——>——>——>——>[RK3568开发板](/pages/extra/c62d01/) + +——>——>——>——>——>——>[创建应用程序](/pages/010202040201) + +——>——>——>——>——>——>[编译](/pages/010202040202) + +——>——>——>——>——>——>[烧录](/pages/010202040203) + +——>——>——>——>——>——>[运行](/pages/010202040204) + +——>——>——>——>[常见问题](/pages/01020205) + +——>——>——>——>[附录](/pages/extra/1de02d/) + +——>——>——>——>——>[Hi3516开发板介绍](/pages/0102020601) + +——>——>——>——>——>[RK3568开发板介绍](/pages/0102020602) + +——>——> 兼容性与安全 + +——>——>——> [隐私与安全规范](/pages/extra/cd1c35/) + +——>——>——>——> [隐私保护](/pages/01030101) + +——>——>——>——> [安全指南](/pages/01030102) + +——>——> 移植 + +——>——>——>[轻量系统芯片移植指导](/pages/extra/8d1893/) + +——>——>——>——>[移植准备](/pages/extra/f8d4b1/) + +——>——>——>——>——>[移植须知](/pages/0104010101) + +——>——>——>——>——>[编译构建适配流程](/pages/0104010102) + +——>——>——>——>[内核移植](/pages/extra/71893e/) + +——>——>——>——>——>[移植概述](/pages/0104010201) + +——>——>——>——>——>[内核基础适配](/pages/0104010202) + +——>——>——>——>——>[内核移植验证](/pages/0104010203) + +——>——>——>——>[板级系统移植](/pages/extra/716a3b/) + +——>——>——>——>——>[移植概述](/pages/0104010301) + +——>——>——>——>——>[板级驱动适配](/pages/0104010302) + +——>——>——>——>——>[HAL层实现](/pages/0104010303) + +——>——>——>——>——>[系统组件调用](/pages/0104010304) + +——>——>——>——>——>[lwIP组件适配](/pages/0104010305) + +——>——>——>——>——>[三方组件适配](/pages/0104010306) + +——>——>——>——>——>[XTS认证](/pages/0104010307) + +——>——>——>——>[常见问题](/pages/01040104) + +——>——>——>[小型系统芯片移植指导](/pages/extra/e6da35/) + +——>——>——>——>[移植准备](/pages/extra/e8757d/) + +——>——>——>——>——>[移植须知](/pages/0104020101) + +——>——>——>——>——>[编译构建](/pages/0104020102) + +——>——>——>——>[移植内核](/pages/extra/c5ccdb/) + +——>——>——>——>——>[LiteOS-A内核](/pages/0104020201) + +——>——>——>——>——>[Linux内核](/pages/0104020202) + +——>——>——>——>[驱动移植](/pages/extra/22f30e/) + +——>——>——>——>——>[移植概述](/pages/0104020301) + +——>——>——>——>——>[平台驱动移植](/pages/0104020302) + +——>——>——>——>——>[器件驱动移植](/pages/0104020303) + +——>——>——>[标准系统芯片移植指导](/pages/01040301) + +——>——>——>——>[标准系统移植指南](/pages/01040301) + +——>——>——>——>[一种快速移植OpenHarmony Linux内核的方法](/pages/01040302) + +——>——>——>[轻量和小型系统三方库移植指导](/pages/extra/261e32/) + +——>——>——>——>[概述](/pages/01040401) + +——>——>——>——>[CMake方式组织编译的库移植](/pages/01040402) + +——>——>——>——>[Makefile方式组织编译的库移植](/pages/01040403) + +——>——>——>[轻量系统芯片移植案例](/pages/extra/3213c7/) + +——>——>——>——>[带屏解决方案之恒玄芯片移植案例](/pages/01040501) + +——>——> 子系统开发 + +——>——>——> [内核](/pages/extra/278468/) + +——>——>——>——> [轻量系统内核](/pages/extra/04851a/) + +——>——>——>——>——> [内核概述](/pages/0105010101) + +——>——>——>——>——> [基础内核](/pages/extra/49ddf7/) + +——>——>——>——>——>——> [中断管理](/pages/extra/55418d/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101020101) + +——>——>——>——>——>——>——> [开发指导](/pages/01050101020102) + +——>——>——>——>——>——> [任务管理](/pages/extra/3ac755/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101020201) + +——>——>——>——>——>——>——> [开发指导](/pages/01050101020202) + +——>——>——>——>——>——> [内存管理](/pages/extra/646278/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101020301) + +——>——>——>——>——>——>——> [静态内存](/pages/01050101020302) + +——>——>——>——>——>——>——> [动态内存](/pages/01050101020303) + +——>——>——>——>——>——> [内核通信机制](/pages/extra/cf6bfe/) + +——>——>——>——>——>——>——> [事件](/pages/extra/a08696/) + +——>——>——>——>——>——>——>——> [基本概念](/pages/0105010102040101) + +——>——>——>——>——>——>——>——> [开发指导](/pages/0105010102040102) + +——>——>——>——>——>——>——> [互斥锁](/pages/extra/bd9d14/) + +——>——>——>——>——>——>——>——> [基本概念](/pages/0105010102040201) + +——>——>——>——>——>——>——>——> [开发指导](/pages/0105010102040202) + +——>——>——>——>——>——>——> [消息队列](/pages/extra/48afc6/) + +——>——>——>——>——>——>——>——> [基本概念](/pages/0105010102040301) + +——>——>——>——>——>——>——>——> [开发指导](/pages/0105010102040302) + +——>——>——>——>——>——>——> [信号量](/pages/extra/439acc/) + +——>——>——>——>——>——>——>——> [基本概念](/pages/0105010102040401) + +——>——>——>——>——>——>——>——> [开发指导](/pages/0105010102040402) + +——>——>——>——>——>——> [时间管理](/pages/extra/5441a5/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101020501) + +——>——>——>——>——>——>——> [开发指导](/pages/01050101020502) + +——>——>——>——>——>——> [软件定时器](/pages/extra/4076da/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101020601) + +——>——>——>——>——>——>——> [开发指导](/pages/01050101020602) + +——>——>——>——>——> [扩展组件](/pages/extra/778d59/) + +——>——>——>——>——>——> [C++支持](/pages/010501010301) + +——>——>——>——>——>——> [CPU占用率](/pages/extra/ea4925/) + +——>——>——>——>——>——>——> [基本概念](/pages/01050101030201) + +——>——>——>——>——>——>——> [开发指导](/pages/01050101030202) + +——>——>——>——>——>——> [文件系统](/pages/extra/4e32ae/) + +——>——>——>——>——>——>——> [FAT](/pages/01050101030301) + +——>——>——>——>——>——>——> [LittleFS](/pages/extra/8f380b/) + +——>——>——>——>——>——>——>——> [基本概念](/pages/0105010103030201) + +——>——>——>——>——>——>——>——> [开发指导](/pages/0105010103030202) + +——>——>——>——>——> [内核调测](/pages/extra/60468d/) + +——>——>——>——>——>——> [内存调测](/pages/extra/6b3bb3/) + +——>——>——>——>——>——>——> [内存信息统计](/pages/01050101040101) + +——>——>——>——>——>——>——> [内存泄漏检测](/pages/01050101040102) + +——>——>——>——>——>——>——> [踩内存检测](/pages/01050101040103) + +——>——>——>——>——>——> [异常调测](/pages/010501010402) + +——>——>——>——>——>——> [Trace调测](/pages/010501010403) + +——>——>——>——>——>——> [LMS调测](/pages/010501010404) + +——>——>——>——>——> [附录](/pages/extra/c608fb/) + +——>——>——>——>——>——> [内核编码规范](/pages/010501010501) + +——>——>——>——>——>——> [基本数据结构](/pages/extra/a40545/) + +——>——>——>——>——>——>——> [双向链表](/pages/01050101050201) + +——>——>——>——>——>——> [标准库支持](/pages/extra/308d92/) + +——>——>——>——>——>——>——> [CMSIS支持](/pages/01050101050301) + +——>——>——>——>——>——>——> [POSIX支持](/pages/01050101050302) + +——>——>——>——> [小型系统内核](/pages/extra/6f0c9d/) + +——>——>——>——>——> [内核概述](/pages/0105010201) + +——>——>——>——>——> [内核启动](/pages/extra/be815f/) + +——>——>——>——>——>——> [内核态启动](/pages/010501020201) + +——>——>——>——>——>——> [用户态启动](/pages/010501020202) + +——>——>——>——>——> [基础内核](/pages/extra/78e086/) + +——>——>——>——>——>——> [中断及异常处理](/pages/010501020301) + +——>——>——>——>——>——> [进程管理](/pages/extra/a55987/) + +——>——>——>——>——>——>——> [进程](/pages/01050102030201) + +——>——>——>——>——>——>——> [任务](/pages/01050102030202) + +——>——>——>——>——>——>——> [调度器](/pages/01050102030203) + +——>——>——>——>——>——> [内存管理](/pages/extra/31b7d6/) + +——>——>——>——>——>——>——> [堆内存管理](/pages/01050102030301) + +——>——>——>——>——>——>——> [物理内存管理](/pages/01050102030302) + +——>——>——>——>——>——>——> [虚拟内存管理](/pages/01050102030303) + +——>——>——>——>——>——>——> [虚实映射](/pages/01050102030304) + +——>——>——>——>——>——> [内核通信机制](/pages/extra/a5b198/) + +——>——>——>——>——>——>——> [事件](/pages/01050102030401) + +——>——>——>——>——>——>——> [信号量](/pages/01050102030402) + +——>——>——>——>——>——>——> [互斥锁](/pages/01050102030403) + +——>——>——>——>——>——>——> [消息队列](/pages/01050102030404) + +——>——>——>——>——>——>——> [读写锁](/pages/01050102030405) + +——>——>——>——>——>——>——> [用户态快速互斥锁](/pages/01050102030406) + +——>——>——>——>——>——>——> [信号](/pages/01050102030407) + +——>——>——>——>——>——> [时间管理](/pages/010501020305) + +——>——>——>——>——>——> [软件定时器](/pages/010501020306) + +——>——>——>——>——>——> [原子操作](/pages/010501020307) + +——>——>——>——>——> [扩展组件](/pages/extra/3ced1c/) + +——>——>——>——>——>——> [系统调用](/pages/010501020401) + +——>——>——>——>——>——> [动态加载与链接](/pages/010501020402) + +——>——>——>——>——>——> [虚拟动态共享库](/pages/010501020403) + +——>——>——>——>——>——> [轻量级进程间通信](/pages/010501020404) + +——>——>——>——>——>——> [文件系统](/pages/extra/9370c0/) + +——>——>——>——>——>——>——> [虚拟文件系统](/pages/01050102040501) + +——>——>——>——>——>——>——> [支持的文件系统](/pages/extra/201cc2/) + +——>——>——>——>——>——>——>——> [FAT](/pages/0105010204050201) + +——>——>——>——>——>——>——>——> [JFFS2](/pages/0105010204050202) + +——>——>——>——>——>——>——>——> [NFS](/pages/0105010204050203) + +——>——>——>——>——>——>——>——> [Ramfs](/pages/0105010204050204) + +——>——>——>——>——>——>——>——> [Procfs](/pages/0105010204050205) + +——>——>——>——>——>——>——> [适配新的文件系统](/pages/01050102040503) + +——>——>——>——>——> [调测与工具](/pages/extra/1dfc6d/) + +——>——>——>——>——>——> [Shell](/pages/extra/13c256/) + +——>——>——>——>——>——>——> [Shell介绍](/pages/01050102050101) + +——>——>——>——>——>——>——> [Shell命令开发指导](/pages/01050102050102) + +——>——>——>——>——>——>——> [Shell命令编程实例](/pages/01050102050103) + +——>——>——>——>——>——>——> [Shell命令使用详解](/pages/extra/5e0b1c/) + +——>——>——>——>——>——>——>——> [系统命令](/pages/extra/7b8fef/) + +——>——>——>——>——>——>——>——>——> [cpup](/pages/010501020501040101) + +——>——>——>——>——>——>——>——>——> [date](/pages/010501020501040102) + +——>——>——>——>——>——>——>——>——> [dmesg](/pages/010501020501040103) + +——>——>——>——>——>——>——>——>——> [exec](/pages/010501020501040104) + +——>——>——>——>——>——>——>——>——> [free](/pages/010501020501040105) + +——>——>——>——>——>——>——>——>——> [help](/pages/010501020501040106) + +——>——>——>——>——>——>——>——>——> [hwi](/pages/010501020501040107) + +——>——>——>——>——>——>——>——>——> [kill](/pages/010501020501040108) + +——>——>——>——>——>——>——>——>——> [log](/pages/010501020501040109) + +——>——>——>——>——>——>——>——>——> [memcheck](/pages/01050102050104010a) + +——>——>——>——>——>——>——>——>——> [oom](/pages/01050102050104010b) + +——>——>——>——>——>——>——>——>——> [pmm](/pages/01050102050104010c) + +——>——>——>——>——>——>——>——>——> [reset](/pages/01050102050104010d) + +——>——>——>——>——>——>——>——>——> [sem](/pages/01050102050104010e) + +——>——>——>——>——>——>——>——>——> [stack](/pages/01050102050104010f) + +——>——>——>——>——>——>——>——>——> [su](/pages/010501020501040110) + +——>——>——>——>——>——>——>——>——> [swtmr](/pages/010501020501040111) + +——>——>——>——>——>——>——>——>——> [systeminfo](/pages/010501020501040112) + +——>——>——>——>——>——>——>——>——> [task](/pages/010501020501040113) + +——>——>——>——>——>——>——>——>——> [uname](/pages/010501020501040114) + +——>——>——>——>——>——>——>——>——> [vmm](/pages/010501020501040115) + +——>——>——>——>——>——>——>——>——> [watch](/pages/010501020501040116) + +——>——>——>——>——>——>——>——>——>[reboot](/pages/010501020501040117) + +——>——>——>——>——>——>——>——>——>[top](/pages/010501020501040118) + +——>——>——>——>——>——>——>——> [文件命令](/pages/extra/bcb45b/) + +——>——>——>——>——>——>——>——>——> [cat](/pages/010501020501040201) + +——>——>——>——>——>——>——>——>——> [cd](/pages/010501020501040202) + +——>——>——>——>——>——>——>——>——> [chgrp](/pages/010501020501040203) + +——>——>——>——>——>——>——>——>——> [chmod](/pages/010501020501040204) + +——>——>——>——>——>——>——>——>——> [chown](/pages/010501020501040205) + +——>——>——>——>——>——>——>——>——> [cp](/pages/010501020501040206) + +——>——>——>——>——>——>——>——>——> [format](/pages/010501020501040207) + +——>——>——>——>——>——>——>——>——> [ls](/pages/010501020501040208) + +——>——>——>——>——>——>——>——>——> [lsfd](/pages/010501020501040209) + +——>——>——>——>——>——>——>——>——> [mkdir](/pages/01050102050104020a) + +——>——>——>——>——>——>——>——>——> [mount](/pages/01050102050104020b) + +——>——>——>——>——>——>——>——>——> [partinfo](/pages/01050102050104020c) + +——>——>——>——>——>——>——>——>——> [partition](/pages/01050102050104020d) + +——>——>——>——>——>——>——>——>——> [pwd](/pages/01050102050104020e) + +——>——>——>——>——>——>——>——>——> [rm](/pages/01050102050104020f) + +——>——>——>——>——>——>——>——>——> [rmdir](/pages/010501020501040210) + +——>——>——>——>——>——>——>——>——> [statfs](/pages/010501020501040211) + +——>——>——>——>——>——>——>——>——> [sync](/pages/010501020501040212) + +——>——>——>——>——>——>——>——>——> [touch](/pages/010501020501040213) + +——>——>——>——>——>——>——>——>——> [writeproc](/pages/010501020501040214) + +——>——>——>——>——>——>——>——>——> [umount](/pages/010501020501040215) + +——>——>——>——>——>——>——>——>——>[du](/pages/010501020501040216) + +——>——>——>——>——>——>——>——>——>[mv](/pages/010501020501040217) + +——>——>——>——>——>——>——>——> [网络命令](/pages/extra/0d76b1/) + +——>——>——>——>——>——>——>——>——> [arp](/pages/010501020501040301) + +——>——>——>——>——>——>——>——>——> [dhclient](/pages/010501020501040302) + +——>——>——>——>——>——>——>——>——> [ifconfig](/pages/010501020501040303) + +——>——>——>——>——>——>——>——>——> [ipdebug](/pages/010501020501040304) + +——>——>——>——>——>——>——>——>——> [netstat](/pages/010501020501040305) + +——>——>——>——>——>——>——>——>——> [ntpdate](/pages/010501020501040306) + +——>——>——>——>——>——>——>——>——> [ping](/pages/010501020501040307) + +——>——>——>——>——>——>——>——>——> [ping6](/pages/010501020501040308) + +——>——>——>——>——>——>——>——>——> [telnet](/pages/010501020501040309) + +——>——>——>——>——>——>——>——>——> [tftp](/pages/01050102050104030a) + +——>——>——>——>——>——>——> [魔法键使用方法](/pages/01050102050105) + +——>——>——>——>——>——>——> [用户态异常信息说明](/pages/01050102050106) + +——>——>——>——>——>——> [Trace](/pages/010501020502) + +——>——>——>——>——>——>[Perf调测](/pages/010501020503) + +——>——>——>——>——>——>[LMS调测](/pages/010501020504) + +——>——>——>——>——>——> [进程调测](/pages/extra/dcf14b/) + +——>——>——>——>——>——>——> [CPU占用率](/pages/01050102050501) + +——>——>——>——>——>——> [内存调测](/pages/extra/c42b85/) + +——>——>——>——>——>——>——> [内存信息统计](/pages/01050102050601) + +——>——>——>——>——>——>——> [内存泄漏检测](/pages/01050102050602) + +——>——>——>——>——>——>——> [踩内存检测](/pages/01050102050603) + +——>——>——>——>——>——>[用户态内存调测](/pages/extra/ac4dfa/) + +——>——>——>——>——>——>——>[基本概念](/pages/01050102050701) + +——>——>——>——>——>——>——>[运行机制](/pages/01050102050702) + +——>——>——>——>——>——>——>[使用指导](/pages/extra/a3bd12/) + +——>——>——>——>——>——>——>——>[接口说明](/pages/0105010205070301) + +——>——>——>——>——>——>——>——>[使用说明](/pages/extra/a06366/) + +——>——>——>——>——>——>——>——>——>[接口调用方式](/pages/010501020507030201) + +——>——>——>——>——>——>——>——>——>[命令行参数方式](/pages/010501020507030202) + +——>——>——>——>——>——>——>[常见问题场景](/pages/01050102050704) + +——>——>——>——>——>——> [其他内核调测手段](/pages/extra/356413/) + +——>——>——>——>——>——>——> [临终遗言](/pages/01050102050801) + +——>——>——>——>——>——>——> [常见问题定位方法](/pages/01050102050802) + +——>——>——>——>——> [附录](/pages/extra/7ef543/) + +——>——>——>——>——>——> [基本数据结构](/pages/extra/661027/) + +——>——>——>——>——>——>——> [双向链表](/pages/01050102060101) + +——>——>——>——>——>——>——> [位操作](/pages/01050102060102) + +——>——>——>——>——>——> [标准库](/pages/010501020602) + +——>——>——>——> [标准系统内核](/pages/extra/34d397/) + +——>——>——>——>——> [Linux内核概述](/pages/0105010301) + +——>——>——>——>——> [OpenHarmony开发板Patch使用指导](/pages/0105010302) + +——>——>——>——>——> [Linux内核编译与构建指导](/pages/0105010303) + +——>——>——> [驱动](/pages/extra/bf4d26/) + +——>——>——>——>[HDF驱动框架](/pages/extra/ad639e/) + +——>——>——>——>——>[HDF开发概述](/pages/0105020101) + +——>——>——>——>——>[驱动开发](/pages/0105020102) + +——>——>——>——>——>[驱动服务管理](/pages/0105020103) + +——>——>——>——>——>[驱动消息机制管理](/pages/0105020104) + +——>——>——>——>——>[配置管理](/pages/0105020105) + +——>——>——>——>——>[HDF开发实例](/pages/0105020106) + +——>——>——>——>[平台驱动开发](/pages/extra/c7b224/) + +——>——>——>——>——>[ADC](/pages/0105020201) + +——>——>——>——>——>[GPIO](/pages/0105020202) + +——>——>——>——>——>[HDMI](/pages/0105020203) + +——>——>——>——>——>[I2C](/pages/0105020204) + +——>——>——>——>——>[I3C](/pages/0105020205) + +——>——>——>——>——>[MIPI-CSI](/pages/0105020206) + +——>——>——>——>——>[MIPI-DSI](/pages/0105020207) + +——>——>——>——>——>[MMC](/pages/0105020208) + +——>——>——>——>——>[PWM](/pages/0105020209) + +——>——>——>——>——>[RTC](/pages/010502020a) + +——>——>——>——>——>[SDIO](/pages/010502020b) + +——>——>——>——>——>[SPI](/pages/010502020c) + +——>——>——>——>——>[UART](/pages/010502020d) + +——>——>——>——>——>[WatchDog](/pages/010502020e) + +——>——>——>——>[平台驱动使用](/pages/extra/924b53/) + +——>——>——>——>——>[ADC](/pages/0105020301) + +——>——>——>——>——>[GPIO](/pages/0105020302) + +——>——>——>——>——>[HDMI](/pages/0105020303) + +——>——>——>——>——>[I2C](/pages/0105020304) + +——>——>——>——>——>[I3C](/pages/0105020305) + +——>——>——>——>——>[MIPI-CSI](/pages/0105020306) + +——>——>——>——>——>[MIPI-DSI](/pages/0105020307) + +——>——>——>——>——>[PWM](/pages/0105020308) + +——>——>——>——>——>[RTC](/pages/0105020309) + +——>——>——>——>——>[SDIO](/pages/010502030a) + +——>——>——>——>——>[SPI](/pages/010502030b) + +——>——>——>——>——>[UART](/pages/010502030c) + +——>——>——>——>——>[WATCHDOG](/pages/010502030d) + +——>——>——>——>[外设驱动使用](/pages/extra/5201ae/) + +——>——>——>——>——>[LCD](/pages/0105020401) + +——>——>——>——>——>[TOUCHSCREEN](/pages/0105020402) + +——>——>——>——>——>[SENSOR](/pages/0105020403) + +——>——>——>——>——>[WLAN](/pages/0105020404) + +——>——>——>——>——>[AUDIO](/pages/0105020405) + +——>——>——>——>——>[USB](/pages/0105020406) + +——>——>——>——>——>[CAMERA](/pages/0105020407) + +——>——>——> [编译构建](/pages/extra/8e49b3/) + +——>——>——>——> [轻量和小型系统编译构建指导](/pages/01050301) + +——>——>——>——> [标准系统编译构建指导](/pages/01050302) + +——>——>——>——>[构建系统编码规范和最佳实践指导](/pages/01050303) + +——>——>——> [分布式远程启动](/pages/010504) + +——>——>——> [图形图像](/pages/extra/9f8231/) + +——>——>——>——> [图形图像概述](/pages/01050501) + +——>——>——>——> [容器类组件开发指导](/pages/01050502) + +——>——>——>——> [布局容器类组件开发指导](/pages/01050503) + +——>——>——>——> [普通组件开发指导](/pages/01050504) + +——>——>——>——> [动画开发指导](/pages/01050505) + +——>——>——> [媒体](/pages/extra/b37923/) + +——>——>——>——> [相机](/pages/extra/45b3fc/) + +——>——>——>——>——> [相机开发概述](/pages/0105060101) + +——>——>——>——>——> [拍照开发指导](/pages/0105060102) + +——>——>——>——>——> [录像开发指导](/pages/0105060103) + +——>——>——>——>——> [预览开发指导](/pages/0105060104) + +——>——>——>——> [音视频](/pages/extra/b5d0b6/) + +——>——>——>——>——> [音视频开发概述](/pages/0105060201) + +——>——>——>——>——> [音视频播放开发指导](/pages/0105060202) + +——>——>——>——>——> [音视频录制开发指导](/pages/0105060203) + +——>——>——> [公共基础](/pages/extra/552ec9/) + +——>——>——>——> [公共基础库概述](/pages/01050701) + +——>——>——>——> [公共基础库开发指导](/pages/01050702) + +——>——>——>——> [公共基础库常见问题](/pages/01050703) + +——>——>——> [AI框架](/pages/extra/34bca9/) + +——>——>——>——> [概述](/pages/01050801) + +——>——>——>——> [搭建环境](/pages/01050802) + +——>——>——>——> [技术规范](/pages/extra/cf90b5/) + +——>——>——>——>——> [代码管理规范](/pages/0105080301) + +——>——>——>——>——> [命名规范](/pages/0105080302) + +——>——>——>——>——> [接口开发规范](/pages/0105080303) + +——>——>——>——> [开发指导](/pages/extra/e26ebd/) + +——>——>——>——>——> [SDK开发过程](/pages/0105080401) + +——>——>——>——>——> [插件的开发过程](/pages/0105080402) + +——>——>——>——>——> [配置文件的开发过程](/pages/0105080403) + +——>——>——>——> [开发示例](/pages/extra/041152/) + +——>——>——>——>——> [唤醒词识别SDK的开发示例](/pages/0105080501) + +——>——>——>——>——> [唤醒词识别插件的开发示例](/pages/0105080502) + +——>——>——>——>——> [唤醒词识别配置文件的开发示例](/pages/0105080503) + +——>——>——> [Sensor服务](/pages/extra/332140/) + +——>——>——>——> [Sensor服务子系概述](/pages/01050901) + +——>——>——>——> [Sensor服务子系使用指导](/pages/01050902) + +——>——>——>——> [Sensor服务子系使用实例](/pages/01050903) + +——>——>——> [用户程序框架](/pages/extra/84143e/) + +——>——>——>——> [概述](/pages/01050a01) + +——>——>——>——> [搭建环境](/pages/01050a02) + +——>——>——>——> [开发指导](/pages/01050a03) + +——>——>——>——> [开发实例](/pages/01050a04) + +——>——>——> [OTA升级](/pages/01050b) + +——>——>——>[电话服务](/pages/extra/be8b4d/) + +——>——>——>——>[电话服务概述](/pages/01050c01) + +——>——>——>——>[电话服务开发指导](/pages/01050c02) + +——>——>——> [安全](/pages/extra/0fa2da/) + +——>——>——>——> [概述](/pages/01050d01) + +——>——>——>——> [应用验签开发指导](/pages/01050d02) + +——>——>——>——> [应用权限管理开发指导](/pages/01050d03) + +——>——>——>——> [IPC通信鉴权开发指导](/pages/01050d04) + +——>——>——> [启动恢复](/pages/extra/de37b5/) + +——>——>——>——> [启动恢复子系统概述](/pages/01050e01) + +——>——>——>——> [init启动引导组件](/pages/01050e02) + +——>——>——>——> [appspawn应用孵化组件](/pages/01050e03) + +——>——>——>——> [bootstrap服务启动组件](/pages/01050e04) + +——>——>——>——> [syspara系统属性组件](/pages/01050e05) + +——>——>——>——> [常见问题](/pages/01050e06) + +——>——>——>——> [参考](/pages/01050e07) + +——>——>——> [DFX](/pages/extra/5878df/) + +——>——>——>——> [DFX概述](/pages/01051001) + +——>——>——>——> [HiLog开发指导](/pages/01051002) + +——>——>——>——> [HiLog\_Lite开发指导](/pages/01051003) + +——>——>——>——> [HiSysEvent开发指导](/pages/01050f04) + +——>——>——> [DFX](/pages/extra/5878df/) + +——>——>——>——>[DFX概述](/pages/01051001) + +——>——>——>——>[HiLog开发指导](/pages/01051002) + +——>——>——>——>[HiLog\_Lite开发指导](/pages/01051003) + +——>——>——>——>[HiTrace开发指导](/pages/01051004) + +——>——>——>——>[HiCollie开发指导](/pages/01051005) + +——>——>——>——>[HiSysEvent开发指导](/pages/01050f04) + +——>——>——>——>——>[HiSysEvent打点指导](/pages/0105100601) + +——>——>——>——>——>[HiSysEvent订阅指导](/pages/0105100602) + +——>——>——>——>——>[HiSysEvent查询指导](/pages/0105100603) + +——>——>——>——>——>[HiSysEvent工具使用指导](/pages/0105100604) + +——>——> 专题 + +——>——>——> [HPM bundle](/pages/extra/fcfa7e/) + +——>——>——>——> [HPM Bundle开发规范](/pages/01060101) + +——>——>——>——> [开发指南](/pages/extra/1fe808/) + +——>——>——>——>——> [HPM Bundle概述](/pages/0106010201) + +——>——>——>——>——> [安装hpm命令行工具](/pages/0106010202) + +——>——>——>——>——> [开发Bundle](/pages/0106010203) + +——>——>——>——> [开发示例](/pages/extra/00c0e4/) + +——>——>——>——>——> [HPM介绍](/pages/0106010301) + +——>——>——>——>——> [编译环境准备](/pages/0106010302) + +——>——>——>——>——> [操作实例](/pages/0106010303) + +——>——> 设备开发示例 + +——>——>——> [轻量和小型系统设备](/pages/extra/9ac06b/) + +——>——>——>——> [WLAN连接类产品](/pages/extra/feefcc/) + +——>——>——>——>——> [LED外设控制](/pages/0107010101) + +——>——>——>——>——> [集成三方SDK](/pages/0107010102) + +——>——>——>——> [无屏摄像头类产品](/pages/extra/470a3f/) + +——>——>——>——>——> [摄像头控制](/pages/extra/e55ff3/) + +——>——>——>——>——>——> [概述](/pages/010701020101) + +——>——>——>——>——>——> [示例开发](/pages/extra/056ede/) + +——>——>——>——>——>——>——> [拍照开发指导](/pages/01070102010201) + +——>——>——>——>——>——>——> [录像开发指导](/pages/01070102010202) + +——>——>——>——>——>——> [应用实例](/pages/010701020103) + +——>——>——>——> [带屏摄像头类产品](/pages/extra/238595/) + +——>——>——>——>——> [屏幕和摄像头控制](/pages/extra/556289/) + +——>——>——>——>——>——> [概述](/pages/010701030101) + +——>——>——>——>——>——> [示例开发](/pages/extra/6c47e8/) + +——>——>——>——>——>——>——> [拍照开发指导](/pages/01070103010201) + +——>——>——>——>——>——>——> [录像开发指导](/pages/01070103010202) + +——>——>——>——>——>——>——> [预览开发指导](/pages/01070103010203) + +——>——>——>——>——>——> [应用实例](/pages/010701030103) + +——>——>——>——>——> [视觉应用开发](/pages/extra/0304df/) + +——>——>——>——>——>——> [概述](/pages/010701030201) + +——>——>——>——>——>——> [开发准备](/pages/010701030202) + +——>——>——>——>——>——> [添加页面](/pages/010701030203) + +——>——>——>——>——>——> [开发首页](/pages/010701030204) + +——>——>——>——>——>——> [开发详情页](/pages/010701030205) + +——>——>——>——>——>——> [调试打包](/pages/010701030206) + +——>——>——>——>——>——> [真机运行](/pages/010701030207) + +——>——>——>——>——>——> [常见问题](/pages/010701030208) + +——>——>——> [标准系统设备](/pages/extra/8e2ca5/) + +——>——>——>——> [时钟应用开发指导](/pages/01070201) + +——>——>——>——> [平台驱动开发示例](/pages/01070202) + +——>——>——>——> [外设驱动开发示例](/pages/01070203) + +——>——> 应用开发 + +——>——>——> [应用开发快速入门](application-dev/quick-start) + +——>——>——>——> [开发准备](/pages/01080101) + +——>——>——>——> [使用JS语言开发](/pages/01080102) + +——>——>——>——> [使用eTS语言开发](/pages/01080103) + +——>——>——> 方舟开发框架(ArkUI) + +——>——>——>——> [方舟开发框架概述](/pages/01080201) + +——>——>——>——> 基于JS扩展的类Web开发范式 + +——>——>——>——>——> [概述](/pages/0108020201) + +——>——>——>——>——> 框架说明 + +——>——>——>——>——>——> [文件组织](/pages/010802020201) + +——>——>——>——>——>——> [js标签配置](/pages/010802020202) + +——>——>——>——>——>——> [app.js](/pages/010802020203) + +——>——>——>——>——>——> 语法 + +——>——>——>——>——>——>——> [HML语法参考](/pages/01080202020401) + +——>——>——>——>——>——>——> [CSS语法参考](/pages/01080202020402) + +——>——>——>——>——>——>——> [JS语法参考](/pages/01080202020403) + +——>——>——>——>——>——> [生命周期](/pages/010802020205) + +——>——>——>——>——>——> [资源限定与访问](/pages/010802020206) + +——>——>——>——>——>——> [多语言支持](/pages/010802020207) + +——>——>——>——>——> 构建用户界面 + +——>——>——>——>——>——> [组件介绍](/pages/010802020301) + +——>——>——>——>——>——> 构建布局 + +——>——>——>——>——>——>——> [布局说明](/pages/01080202030201) + +——>——>——>——>——>——>——> [添加标题行和文本区域](/pages/01080202030202) + +——>——>——>——>——>——>——> [添加图片区域](/pages/01080202030203) + +——>——>——>——>——>——>——> [添加留言区域](/pages/01080202030204) + +——>——>——>——>——>——>——> [添加容器](/pages/01080202030205) + +——>——>——>——>——>——> [添加交互](/pages/010802020303) + +——>——>——>——>——>——> [动画](/pages/010802020304) + +——>——>——>——>——>——> [事件](/pages/010802020305) + +——>——>——>——>——>——> [页面路由](/pages/010802020306) + +——>——>——>——>——> 常见组件开发指导 + +——>——>——>——>——>——> [Text](/pages/010802020401) + +——>——>——>——>——>——> [Input](/pages/010802020402) + +——>——>——>——>——>——> [Button](/pages/010802020403) + +——>——>——>——>——>——> [List](/pages/010802020404) + +——>——>——>——>——>——> [Picker](/pages/010802020405) + +——>——>——>——>——>——> [Dialog](/pages/010802020406) + +——>——>——>——>——>——> [Form](/pages/010802020407) + +——>——>——>——>——>——> [Stepper](/pages/010802020408) + +——>——>——>——>——>——> [Tabs](/pages/010802020409) + +——>——>——>——>——>——> [Image](/pages/01080202040a) + +——>——>——>——>——> 动效开发指导 + +——>——>——>——>——>——> CSS动画 + +——>——>——>——>——>——>——> [属性样式动画](/pages/01080202050101) + +——>——>——>——>——>——>——> [transform样式动画](/pages/01080202050102) + +——>——>——>——>——>——>——> [background-position样式动画](/pages/01080202050103) + +——>——>——>——>——>——> JS动画 + +——>——>——>——>——>——>——> [组件动画](/pages/01080202050201) + +——>——>——>——>——>——>——> 插值器动画 + +——>——>——>——>——>——>——>——> [动画动效](/pages/0108020205020201) + +——>——>——>——>——>——>——>——> [动画帧](/pages/0108020205020202) + +——>——>——>——>——> [自定义组件](/pages/0108020206) + +——>——>——>——> 基于TS扩展的声明式开发范式 + +——>——>——>——>——> [概述](/pages/0108020301) + +——>——>——>——>——> 框架说明 + +——>——>——>——>——>——> 文件组织 + +——>——>——>——>——>——>——> [目录结构](/pages/01080203020101) + +——>——>——>——>——>——>——> [应用代码文件访问规则](/pages/01080203020102) + +——>——>——>——>——>——> [js标签配置](/pages/010802030202) + +——>——>——>——>——>——> 资源访问 + +——>——>——>——>——>——>——> [媒体资源类型说明](/pages/01080203020301) + +——>——>——>——>——>——> [像素单位](/pages/010802030204) + +——>——>——>——>——>——> [类型定义](/pages/010802030205) + +——>——>——>——>——> 声明式语法 + +——>——>——>——>——>——> [描述规范使用说明](/pages/010802030301) + +——>——>——>——>——>——> 通用UI描述规范 + +——>——>——>——>——>——>——> [基本概念](/pages/01080203030201) + +——>——>——>——>——>——>——> 声明式UI描述规范 + +——>——>——>——>——>——>——>——> [无构造参数配置](/pages/0108020303020201) + +——>——>——>——>——>——>——>——> [必选参数构造配置](/pages/0108020303020202) + +——>——>——>——>——>——>——>——> [属性配置](/pages/0108020303020203) + +——>——>——>——>——>——>——>——> [事件配置](/pages/0108020303020204) + +——>——>——>——>——>——>——>——> [子组件配置](/pages/0108020303020205) + +——>——>——>——>——>——>——> 组件化 + +——>——>——>——>——>——>——>——> [@Component](/pages/0108020303020301) + +——>——>——>——>——>——>——>——> [@Entry](/pages/0108020303020302) + +——>——>——>——>——>——>——>——> [@Preview](/pages/0108020303020303) + +——>——>——>——>——>——>——>——> [@Builder](/pages/0108020303020304) + +——>——>——>——>——>——>——>——> [@Extend](/pages/0108020303020305) + +——>——>——>——>——>——>——>——> [@CustomDialog](/pages/0108020303020306) + +——>——>——>——>——>——> UI状态管理 + +——>——>——>——>——>——>——> [基本概念](/pages/01080203030301) + +——>——>——>——>——>——>——> 管理组件拥有的状态 + +——>——>——>——>——>——>——>——> [@State](/pages/0108020303030201) + +——>——>——>——>——>——>——>——> [@Prop](/pages/0108020303030202) + +——>——>——>——>——>——>——>——> [@Link](/pages/0108020303030203) + +——>——>——>——>——>——>——> 管理应用程序的状态 + +——>——>——>——>——>——>——>——> 接口 + +——>——>——>——>——>——>——>——>——> [应用程序的数据存储](/pages/010802030303030101) + +——>——>——>——>——>——>——>——>——> [持久化数据管理](/pages/010802030303030102) + +——>——>——>——>——>——>——>——>——> [环境变量](/pages/010802030303030103) + +——>——>——>——>——>——>——>——> [AppStorage与组件同步](/pages/0108020303030302) + +——>——>——>——>——>——>——> 其他类目的状态管理 + +——>——>——>——>——>——>——>——> [Observed和ObjectLink数据管理](/pages/0108020303030401) + +——>——>——>——>——>——>——>——> [@Consume和@Provide数据管理](/pages/0108020303030402) + +——>——>——>——>——>——>——>——> [@Watch](/pages/0108020303030403) + +——>——>——>——>——>——> 渲染控制语法 + +——>——>——>——>——>——>——> [条件渲染](/pages/01080203030401) + +——>——>——>——>——>——>——> [循环渲染](/pages/01080203030402) + +——>——>——>——>——>——>——> [数据懒加载](/pages/01080203030403) + +——>——>——>——>——>——> 深入理解组件化 + +——>——>——>——>——>——>——> [build函数](/pages/01080203030501) + +——>——>——>——>——>——>——> [自定义组件初始化](/pages/01080203030502) + +——>——>——>——>——>——>——> [自定义组件生命周期回调函数](/pages/01080203030503) + +——>——>——>——>——>——>——> [组件创建和重新初始化示例](/pages/01080203030504) + +——>——>——>——>——>——> 语法糖 + +——>——>——>——>——>——>——> [装饰器](/pages/01080203030601) + +——>——>——>——>——>——>——> [链式调用](/pages/01080203030602) + +——>——>——>——>——>——>——> [struct对象](/pages/01080203030603) + +——>——>——>——>——>——>——> [在实例化过程中省略"new"](/pages/01080203030604) + +——>——>——>——>——>——>——> [组件创建使用独立一行](/pages/01080203030605) + +——>——>——>——>——>——>——> [生成器函数内使用TS语言的限制](/pages/01080203030606) + +——>——>——>——>——> 体验声明式UI + +——>——>——>——>——>——> [创建声明式UI工程](/pages/010802030401) + +——>——>——>——>——>——> [初识Component](/pages/010802030402) + +——>——>——>——>——>——> [创建简单视图](/pages/010802030403) + +——>——>——>——>——> 页面布局与连接 + +——>——>——>——>——>——> [构建食物数据模型](/pages/010802030501) + +——>——>——>——>——>——> [构建食物列表List布局](/pages/010802030502) + +——>——>——>——>——>——> [构建食物分类Grid布局](/pages/010802030503) + +——>——>——>——>——>——> [页面跳转与数据传递](/pages/010802030504) + +——>——>——> 媒体 + +——>——>——>——> 音频 + +——>——>——>——>——> [音频开发概述](/pages/0108030101) + +——>——>——>——>——> [音频播放开发指导](/pages/0108030102) + +——>——>——>——>——> [音频管理开发指导](/pages/0108030103) + +——>——>——>——>——> [音频录制开发指导](/pages/0108030104) + +——>——>——> 用户认证 + +——>——>——>——> [用户认证开发概述](/pages/01080401) + +——>——>——>——> [用户认证开发指导](/pages/01080402) + +——>——>——> IPC与RPC通信 + +——>——>——>——> [IPC与RPC通信概述](/pages/01080501) + +——>——>——>——> [IPC与RPC通信开发指导](/pages/01080502) + +——>——>——>——> [远端状态订阅开发实例](/pages/01080503) + +——>——>——> 分布式数据服务 + +——>——>——>——> [分布式数据服务概述](/pages/01080601) + +——>——>——>——> [分布式数据服务开发指导](/pages/01080602) + +——>——>——> USB服务 + +——>——>——>——> [USB服务开发概述](/pages/01080701) + +——>——>——>——> [USB服务开发指导](/pages/01080702) + +——>——>——> DFX + +——>——>——>——> [应用事件打点概述](/pages/01080801) + +——>——>——>——> [应用事件开发指导](/pages/01080802) + +——>——>——> [DevEco Studio(OpenHarmony)使用指南](/pages/extra/9981e8/) + +——>——>——>——> [概述](/pages/01080901) + +——>——>——>——> [版本变更说明](/pages/01080902) + +——>——>——>——> [配置OpenHarmony SDK](/pages/01080903) + +——>——>——>——> [创建OpenHarmony工程](/pages/extra/31eb04/) + +——>——>——>——>——> [使用工程向导创建新工程](/pages/0108090401) + +——>——>——>——>——> [通过导入Sample方式创建新工程](/pages/0108090402) + +——>——>——>——> [配置OpenHarmony应用签名信息](/pages/01080905) + +——>——>——>——> [安装运行OpenHarmony应用](/pages/01080906) + +——>——> 调测 + +——>——>——> [测试用例开发](/pages/010901) + +——>——>——> [调测工具](/pages/extra/4754cf/) + +——>——>——>——> [bytrace使用指导](/pages/01090201) + +——>——>——>——> [hdc\_std 使用指导](/pages/01090202) + +——>——> XTS认证 + +——>——>——> [XTS认证用例开发指导](/pages/010a01) + +——>——> 工具 + +——>——>——> [Docker编译环境](/pages/010b01) + +——>——>——> [IDE集成开发环境](/pages/010b02) + +——>——> 参考 + +——>——>——> [JS API参考](/pages/extra/36fa82/) + +——>——>——>——> Ability框架 + +——>——>——>——>——> [FeatureAbility模块](/pages/010c010101) + +——>——>——>——>——> [ParticleAbility模块](/pages/010c010102) + +——>——>——>——>——> [DataAbilityHelper模块](/pages/010c010103) + +——>——>——>——>——> [DataUriUtils模块](/pages/010c010104) + +——>——>——>——>——> [Bundle模块](/pages/010c010105) + +——>——>——>——>——> [CommonEvent模块](/pages/010c010106) + +——>——>——>——>——> [Notification模块](/pages/010c010107) + +——>——>——>——>——> [Context模块](/pages/010c010108) + +——>——>——>——> 资源管理 + +——>——>——>——>——> [资源管理](/pages/010c010201) + +——>——>——>——>——> [国际化(I18n)](/pages/010c010202) + +——>——>——>——>——> [国际化(Intl)](/pages/010c010203) + +——>——>——>——> 媒体 + +——>——>——>——>——> [音频管理](/pages/010c010301) + +——>——>——>——>——> [媒体服务](/pages/010c010302) + +——>——>——>——> 安全 + +——>——>——>——>——> [用户认证](/pages/010c010401) + +——>——>——>——> 数据管理 + +——>——>——>——>——> [轻量级存储](/pages/010c010501) + +——>——>——>——>——> [分布式数据管理](/pages/010c010502) + +——>——>——>——>——> [关系型数据库](/pages/010c010503) + +——>——>——>——>——> [结果集](/pages/010c010504) + +——>——>——>——>——> [DataAbility 谓词](/pages/010c010505) + +——>——>——>——>——> [设置数据项名称](/pages/010c010506) + +——>——>——>——> 文件管理 + +——>——>——>——>——> [文件管理](/pages/010c010601) + +——>——>——>——>——> [Statfs管理](/pages/010c010602) + +——>——>——>——>——> [目录环境](/pages/010c010603) + +——>——>——>——> 账号管理 + +——>——>——>——>——> [分布式帐号管理](/pages/010c010701) + +——>——>——>——>——>[应用帐号管理](/pages/010c010702) + +——>——>——>——> 电话服务 + +——>——>——>——>——> [拨打电话](/pages/010c010801) + +——>——>——>——>——> [短信服务](/pages/010c010802) + +——>——>——>——>——> [SIM卡管理](/pages/010c010803) + +——>——>——>——>——> [网络搜索](/pages/010c010804) + +——>——>——>——> 网络与连接 + +——>——>——>——>——> [WLAN](/pages/010c010901) + +——>——>——>——> 设备管理 + +——>——>——>——>——> [传感器](/pages/010c010a01) + +——>——>——>——>——> [振动](/pages/010c010a02) + +——>——>——>——>——> [屏幕亮度](/pages/010c010a03) + +——>——>——>——>——> [电量信息](/pages/010c010a04) + +——>——>——>——>——> [系统电源管理](/pages/010c010a05) + +——>——>——>——>——> [Runninglock锁](/pages/010c010a06) + +——>——>——>——>——> [设备信息](/pages/010c010a07) + +——>——>——>——>——> [系统属性](/pages/010c010a08) + +——>——>——>——>——> [设备管理](/pages/010c010a09) + +——>——>——>——>——> [窗口](/pages/010c010a0a) + +——>——>——>——>——> [显示设备属性](/pages/010c010a0b) + +——>——>——>——>——> [升级](/pages/010c010a0c) + +——>——>——>——>——> [USB管理](/pages/010c010a0d) + +——>——>——>——> 基本功能 + +——>——>——>——>——> [应用上下文](/pages/010c010b01) + +——>——>——>——>——> [日志打印](/pages/010c010b02) + +——>——>——>——>——> [页面路由](/pages/010c010b03) + +——>——>——>——>——> [弹窗](/pages/010c010b04) + +——>——>——>——>——> [应用配置](/pages/010c010b05) + +——>——>——>——>——> [定时器](/pages/010c010b06) + +——>——>——>——>——> [设置系统时间](/pages/010c010b07) + +——>——>——>——>——> [动画](/pages/010c010b08) + +——>——>——>——>——> [应用打点](/pages/010c010b09) + +——>——>——>——>——> [性能打点](/pages/010c010b0a) + +——>——>——>——>——> [故障日志获取](/pages/010c010b0b) + +——>——>——>——> 语言基础类库 + +——>——>——>——>——> [获取进程相关的信息](/pages/010c010c01) + +——>——>——>——>——> [URL字符串解析](/pages/010c010c02) + +——>——>——>——>——> [URI字符串解析](/pages/010c010c03) + +——>——>——>——>——> [util工具函数](/pages/010c010c04) + +——>——>——>——>——> [xml解析与生成](/pages/010c010c05) + +——>——>——>——>——> [xml转换JavaScript](/pages/010c010c06) + +——>——>——>——>——> [启动一个worker](/pages/010c010c07) + +——>——>——> ArkUI组件参考 + +——>——>——>——> [基于JS扩展的类Web开发范式](/pages/extra/3d8851/) + +——>——>——>——>——> 组件 + +——>——>——>——>——>——> 通用 + +——>——>——>——>——>——>——> [通用属性](/pages/010c0201010101) + +——>——>——>——>——>——>——> [通用样式](/pages/010c0201010102) + +——>——>——>——>——>——>——> [通用事件](/pages/010c0201010103) + +——>——>——>——>——>——>——> [通用方法](/pages/010c0201010104) + +——>——>——>——>——>——>——> [动画样式](/pages/010c0201010105) + +——>——>——>——>——>——>——> [渐变样式](/pages/010c0201010106) + +——>——>——>——>——>——>——> [转场样式](/pages/010c0201010107) + +——>——>——>——>——>——>——> [媒体查询](/pages/010c0201010108) + +——>——>——>——>——>——>——> [自定义字体样式](/pages/010c0201010109) + +——>——>——>——>——>——>——> [原子布局](/pages/010c020101010a) + +——>——>——>——>——>——> 容器组件 + +——>——>——>——>——>——>——> [badge](/pages/010c0201010201) + +——>——>——>——>——>——>——> [dialog](/pages/010c0201010202) + +——>——>——>——>——>——>——> [div](/pages/010c0201010203) + +——>——>——>——>——>——>——> [form](/pages/010c0201010204) + +——>——>——>——>——>——>——> [list](/pages/010c0201010205) + +——>——>——>——>——>——>——> [list-item](/pages/010c0201010206) + +——>——>——>——>——>——>——> [list-item-group](/pages/010c0201010207) + +——>——>——>——>——>——>——> [panel](/pages/010c0201010208) + +——>——>——>——>——>——>——> [popup](/pages/010c0201010209) + +——>——>——>——>——>——>——> [refresh](/pages/010c020101020a) + +——>——>——>——>——>——>——> [stack](/pages/010c020101020b) + +——>——>——>——>——>——>——> [stepper](/pages/010c020101020c) + +——>——>——>——>——>——>——> [stepper-item](/pages/010c020101020d) + +——>——>——>——>——>——>——> [swiper](/pages/010c020101020e) + +——>——>——>——>——>——>——> [tabs](/pages/010c020101020f) + +——>——>——>——>——>——>——> [tab-bar](/pages/010c0201010210) + +——>——>——>——>——>——>——> [tab-content](/pages/010c0201010211) + +——>——>——>——>——>——> 基础组件 + +——>——>——>——>——>——>——> [button](/pages/010c0201010301) + +——>——>——>——>——>——>——> [chart](/pages/010c0201010302) + +——>——>——>——>——>——>——> [divider](/pages/010c0201010303) + +——>——>——>——>——>——>——> [image](/pages/010c0201010304) + +——>——>——>——>——>——>——> [image-animator](/pages/010c0201010305) + +——>——>——>——>——>——>——> [input](/pages/010c0201010306) + +——>——>——>——>——>——>——> [label](/pages/010c0201010307) + +——>——>——>——>——>——>——> [marquee](/pages/010c0201010308) + +——>——>——>——>——>——>——> [menu](/pages/010c0201010309) + +——>——>——>——>——>——>——> [option](/pages/010c020101030a) + +——>——>——>——>——>——>——> [picker](/pages/010c020101030b) + +——>——>——>——>——>——>——> [picker-view](/pages/010c020101030c) + +——>——>——>——>——>——>——> [piece](/pages/010c020101030d) + +——>——>——>——>——>——>——> [progress](/pages/010c020101030e) + +——>——>——>——>——>——>——> [qrcode](/pages/010c020101030f) + +——>——>——>——>——>——>——> [rating](/pages/010c0201010310) + +——>——>——>——>——>——>——> [richtext](/pages/010c0201010311) + +——>——>——>——>——>——>——> [search](/pages/010c0201010312) + +——>——>——>——>——>——>——> [select](/pages/010c0201010313) + +——>——>——>——>——>——>——> [slider](/pages/010c0201010314) + +——>——>——>——>——>——>——> [span](/pages/010c0201010315) + +——>——>——>——>——>——>——> [switch](/pages/010c0201010316) + +——>——>——>——>——>——>——> [text](/pages/010c0201010317) + +——>——>——>——>——>——>——> [textarea](/pages/010c0201010318) + +——>——>——>——>——>——>——> [toolbar](/pages/010c0201010319) + +——>——>——>——>——>——>——> [toolbar-item](/pages/010c020101031a) + +——>——>——>——>——>——>——> [toggle](/pages/010c020101031b) + +——>——>——>——>——>——> 媒体组件 + +——>——>——>——>——>——>——> [video](/pages/010c0201010401) + +——>——>——>——>——>——> 画布组件 + +——>——>——>——>——>——>——> [canvas组件](/pages/010c0201010501) + +——>——>——>——>——>——>——> [CanvasRenderingContext2D对象](/pages/010c0201010502) + +——>——>——>——>——>——>——> [Image对象](/pages/010c0201010503) + +——>——>——>——>——>——>——> [CanvasGradient对象](/pages/010c0201010504) + +——>——>——>——>——>——>——> [ImageData对象](/pages/010c0201010505) + +——>——>——>——>——>——>——> [Path2D对象](/pages/010c0201010506) + +——>——>——>——>——>——>——> [ImageBitmap对象](/pages/010c0201010507) + +——>——>——>——>——>——>——> [OffscreenCanvas对象](/pages/010c0201010508) + +——>——>——>——>——>——>——> [OffscreenCanvasRenderingContext2D对象](/pages/010c0201010509) + +——>——>——>——>——>——> 栅格组件 + +——>——>——>——>——>——>——> [基本概念](/pages/010c0201010601) + +——>——>——>——>——>——>——> [grid-container](/pages/010c0201010602) + +——>——>——>——>——>——>——> [grid-row](/pages/010c0201010603) + +——>——>——>——>——>——>——> [grid-col](/pages/010c0201010604) + +——>——>——>——>——>——> svg组件 + +——>——>——>——>——>——>——> [通用属性](/pages/010c0201010701) + +——>——>——>——>——>——>——> [svg](/pages/010c0201010702) + +——>——>——>——>——>——>——> [rect](/pages/010c0201010703) + +——>——>——>——>——>——>——> [circle](/pages/010c0201010704) + +——>——>——>——>——>——>——> [ellipse](/pages/010c0201010705) + +——>——>——>——>——>——>——> [path](/pages/010c0201010706) + +——>——>——>——>——>——>——> [line](/pages/010c0201010707) + +——>——>——>——>——>——>——> [polyline](/pages/010c0201010708) + +——>——>——>——>——>——>——> [polygon](/pages/010c0201010709) + +——>——>——>——>——>——>——> [text](/pages/010c020101070a) + +——>——>——>——>——>——>——> [tspan](/pages/010c020101070b) + +——>——>——>——>——>——>——> [textPath](/pages/010c020101070c) + +——>——>——>——>——>——>——> [animate](/pages/010c020101070d) + +——>——>——>——>——>——>——> [animateMotion](/pages/010c020101070e) + +——>——>——>——>——>——>——> [animateTransform](/pages/010c020101070f) + +——>——>——>——>——> 自定义组件 + +——>——>——>——>——>——> [基本用法](/pages/010c02010201) + +——>——>——>——>——>——> [自定义事件](/pages/010c02010202) + +——>——>——>——>——>——> [Props](/pages/010c02010203) + +——>——>——>——>——>——> [事件参数](/pages/010c02010204) + +——>——>——>——>——>——> [slot插槽](/pages/010c02010205) + +——>——>——>——>——>——> [生命周期定义](/pages/010c02010206) + +——>——>——>——>——> [附录](/pages/extra/c3d5f1/) + +——>——>——>——>——>——> [类型说明](/pages/010c02010301) + +——>——>——>——> [基于TS扩展的声明式开发范式](/pages/extra/e756d7/) + +——>——>——>——>——> 组件 + +——>——>——>——>——>——> 通用 + +——>——>——>——>——>——>——> [通用事件](/pages/extra/68fee7/) + +——>——>——>——>——>——>——>——> [点击事件](/pages/010c020201010101) + +——>——>——>——>——>——>——>——> [触摸事件](/pages/010c020201010102) + +——>——>——>——>——>——>——>——> [挂载卸载事件](/pages/010c020201010103) + +——>——>——>——>——>——>——>——> [按键事件](/pages/010c020201010104) + +——>——>——>——>——>——>——>——>[组件区域变化事件](/pages/010c020201010105) + +——>——>——>——>——>——>——> 通用属性 + +——>——>——>——>——>——>——>——> [尺寸设置](/pages/010c020201010201) + +——>——>——>——>——>——>——>——> [位置设置](/pages/010c020201010202) + +——>——>——>——>——>——>——>——> [布局约束](/pages/010c020201010203) + +——>——>——>——>——>——>——>——> [Flex布局](/pages/010c020201010204) + +——>——>——>——>——>——>——>——> [边框设置](/pages/010c020201010205) + +——>——>——>——>——>——>——>——> [背景设置](/pages/010c020201010206) + +——>——>——>——>——>——>——>——> [透明度设置](/pages/010c020201010207) + +——>——>——>——>——>——>——>——> [显隐控制](/pages/010c020201010208) + +——>——>——>——>——>——>——>——> [禁用控制](/pages/010c020201010209) + +——>——>——>——>——>——>——>——> [浮层](/pages/010c02020101020a) + +——>——>——>——>——>——>——>——> [Z序控制](/pages/010c02020101020b) + +——>——>——>——>——>——>——>——> [图形变换](/pages/010c02020101020c) + +——>——>——>——>——>——>——>——> [图像效果](/pages/010c02020101020d) + +——>——>——>——>——>——>——>——> [形状裁剪](/pages/010c02020101020e) + +——>——>——>——>——>——>——>——> [文本样式设置](/pages/010c02020101020f) + +——>——>——>——>——>——>——>——> [栅格设置](/pages/010c020201010210) + +——>——>——>——>——>——>——>——> [颜色渐变](/pages/010c020201010211) + +——>——>——>——>——>——>——>——> [Popup控制](/pages/010c020201010212) + +——>——>——>——>——>——>——>——> [Menu控制](/pages/010c020201010213) + +——>——>——>——>——>——>——>——>[点击控制](/pages/010c020201010214) + +——>——>——>——>——>——>——>——>[触摸热区设置](/pages/010c020201010215) + +——>——>——>——>——>——>——> 手势处理 + +——>——>——>——>——>——>——>——> [绑定手势方法](/pages/010c020201010301) + +——>——>——>——>——>——>——>——> 基础手势 + +——>——>——>——>——>——>——>——>——> [TapGesture](/pages/010c02020101030201) + +——>——>——>——>——>——>——>——>——> [LongPressGesture](/pages/010c02020101030202) + +——>——>——>——>——>——>——>——>——> [PanGesture](/pages/010c02020101030203) + +——>——>——>——>——>——>——>——>——> [PinchGesture](/pages/010c02020101030204) + +——>——>——>——>——>——>——>——>——> [RotationGesture](/pages/010c02020101030205) + +——>——>——>——>——>——>——>——>——> [SwipeGesture](/pages/010c02020101030206) + +——>——>——>——>——>——>——>——> [组合手势](/pages/010c020201010303) + +——>——>——>——>——>——> 基础组件 + +——>——>——>——>——>——>——> [Blank](/pages/010c0202010201) + +——>——>——>——>——>——>——> [Button](/pages/010c0202010202) + +——>——>——>——>——>——>——> [DataPanel](/pages/010c0202010203) + +——>——>——>——>——>——>——> [Divider](/pages/010c0202010204) + +——>——>——>——>——>——>——>[Gauge](/pages/010c0202010205) + +——>——>——>——>——>——>——> [Image](/pages/010c0202010206) + +——>——>——>——>——>——>——> [ImageAnimator](/pages/010c0202010207) + +——>——>——>——>——>——>——> [Progress](/pages/010c0202010208) + +——>——>——>——>——>——>——> [QRCode](/pages/010c0202010209) + +——>——>——>——>——>——>——> [Rating](/pages/010c020201020a) + +——>——>——>——>——>——>——> [Span](/pages/010c020201020b) + +——>——>——>——>——>——>——> [Slider](/pages/010c020201020c) + +——>——>——>——>——>——>——> [Text](/pages/010c020201020d) + +——>——>——>——>——>——>——> [TextArea](/pages/010c020201020e) + +——>——>——>——>——>——>——> [TextInput](/pages/010c020201020f) + +——>——>——>——>——>——>——> [Toggle](/pages/010c0202010210) + +——>——>——>——>——>——> 容器组件 + +——>——>——>——>——>——>——> [AlphabetIndexer](/pages/010c0202010301) + +——>——>——>——>——>——>——> [Badge](/pages/010c0202010302) + +——>——>——>——>——>——>——> [Column](/pages/010c0202010303) + +——>——>——>——>——>——>——> [ColumnSplit](/pages/010c0202010304) + +——>——>——>——>——>——>——> [Counter](/pages/010c0202010305) + +——>——>——>——>——>——>——> [Flex](/pages/010c0202010306) + +——>——>——>——>——>——>——> [GridContainer](/pages/010c0202010307) + +——>——>——>——>——>——>——> [Grid](/pages/010c0202010308) + +——>——>——>——>——>——>——> [GridItem](/pages/010c0202010309) + +——>——>——>——>——>——>——> [List](/pages/010c020201030a) + +——>——>——>——>——>——>——> [ListItem](/pages/010c020201030b) + +——>——>——>——>——>——>——> [Navigator](/pages/010c020201030c) + +——>——>——>——>——>——>——> [Navigation](/pages/010c020201030d) + +——>——>——>——>——>——>——> [Panel](/pages/010c020201030e) + +——>——>——>——>——>——>——> [Row](/pages/010c020201030f) + +——>——>——>——>——>——>——> [RowSplit](/pages/010c0202010310) + +——>——>——>——>——>——>——> [Scroll](/pages/010c0202010311) + +——>——>——>——>——>——>——> [ScrollBar](/pages/010c0202010312) + +——>——>——>——>——>——>——> [Stack](/pages/010c0202010313) + +——>——>——>——>——>——>——> [Swiper](/pages/010c0202010314) + +——>——>——>——>——>——>——> [Tabs](/pages/010c0202010315) + +——>——>——>——>——>——>——> [TabContent](/pages/010c0202010316) + +——>——>——>——>——>——>——> [Stepper](/pages/010c0202010317) + +——>——>——>——>——>——>——> [StepperItem](/pages/010c0202010318) + +——>——>——>——>——>——> 绘制组件 + +——>——>——>——>——>——>——> [Circle](/pages/010c0202010401) + +——>——>——>——>——>——>——> [Ellipse](/pages/010c0202010402) + +——>——>——>——>——>——>——> [Line](/pages/010c0202010403) + +——>——>——>——>——>——>——> [Polyline](/pages/010c0202010404) + +——>——>——>——>——>——>——> [Polygon](/pages/010c0202010405) + +——>——>——>——>——>——>——> [Path](/pages/010c0202010406) + +——>——>——>——>——>——>——> [Rect](/pages/010c0202010407) + +——>——>——>——>——>——>——> [Shape](/pages/010c0202010408)‘ + +——>——>——>——>——>——>画布组件 + +——>——>——>——>——>——>——>[Canvas](/pages/010c0202010501) + +——>——>——>——>——>——>——>[CanvasRenderingContext2D对象](/pages/010c0202010502) + +——>——>——>——>——>——>——>[OffscreenCanvasRenderingConxt2D对象](/pages/010c0202010503) + +——>——>——>——>——>——>——>[Lottie](/pages/010c0202010504) + +——>——>——>——>——>——>——>[Path2D对象](/pages/010c0202010505) + +——>——>——>——>——>——>——>[CanvasGradient对象](/pages/010c0202010506) + +——>——>——>——>——>——>——>[ImageBitmap对象](/pages/010c0202010507) + +——>——>——>——>——>——>——>[ImageData对象](/pages/010c0202010508) + +——>——>——>——>——> 动画 + +——>——>——>——>——>——> [属性动画](/pages/010c02020201) + +——>——>——>——>——>——> [显式动画](/pages/010c02020202) + +——>——>——>——>——>——> 转场动画 + +——>——>——>——>——>——>——> [页面间转场](/pages/010c0202020301) + +——>——>——>——>——>——>——> [组件内转场](/pages/010c0202020302) + +——>——>——>——>——>——>——> [共享元素转场](/pages/010c0202020303) + +——>——>——>——>——>——> [路径动画](/pages/010c02020204) + +——>——>——>——>——>——> [矩阵变换](/pages/010c02020205) + +——>——>——>——>——>——> [插值计算](/pages/010c02020206) + +——>——>——>——>——> 全局UI方法 + +——>——>——>——>——>——> [警告弹窗](/pages/010c02020301) + +——>——>——>——>——>——> [自定义弹窗](/pages/010c02020302) + +——>——>——>——>——>——> [图片缓存](/pages/010c02020303) + +——>——>——>——>——>——> [媒体查询](/pages/010c02020304) + +——>——>——>——>——> 附录 + +——>——>——>——>——>——> [文档中涉及到的内置枚举值](/pages/010c02020401) + +——>——>——>[应用开发包结构说明](/pages/010c03) + +——>——>——> 常见问题-设备开发 + +——>——>——>——>[常见问题概述](/pages/010c0401) + +——>——>——>——>[环境搭建常见问题](/pages/010c0402) + +——>——>——>——>[编译构建子系统常见问题](/pages/010c0403) + +——>——>——>——>[烧录常见问题](/pages/010c0404) + +——>——>——>——>[内核常见问题](/pages/010c0405) + +——>——>——>——>[移植常见问题](/pages/010c0406) + +——>——>——>——>[启动恢复常见问题](/pages/010c0407) + +——>——>——>——>[系统应用常见问题](/pages/010c0408) + +——>——> 贡献 + +——>——>——>[参与贡献](/pages/010d01) + +——>——>——> [行为准则](/pages/010d02) + +——>——>——>[贡献代码](/pages/010d03) + +——>——>——>[贡献流程](/pages/010d04) + +——>——>——> [贡献文档](/pages/extra/20a162/) + +——>——>——>——>[写作规范](/pages/010d0501) + +——>——>——>——>[为发行版本撰写配套文档](/pages/010d0502) + +——>——>——>[社区沟通与交流](/pages/010d06) + +——>——>——>[FAQ](/pages/010d07) \ No newline at end of file